fix p48
This commit is contained in:
@@ -292,6 +292,26 @@ final readonly class AgentRunner
|
|||||||
$optimizedShopQuery = '';
|
$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(
|
$ragAnchoredShopSearchQuery = $this->enrichShopSearchQueryWithRagAnchor(
|
||||||
prompt: $originalPrompt,
|
prompt: $originalPrompt,
|
||||||
shopSearchQuery: $shopSearchQuery,
|
shopSearchQuery: $shopSearchQuery,
|
||||||
@@ -2581,6 +2601,83 @@ final readonly class AgentRunner
|
|||||||
return trim($query);
|
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(
|
private function enrichReferentialShopQueryFromHistory(
|
||||||
string $query,
|
string $query,
|
||||||
string $sourcePrompt,
|
string $sourcePrompt,
|
||||||
|
|||||||
Reference in New Issue
Block a user