From 10dd7922a2f5e40e28687eeaceb1c6184cfbf759 Mon Sep 17 00:00:00 2001 From: team 1 Date: Wed, 6 May 2026 12:14:13 +0200 Subject: [PATCH] fix p48 --- src/Agent/AgentRunner.php | 97 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/src/Agent/AgentRunner.php b/src/Agent/AgentRunner.php index 83df611..6302294 100644 --- a/src/Agent/AgentRunner.php +++ b/src/Agent/AgentRunner.php @@ -292,6 +292,26 @@ final readonly class AgentRunner $optimizedShopQuery = ''; } + $referentialAnchoredShopSearchQuery = $this->guardReferentialShopQueryFallbackWithHistoryAnchor( + prompt: $originalPrompt, + shopSearchQuery: $shopSearchQuery, + commerceHistoryContext: $shopQueryHistoryContext + ); + + if ($referentialAnchoredShopSearchQuery !== $shopSearchQuery) { + $this->agentLogger->info('Enriched referential shop fallback query with history anchor', [ + 'userId' => $userId, + 'prompt' => $prompt, + 'routingPrompt' => $routingPrompt, + 'optimizedShopQuery' => $optimizedShopQuery, + 'shopSearchQuery' => $shopSearchQuery, + 'referentialAnchoredShopSearchQuery' => $referentialAnchoredShopSearchQuery, + ]); + + $shopSearchQuery = $referentialAnchoredShopSearchQuery; + $optimizedShopQuery = ''; + } + $ragAnchoredShopSearchQuery = $this->enrichShopSearchQueryWithRagAnchor( prompt: $originalPrompt, shopSearchQuery: $shopSearchQuery, @@ -2581,6 +2601,83 @@ final readonly class AgentRunner return trim($query); } + private function guardReferentialShopQueryFallbackWithHistoryAnchor( + string $prompt, + string $shopSearchQuery, + string $commerceHistoryContext + ): string { + if (!$this->agentRunnerConfig->isShopQueryContextAnchorEnrichmentEnabled()) { + return $shopSearchQuery; + } + + if (trim($commerceHistoryContext) === '') { + return $shopSearchQuery; + } + + if (!$this->shouldUseCommerceHistoryForShopQuery($prompt)) { + return $shopSearchQuery; + } + + $combined = trim($shopSearchQuery . ' ' . $prompt); + if (!$this->containsConfiguredShopQueryAnchorTrigger($combined)) { + return $shopSearchQuery; + } + + $anchor = $this->normalizeShopQueryAnchor( + $this->extractLatestConfiguredShopQueryContextAnchor($commerceHistoryContext) + ); + + if ($anchor === '' || $this->queryAlreadyContainsAllAnchorTokens($shopSearchQuery, $anchor)) { + return $shopSearchQuery; + } + + $referentialQuery = $this->extractReferentialShopQueryTriggerTerms($combined); + if ($referentialQuery === '') { + return $shopSearchQuery; + } + + $template = $this->agentRunnerConfig->getShopQueryContextAnchorEnrichmentTemplate(); + $enriched = $this->renderAgentTemplate($template, [ + 'anchor' => $anchor, + 'query' => $referentialQuery, + ]); + $enriched = preg_replace('/\s+/u', ' ', $enriched) ?? $enriched; + $enriched = trim($enriched); + + return $enriched !== '' ? $enriched : $shopSearchQuery; + } + + private function extractReferentialShopQueryTriggerTerms(string $text): string + { + $tokens = $this->tokenizeShopQueryCandidate($text); + + if ($tokens === []) { + return ''; + } + + $triggerTokens = []; + foreach ($this->agentRunnerConfig->getShopQueryContextAnchorEnrichmentTriggerTerms() as $term) { + foreach ($this->tokenizeShopQueryCandidate($term) as $termToken) { + $triggerTokens[$termToken] = true; + } + } + + if ($triggerTokens === []) { + return ''; + } + + $out = []; + foreach ($tokens as $token) { + if (!isset($triggerTokens[$token]) || isset($out[$token])) { + continue; + } + + $out[$token] = $token; + } + + return implode(' ', array_values($out)); + } + private function enrichReferentialShopQueryFromHistory( string $query, string $sourcePrompt,