From 84ba5280362718aa4d57ddc1fb37fefddd15b16b Mon Sep 17 00:00:00 2001 From: team 1 Date: Fri, 17 Apr 2026 07:45:30 +0200 Subject: [PATCH] optimize flow retrieval --- src/Agent/AgentRunner.php | 5 ++--- src/Agent/PromptBuilder.php | 2 +- src/Commerce/ShopSearchService.php | 34 ++++++++++++++++-------------- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/Agent/AgentRunner.php b/src/Agent/AgentRunner.php index 999d169..3b84c2b 100644 --- a/src/Agent/AgentRunner.php +++ b/src/Agent/AgentRunner.php @@ -93,7 +93,7 @@ final readonly class AgentRunner yield $this->systemMsg("Ich optimere die Recherche...", "think"); - //Call ai for optimized swag query + //Call AI for optimized swag query foreach ($this->ollamaClient->stream($promptSwagSearch) as $swagToken) { if (!is_string($swagToken)) { @@ -111,7 +111,7 @@ final readonly class AgentRunner yield $this->systemMsg("Ich rufe Recherchedaten ab (type: " . $commerceIntent . ")", "think"); - //Search in swag by ai optimized query + //Search in swag by AI optimized query try { $shopResults = $swagFullOutPut !== '' ? $this->shopSearchService->search($swagFullOutPut, $commerceIntent) @@ -122,7 +122,6 @@ final readonly class AgentRunner 'exception' => $e, ]); - $shopResults = []; yield $this->systemMsg('Shopdaten konnten nicht geladen werden, ich antworte mit Wissensbasis weiter...', 'think'); } } diff --git a/src/Agent/PromptBuilder.php b/src/Agent/PromptBuilder.php index 48720ae..d6606e4 100644 --- a/src/Agent/PromptBuilder.php +++ b/src/Agent/PromptBuilder.php @@ -129,7 +129,7 @@ final readonly class PromptBuilder } if ($product->customFields) { - $parts[] = "Meta-Informationen: " . $product->customFields; + $parts[] = "Meta-Information: " . $product->customFields; } $lines[] = implode("\n", $parts); diff --git a/src/Commerce/ShopSearchService.php b/src/Commerce/ShopSearchService.php index 49cce7b..81ff8de 100644 --- a/src/Commerce/ShopSearchService.php +++ b/src/Commerce/ShopSearchService.php @@ -15,13 +15,14 @@ use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface; final readonly class ShopSearchService { public function __construct( - private CommerceQueryParser $queryParser, + private CommerceQueryParser $queryParser, private ShopwareCriteriaBuilder $criteriaBuilder, - private StoreApiClient $storeApiClient, - private bool $enabled = true, - private int $maxResults = 25, - private string $baseUrl - ) { + private StoreApiClient $storeApiClient, + private bool $enabled = true, + private int $maxResults = 25, + private string $baseUrl + ) + { } /** @@ -65,12 +66,12 @@ final readonly class ShopSearchService } $results[] = new ShopProductResult( - id: (string) ($row['id'] ?? ''), - name: trim((string) ($row['translated']['name'] ?? '')), - productNumber: isset($row['productNumber']) ? (string) $row['productNumber'] : null, + id: (string)($row['id'] ?? ''), + name: trim((string)($row['translated']['name'] ?? '')), + productNumber: isset($row['productNumber']) ? (string)$row['productNumber'] : null, manufacturer: $this->extractManufacturer($row), price: $this->extractPrice($row), - available: isset($row['available']) ? (bool) $row['available'] : null, + available: isset($row['available']) ? (bool)$row['available'] : null, url: $this->baseUrl . $this->extractUrl($row), highlights: $this->extractHighlights($row), description: $this->cleanUpDescription($row), @@ -81,7 +82,7 @@ final readonly class ShopSearchService return array_values(array_filter( $results, - static fn (ShopProductResult $product): bool => $product->name !== '' + static fn(ShopProductResult $product): bool => $product->name !== '' )); } @@ -97,12 +98,13 @@ final readonly class ShopSearchService private function cleanUpDescription(array $description): string { if (isset($description['translated']['description'])) { - $newDesc = strip_tags((string) $description['translated']['description']); + $newDesc = strip_tags((string)$description['translated']['description']); + $newDesc = html_entity_decode($newDesc); $newDesc = preg_replace('/^[ \t]*\R/m', '', $newDesc); $newDesc = preg_replace('/[ \t]{2,}/', ' ', $newDesc); - $result = trim((string) $newDesc); + $result = trim((string)$newDesc); - return mb_substr($result, 0, 500); + return mb_substr($result, 0, 1500); } return ''; @@ -140,7 +142,7 @@ final readonly class ShopSearchService return null; } - return number_format((float) $unitPrice, 2, ',', '.') . ' €'; + return number_format((float)$unitPrice, 2, ',', '.') . ' €'; } private function extractUrl(array $row): ?string @@ -173,7 +175,7 @@ final readonly class ShopSearchService $highlights = []; if (isset($row['available'])) { - $highlights[] = (bool) $row['available'] ? 'Verfügbar' : 'Nicht verfügbar'; + $highlights[] = (bool)$row['available'] ? 'Verfügbar' : 'Nicht verfügbar'; } if (isset($row['productNumber']) && is_string($row['productNumber']) && trim($row['productNumber']) !== '') {