From d3ad1fd5bbef8a13105426fb4146548bbcb2a2db Mon Sep 17 00:00:00 2001 From: Mikhail Date: Wed, 26 Aug 2026 09:34:43 +0300 Subject: [PATCH] Preserve distance context before search normalization --- cmd/core-runtime/main.go | 8 ++++++-- cmd/core-runtime/main_test.go | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/cmd/core-runtime/main.go b/cmd/core-runtime/main.go index 8326e9b..6ab33f3 100644 --- a/cmd/core-runtime/main.go +++ b/cmd/core-runtime/main.go @@ -811,9 +811,13 @@ func main() { continue } learnedLexicon := interactiondomain.TaskLexiconFromHistory(conversationHistory) - searchQuery := interactiondomain.SearchQueryWithLexicon(part, learnedLexicon) + // Preserve the original utterance for semantic route compilation + // before removing a search imperative. Distance and route skills + // need the user's relation words (for example "до") to bind a + // remembered current location to the requested destination. + searchQuery := interactiondomain.TravelResearchQuery(part, conversationHistory, now) + searchQuery = interactiondomain.SearchQueryWithLexicon(searchQuery, learnedLexicon) searchQuery = interactiondomain.TimeDifferenceResearchQuery(searchQuery) - searchQuery = interactiondomain.TravelResearchQuery(searchQuery, conversationHistory, now) // The research capability may try its configured source and a // source-recovery fallback. Its caller must leave enough budget for // both attempts and evidence evaluation. diff --git a/cmd/core-runtime/main_test.go b/cmd/core-runtime/main_test.go index 39632a2..2c74324 100644 --- a/cmd/core-runtime/main_test.go +++ b/cmd/core-runtime/main_test.go @@ -101,6 +101,15 @@ func TestResearchIdentifiersExcludeSearchDate(t *testing.T) { } } +func TestResearchQueryKeepsDistanceRelationBeforeSearchNormalization(t *testing.T) { + history := []interaction.HumanUtterance{{Content: "я сейчас в Москве"}} + query := interactiondomain.TravelResearchQuery("сколько километров до Сочи?", history, time.Time{}) + query = interactiondomain.SearchQueryWithLexicon(query, interactiondomain.TaskLexicon{}) + if query != "расстояние между Москве и Сочи в километрах по прямой и по дороге" { + t.Fatalf("distance query lost remembered origin: %q", query) + } +} + func TestResponseReviewPreservesAttemptedResearchOutcome(t *testing.T) { if reviewMayReplacePlanningReply(false, false, true, false, "Уточните аэропорт.", "Пока не смог получить проверяемый ответ.") { t.Fatal("review replaced an honest unbacked research outcome") -- 2.54.0