Keep conversational replies semantically grounded #307
@@ -629,7 +629,7 @@ func main() {
|
||||
activeFocusName = previousFocus.ProjectDisplayName
|
||||
activeFocusProvenance = previousFocus.Provenance
|
||||
}
|
||||
planningReply := identityReply
|
||||
planningReply := semantic.Reply
|
||||
workPlanned := false
|
||||
needsCognition := semantic.NeedsCognition
|
||||
projectID := ""
|
||||
@@ -802,12 +802,13 @@ func main() {
|
||||
ConfidenceMillis: semantic.Interpretation.ConfidenceMillis,
|
||||
})
|
||||
cancelReview()
|
||||
stableSemanticReply := identityReply != "" || semantic.Interpretation.SpeechAct == interaction.SpeechActConversational || semantic.Interpretation.SpeechAct == interaction.SpeechActConfirmation || semantic.Interpretation.SpeechAct == interaction.SpeechActRejection
|
||||
if reviewErr != nil {
|
||||
log.Printf("cognitive response review unavailable: %v", reviewErr)
|
||||
} else if identityReply == "" {
|
||||
} else if !stableSemanticReply {
|
||||
planningReply = reviewedReply
|
||||
} else if reviewedReply != planningReply {
|
||||
log.Printf("cognitive response review proposed identity rewrite; preserving semantic identity reply")
|
||||
log.Printf("cognitive response review proposed stable semantic rewrite; preserving semantic reply")
|
||||
}
|
||||
}
|
||||
response := interaction.ChatMessageResponse{
|
||||
|
||||
@@ -329,6 +329,19 @@ func semanticReply(message string, result SemanticResult, previousFocus *situati
|
||||
return "Исправление записано отдельно, и я вижу здесь ещё новую рабочую просьбу; история сохранена без переписывания."
|
||||
}
|
||||
return "Исправление записано новым сообщением; прежняя история сохранена."
|
||||
case interaction.SpeechActConversational:
|
||||
lower := strings.ToLower(message)
|
||||
if strings.Contains(lower, "спасибо") || strings.Contains(lower, "благодар") {
|
||||
return "Пожалуйста."
|
||||
}
|
||||
if strings.Contains(lower, "привет") || strings.Contains(lower, "здравств") {
|
||||
return "Здравствуйте."
|
||||
}
|
||||
return "Я рядом."
|
||||
case interaction.SpeechActConfirmation:
|
||||
return "Хорошо."
|
||||
case interaction.SpeechActRejection:
|
||||
return "Понял."
|
||||
case interaction.SpeechActQuestion:
|
||||
lower := strings.ToLower(message)
|
||||
if previousFocus != nil && (strings.Contains(lower, "сейчас") || strings.Contains(lower, "что мы") || strings.Contains(lower, "делаем")) {
|
||||
|
||||
@@ -43,6 +43,16 @@ func TestInterpretUtteranceNamingPreferenceIsAccepted(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestInterpretUtteranceThanksHasNaturalConversationalReply(t *testing.T) {
|
||||
result := interpretForTest(t, "спасибо", nil, "")
|
||||
if result.Interpretation.SpeechAct != interaction.SpeechActConversational {
|
||||
t.Fatalf("expected conversational act, got %s", result.Interpretation.SpeechAct)
|
||||
}
|
||||
if result.Reply != "Пожалуйста." {
|
||||
t.Fatalf("unexpected thanks reply: %q", result.Reply)
|
||||
}
|
||||
}
|
||||
|
||||
func TestInterpretUtteranceDirectiveRecordsOutcomeWithoutExecution(t *testing.T) {
|
||||
result := interpretForTest(t, "Поменяй базу на УПО1.", activeFocus("upo", "УПО"), "")
|
||||
if result.Interpretation.SpeechAct != interaction.SpeechActDirective {
|
||||
|
||||
Reference in New Issue
Block a user