# RetrieX Patch 44 - Runtime Answer Guard / Shop Follow-up Cleanup ## Ziel Dieser Patch behandelt drei Fehler außerhalb der p43 YAML-/Listen-/Maps-Konsolidierung: 1. Sporadische endlos lange Produktlisten, bei denen ein letztes Shop-Produkt wiederholt wird. 2. Falscher einleitender Satz bei direkten Zubehör-/Kabel-Shopfragen wie `zeige mir Anschlusskabel für pH/Redox`. 3. Falsche Shop-Follow-up-Query `schaue` bei `schaue im shop` nach einer vorherigen fachlichen Frage. ## Änderungen ### 1. Runtime-Schutz gegen Endlosantworten Dateien: - `src/Agent/AgentRunner.php` - `src/Config/AgentRunnerConfig.php` - `config/retriex/agent.yaml` Änderung: - Neuer konfigurierbarer `final_answer_guard`. - Stoppt die finale LLM-Ausgabe, wenn eine Antwort zu lang wird oder dieselbe relevante Antwortzeile zu oft wiederholt wird. - Der Guard läuft im finalen Streaming-Pfad und ist generisch: keine Chlor-, Schwimmbad-, Testomat- oder Produkt-Sonderlogik. - Bei Abbruch wird ein kurzer Hinweis ausgegeben statt endlos weiterzustreamen. ### 2. Ollama Output-Cap Dateien: - `src/Infrastructure/OllamaClient.php` - `config/retriex/model.yaml` - `config/services.yaml` - `src/Config/RetriexEffectiveConfigProvider.php` Änderung: - Neuer Parameter `retriex.llm.num_predict: 2048`. - Wird als Ollama-Option `num_predict` gesendet. - Wichtig für Installationen mit blockierender Ollama-Generierung (`stream=false`), damit Runaway-Ausgaben bereits auf Modellseite begrenzt werden. ### 3. `schaue im shop` als Meta-Shop-Follow-up Datei: - `config/retriex/language.yaml` Änderung: - Ergänzt zentrale User-Instruction-Terme: `schaue`, `schau`, `schauen`, `nachschauen`. - Dadurch wird `schaue im shop` wie `suche im shop` als Meta-Shop-Follow-up behandelt und kann den vorherigen Kontext verwenden, statt die Suchquery `schaue` zu senden. ### 4. Zubehörantwort-Hardening Datei: - `config/retriex/prompt.yaml` Änderung: - Verstärkt Antwortregeln für direkte Zubehör-/Kabel-Shopfragen. - Bei passenden Shop-Treffern soll nicht mit einer fehlenden Hauptgerät-/Messgeräte-Aussage begonnen werden. - Das verhindert Sätze wie sinngemäß „kein sicher belegter Testomat für pH-Messung“, wenn der Nutzer Anschlusskabel für pH/Redox angefragt hat. ## Geänderte Dateien - `config/retriex/agent.yaml` - `config/retriex/language.yaml` - `config/retriex/model.yaml` - `config/retriex/prompt.yaml` - `config/services.yaml` - `src/Agent/AgentRunner.php` - `src/Config/AgentRunnerConfig.php` - `src/Config/RetriexEffectiveConfigProvider.php` - `src/Infrastructure/OllamaClient.php` ## Lokale Prüfungen Ausgeführt: ```bash php -l src/Agent/AgentRunner.php php -l src/Config/AgentRunnerConfig.php php -l src/Infrastructure/OllamaClient.php php -l src/Config/RetriexEffectiveConfigProvider.php python3 -c 'YAML parse check for changed YAML files' ``` Ergebnis: - PHP-Syntax der geänderten PHP-Dateien: grün. - YAML-Parsing der geänderten YAML-Dateien: grün. - Konfigurations-Sanity für `schaue/schau` und `shop`: grün. Nicht vollständig lokal ausführbar: ```bash php bin/console mto:agent:config:validate ``` Grund: Im entpackten ZIP ist kein `vendor/` enthalten; `bin/console` bricht mit `Dependencies are missing. Try running "composer install".` ab. ## Nach dem Einspielen bitte prüfen ```bash bin/console cache:clear bin/console mto:agent:config:validate bin/console mto:agent:regression:test bin/console mto:agent:config:audit-source --details bin/console mto:agent:config:audit-patterns --details ``` ## Manuelle Regressionen 1. `ich würde gern chlor im schwinnbad messen` - Erwartung: keine endlose Wiederholung des letzten Produkts. - Falls das Modell trotzdem wiederholt, muss die Antwort durch den Guard abbrechen. 2. `zeige mir Anschlusskabel für pH/Redox` - Erwartung: Zubehör-/Kabeltreffer direkt listen. - Kein einleitender Satz über fehlenden Testomat oder fehlendes pH-Messgerät. 3. Dialog: - `welche indikatoren gibt es für die messung von freiem chlor` - danach: `schaue im shop` - Erwartung: Shop-Follow-up nutzt den vorherigen Kontext, nicht die Query `schaue`. ## Hinweise - Keine Retrieval-, Ranking- oder Produktmatching-Logik wurde geändert. - Keine neuen fachlichen Token-/Produktlisten im PHP-Core. - Neue fachliche/sprachliche Begriffe liegen in YAML. - Der Runtime-Guard ist bewusst generisch und konfigurierbar.