From 8124fcbcc3c7971f50a475014c1b005e78f4b7e6 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Tue, 25 Aug 2026 12:07:16 +0300 Subject: [PATCH] Improve degraded household replies --- cmd/core-runtime/household_scenario_test.go | 37 +++++++++++++++++++++ cmd/core-runtime/main.go | 4 +-- cmd/core-runtime/main_test.go | 2 +- 3 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 cmd/core-runtime/household_scenario_test.go diff --git a/cmd/core-runtime/household_scenario_test.go b/cmd/core-runtime/household_scenario_test.go new file mode 100644 index 0000000..dd0ed2a --- /dev/null +++ b/cmd/core-runtime/household_scenario_test.go @@ -0,0 +1,37 @@ +package main + +import ( + "testing" + "time" + + "git.cin.su/m/Assistant/contracts/capability" + interactiondomain "git.cin.su/m/Assistant/modules/interaction/domain" +) + +func TestHouseholdResearchAndActionRoutesRemainIndependent(t *testing.T) { + candidate := interactiondomain.BuildDeterministicCandidate("проверь погоду в Казани, найди кафе рядом и напомни вечером позвонить", "", time.Unix(10, 0).UnixMilli()) + planned := buildChatRoutePlan(interactiondomain.SemanticResult{NeedsCognition: candidate.NeedsCognition, CapabilityHints: candidate.CapabilityHints}) + want := map[chatRouteKind]bool{chatRouteResearch: false, chatRouteConversation: false, chatRouteAction: false} + for _, route := range planned { + if _, ok := want[route.Kind]; ok { + want[route.Kind] = true + } + } + for kind, present := range want { + if !present { + t.Fatalf("route %s missing for mixed household request: candidate=%+v routes=%+v", kind, candidate, planned) + } + } +} + +func TestHouseholdCreativeRouteDoesNotUseResearch(t *testing.T) { + candidate := interactiondomain.BuildDeterministicCandidate("расскажи сказку о Колобке", "", time.Unix(10, 0).UnixMilli()) + for _, hint := range candidate.CapabilityHints { + if capability.CapabilityKind(hint) == capability.CapabilityKindWebResearch { + t.Fatalf("creative request selected web research: %+v", candidate) + } + } + if !interactiondomain.IsCreativeRequest("расскажи сказку о Колобке") { + t.Fatal("creative request was not recognized") + } +} diff --git a/cmd/core-runtime/main.go b/cmd/core-runtime/main.go index 830d2bf..ee1e4ca 100644 --- a/cmd/core-runtime/main.go +++ b/cmd/core-runtime/main.go @@ -1924,9 +1924,9 @@ func humanCognitiveChannelReply(kind interaction.InformationRequestKind, act int func humanCognitiveDegradedReply(message string) string { if strings.TrimSpace(message) == "" { - return "Сейчас когнитивный канал недоступен; Домовой остаётся на связи." + return "Сейчас не удалось обработать запрос." } - return "Сейчас когнитивный канал недоступен. Повторю запрос через доступный маршрут, когда он восстановится." + return "Не удалось получить проверяемые данные. Ответ не выдумываю." } func humanCapabilityList(kinds []capability.CapabilityKind) string { diff --git a/cmd/core-runtime/main_test.go b/cmd/core-runtime/main_test.go index ce57e5b..0e40a9b 100644 --- a/cmd/core-runtime/main_test.go +++ b/cmd/core-runtime/main_test.go @@ -73,7 +73,7 @@ func TestCognitiveConfigurationRequestDoesNotPretendToMutate(t *testing.T) { func TestCognitiveDegradedReplyKeepsDomovoyAlive(t *testing.T) { reply := humanCognitiveDegradedReply("Помоги настроить локальную модель") - if !strings.Contains(reply, "когнитивный канал") || !strings.Contains(reply, "Повторю") { + if strings.Contains(reply, "когнитивный канал") || strings.Contains(reply, "Повторю") || !strings.Contains(reply, "не выдумываю") { t.Fatalf("unexpected degraded reply: %q", reply) } } -- 2.54.0