From 2d88d488f474b62e7c3d44d9ae4f3ce5ac4d0eb4 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Tue, 25 Aug 2026 22:42:03 +0300 Subject: [PATCH] Route plane requests through verified research --- modules/interaction/domain/chat.go | 2 +- modules/interaction/domain/chat_test.go | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/interaction/domain/chat.go b/modules/interaction/domain/chat.go index a1b9541..3768987 100644 --- a/modules/interaction/domain/chat.go +++ b/modules/interaction/domain/chat.go @@ -612,7 +612,7 @@ func sourceDependentQuestion(primary, secondary interaction.SpeechAct, tokens [] currentCue := containsStemInTokens(tokens, "сейчас", "сегодня", "текущ", "актуаль", "последн", "прямо") observedStateCue := containsStemInTokens(tokens, "погод", "температур", "осад", "ветер", "курс", "цен", "стоим", "новост", "распис", "событ", "статус", "доступен", "работает", "запущен", "срок") || approximateToken(tokens, "погод", 2) placeSearchCue := containsStemInTokens(tokens, "ресторан", "кафе", "отел", "магаз", "мест", "ближ", "адрес", "организац", "бренд", "товар", "артикул", "продавец", "маркетплейс", "wildberries", "wb") - travelSearchCue := containsStemInTokens(tokens, "билет", "рейс", "поезд", "автобус", "перелет", "перелёт", "отправлен", "прибыт", "расстоян", "километр", "добрат", "маршрут") + travelSearchCue := containsStemInTokens(tokens, "билет", "рейс", "самолет", "самолёт", "вылет", "поезд", "автобус", "перелет", "перелёт", "отправлен", "прибыт", "расстоян", "километр", "добрат", "маршрут") timeDifferenceCue := containsStemInTokens(tokens, "разниц") && containsStemInTokens(tokens, "времен", "час") return currentCue || observedStateCue || placeSearchCue || travelSearchCue || timeDifferenceCue } diff --git a/modules/interaction/domain/chat_test.go b/modules/interaction/domain/chat_test.go index 26c0da5..6e2a46a 100644 --- a/modules/interaction/domain/chat_test.go +++ b/modules/interaction/domain/chat_test.go @@ -49,6 +49,13 @@ func TestNewHumanUtteranceClassifiesReminderAndCapabilityConnectionAsDirective(t } } +func TestPlaneRequestReceivesTravelResearchCapability(t *testing.T) { + candidate := BuildDeterministicCandidate("найди ближайший самолет до Казани", "", 100) + if !containsToken(candidate.CapabilityHints, "WEB_RESEARCH") { + t.Fatalf("plane request did not select web research: %+v", candidate) + } +} + func TestDeterministicCandidateIsInvariantToMissingQuestionMarkForIdentityAndArithmetic(t *testing.T) { cases := []struct { message string -- 2.54.0