diff --git a/cmd/core-runtime/main.go b/cmd/core-runtime/main.go index e5c3544..7a2a6d3 100644 --- a/cmd/core-runtime/main.go +++ b/cmd/core-runtime/main.go @@ -511,7 +511,6 @@ func main() { var effectiveTaskMessage = interactiondomain.StripAssistantVocative(utterance.Content) var previousTask *interaction.HumanUtterance var conversationHistory []interaction.HumanUtterance - var conversationOnlyHistory []interaction.HumanUtterance if request.ConversationID != "" { var historyErr error conversationHistory, historyErr = interactionRepository.Utterances(r.Context(), conversation.ID) @@ -519,7 +518,6 @@ func main() { log.Printf("interaction conversation history unavailable: %v", historyErr) } } - conversationOnlyHistory = append(conversationOnlyHistory, conversationHistory...) // Keep durable user context available even when the web client carries a // conversation ID; a new or rotated conversation must not erase learned // preferences. @@ -530,7 +528,7 @@ func main() { log.Printf("interaction principal history loaded: %d utterances", len(recentUserHistory)) } conversationHistory = append(conversationHistory, recentUserHistory...) - if continuation := interactiondomain.ContinueLocalSearch(effectiveTaskMessage, conversationOnlyHistory); continuation != "" { + if continuation := interactiondomain.ContinueLocalSearch(effectiveTaskMessage, conversationHistory); continuation != "" { effectiveTaskMessage = continuation } if request.ConversationID != "" && interactiondomain.IsRetryRequest(utterance.Content) { diff --git a/modules/interaction/domain/travel.go b/modules/interaction/domain/travel.go index fa0096e..5cc0d5b 100644 --- a/modules/interaction/domain/travel.go +++ b/modules/interaction/domain/travel.go @@ -73,8 +73,15 @@ func ContinueLocalSearch(message string, history []interaction.HumanUtterance) s if len(tokens) == 0 || len(tokens) > 3 || (tokens[0] != "в" && tokens[0] != "на" && tokens[0] != "около") { return "" } - for index := len(history) - 1; index >= 0; index-- { - previous := strings.TrimSpace(StripAssistantVocative(history[index].Content)) + var latest *interaction.HumanUtterance + for index := range history { + if latest == nil || history[index].ReceivedAtUnixMillis > latest.ReceivedAtUnixMillis { + candidate := history[index] + latest = &candidate + } + } + if latest != nil { + previous := strings.TrimSpace(StripAssistantVocative(latest.Content)) previousTokens := semanticTokens(previous) if containsStemInTokens(previousTokens, "ресторан", "кафе") && containsStemInTokens(previousTokens, "ближ", "рядом") { return strings.TrimSpace(previous + " " + current)