From 98447703ac776e8b4eb1a38b22359b05ca291a0f Mon Sep 17 00:00:00 2001 From: team 1 Date: Sun, 3 May 2026 18:12:52 +0200 Subject: [PATCH] patch 20o --- config/retriex/agent.yaml | 2 +- config/retriex/commerce.yaml | 1 + retriex_work/config/retriex/commerce.yaml | 369 ---------------------- retriex_work/config/retriex/intent.yaml | 323 ------------------- 4 files changed, 2 insertions(+), 693 deletions(-) delete mode 100644 retriex_work/config/retriex/commerce.yaml delete mode 100644 retriex_work/config/retriex/intent.yaml diff --git a/config/retriex/agent.yaml b/config/retriex/agent.yaml index e193ffc..aa8c776 100644 --- a/config/retriex/agent.yaml +++ b/config/retriex/agent.yaml @@ -14,7 +14,7 @@ parameters: max_output_chars: 700 max_added_tokens: 2 max_length_ratio_percent: 150 - heartbeat_message: 'Ich prüfe die Eingabe auf Tippfehler…' + heartbeat_message: 'Ich prüfe die Eingabe…' output_prefix_pattern: '/^(?:normalisiert|korrigiert|corrected|normalized)\s*:\s*/iu' skip_patterns: - '/https?:\/\//iu' diff --git a/config/retriex/commerce.yaml b/config/retriex/commerce.yaml index 86c5762..cd390db 100644 --- a/config/retriex/commerce.yaml +++ b/config/retriex/commerce.yaml @@ -58,6 +58,7 @@ parameters: - bitte - preiswerte - gern + - lösung - eine - größer - würde diff --git a/retriex_work/config/retriex/commerce.yaml b/retriex_work/config/retriex/commerce.yaml deleted file mode 100644 index f591a7d..0000000 --- a/retriex_work/config/retriex/commerce.yaml +++ /dev/null @@ -1,369 +0,0 @@ -# Commerce / Shopware Store API configuration. -# The existing Commerce and Shopware services stay unchanged; these values only centralize wiring. -parameters: - retriex.commerce.enabled: true - retriex.commerce.max_shop_results: '%env(SHOPWARE_STORE_API_MAX_RESULT)%' - retriex.commerce.shop_timeout: 15 - retriex.commerce.store_api_base_url: '%env(SHOPWARE_STORE_API_BASE_URL)%' - retriex.commerce.sales_channel_access_key: '%env(SHOPWARE_SALES_CHANNEL_ACCESS_KEY)%' - - retriex.commerce.search_repair.enabled: true - retriex.commerce.search_repair.max_queries: 2 - retriex.commerce.search_repair.min_primary_results_without_repair: 2 - - # Commerce query parser configuration. - # YAML is the only operative source of truth; PHP must not contain parser defaults. - retriex.commerce_query.config: - known_brands: - - heyl - - horiba - - neomeris - - phrases_to_remove: - - ich suche - - suche - - habt ihr - - gibt es - - gebe mir - - gib mir - - zeige mir - - welches gerät - - welche gerät - - welches modell - - welches ist besser - - welches ist am besten - - alternative - - alternativen - - unter anderem - - u a - - welche - - welcher - - welches - - welchen - - sind - - ist - - geeignet - - geeigent - - verfügbarkeit - - verfuegbarkeit - - filter_search_tokens: - - auch - - noch - - nochmal - - zusätzlich - - dazu - - davon - - größer - - stattdessen - - bitte - - gern - - preiswerte - - zur - - mein - - eine - - würde - - ich - - gerne - - zeige - - zeig - - such - - suche - - finde - - find - - mir - - mal - - von - - im - - in - - für - - fuer - - welche - - welcher - - welches - - welchen - - sind - - ist - - geeignet - - geeigent - - verfügbarkeit - - verfuegbarkeit - - prüfe - - pruefe - - den - - die - - das - - der - - dem - - des - - und - - oder - - sowie - - seine - - seinen - - seiner - - seinem - - seines - - siene - - sienen - - siener - - sienem - - sienes - - gebe - - gib - - nenne - - nenn - - preis - - preise - - preisen - - kostet - - kpstet - - ksotet - - kosten - - ua - - also - - gut - - gute - - guten - - guter - - gutes - - passen - - passend - - search_control_tokens: - - shop - - store - - produkt - - produkte - - artikel - - kaufen - - kaufe - - bestellen - - bestelle - - online - - search_token_corrections: - siene: seine - sienen: seinen - siener: seiner - sienem: seinem - sienes: seines - indicatoren: indikatoren - schwinnbad: schwimmbad - schwimbad: schwimmbad - kpstet: kostet - ksotet: kostet - - search_token_canonical_map: - indikatoren: indikator - indicators: indikator - indicator: indikator - reagenzien: reagenz - reagents: reagenz - reagent: reagenz - produkte: produkt - - semantic_shop_search_tokens: - - indikator - - indicator - - reagenz - - reagent - - zubehör - - zubehor - - ersatzteil - - anschlusskabel - - kabel - - sensorkabel - - elektrodenkabel - - verbrauchsmaterial - - chemie - - indikatorchemie - - reagenzchemie - - kit - - set - - filter - - pumpe - - pumpenkopf - - motorblock - - lösung - - loesung - - solution - - teststreifen - - gerät - - geraet - - messgerät - - messgeraet - - analysegerät - - analysegeraet - - analysator - - monitor - - controller - - system - - normalization: - search: ['€'] - replace: [' euro '] - - text: - trim_characters: - - space - - tab - - lf - - cr - - nul - - vertical_tab - - '-' - - '.' - - ',' - - limits: - min_search_token_length: 1 - min_direct_product_token_length: 1 - direct_product_max_tokens: 4 - model_context_token_window: 4 - min_meaningful_alpha_token_length: 2 - max_shop_search_tokens: 6 - - patterns: - history_context: 'chat|auch|noch|nochmal|zusätzlich|dazu|davon|stattdessen|alternative|alternativen|größer|groesser|kleiner|gleich(?:e|en|er|es)?|derselbe|dieselbe|dasselbe|wie oben|wie zuvor|wie gehabt' - history_context_value_template: '/\b({fragment})\b/u' - prompt_sanitize: '/[^\p{L}\p{N}\s.,\-]/u' - whitespace_collapse: '/\s+/u' - whitespace_split: '/\s+/u' - history_question: '/^Question:\s*(.+)$/m' - price_between: '/\bzwischen\s+(\d+(?:[.,]\d+)?)\s+und\s+(\d+(?:[.,]\d+)?)\s+euro\b/u' - price_max: '/\b(?:unter|bis|max(?:imal)?)\s+(\d+(?:[.,]\d+)?)\s+euro\b/u' - price_min: '/\b(?:ab|mindestens|min)\s+(\d+(?:[.,]\d+)?)\s+euro\b/u' - price_removal_between: '/\bzwischen\s+\d+(?:[.,]\d+)?\s+und\s+\d+(?:[.,]\d+)?\s*euro\b/u' - price_removal_minmax: '/\b(?:unter|bis|max(?:imal)?|ab|mindestens|min)\s+\d+(?:[.,]\d+)?\s*euro\b/u' - price_removal_intent_template: '/\b(?:{price_pattern})\b/u' - direct_product_digit: '/\d/u' - model_like: '/\b[a-zäöüß][a-zäöüß®\-]*(?:\s+[a-zäöüß][a-zäöüß®\-]*){0,2}\s+\d{2,5}[a-z0-9\-]*\b/u' - accessory_like: '/\b(?:indikator|indicator|reagenz|reagent|kit|set)\s+\d{1,5}[a-z0-9\-]*\b/u' - contains_digit: '/\d/u' - model_number_token: '/^(?:\d{2,5}[a-z0-9\-]*|[a-z]{1,6}\d{1,5}[a-z0-9\-]*)$/u' - model_context_token: '/^[\p{L}][\p{L}0-9®\-]{2,}$/u' - model_suffix_token: '/^[a-z]{1,4}\d{0,3}$/u' - instruction_or_presentation_token: '/^(?:zeig(?:e)?|such(?:e)?|find(?:e)?|gib|gebe|nenn(?:e)?|liefer(?:e)?|erstelle?|mach(?:e)?|brauch(?:e)?|will|möchte|moechte|hätte|haette|kannst|bitte|mal|alle|alles|komplett|vollständig|vollstaendig|gesamt|ganze|ganzen|liste|listung|auflistung|tabelle|tabellarisch|übersicht|uebersicht|anzeigen?|ausgeben?|darstellen?|antwort(?:e)?|erklär(?:e)?|erklaer(?:e)?|info|infos|informationen|dazu|hierzu|damit|davon|an|als|mit|ohne|inkl|inklusive|also|gut|gute|guten|guter|gutes|passend|passen)$/u' - measurement_value_token: '/^\d+[.,]\d+$/u' - exact_token_removal_template: '/\b{token}\b/u' - brand_part_of_model_template: '/\b{brand}\s+\d{2,5}[a-z0-9\-]*\b/u' - - # Commerce reference resolver configuration. - # YAML is the only operative source of truth for conversation product and focus-term patterns. - retriex.commerce_reference_resolver.config: - conversation_product_patterns: - - '/\b(Testomat\s+2000\s+THCL)\b/ui' - - '/\b(Testomat\s+808)\b/ui' - - '/\b(Testomat\s+EVO\s+TH)\b/ui' - - '/\b(Testomat\s+EVO\s+CALC)\b/ui' - - '/\b(Testomat\s+ECO\s+PLUS)\b/ui' - - '/\b(Testomat\s+ECO\s+C)\b/ui' - - '/\b(Testomat\s+ECO)\b/ui' - - '/\b(Testomat\s+LAB\s+CL)\b/ui' - - '/\b(Testomat\s+LAB\s+MONO)\b/ui' - - '/\b(Testomat\s+2000)\b/ui' - - focus_term_patterns: - indikator: '/\bindikator(?:en)?\b/u' - indikatoren: '/\bindikator(?:en)?\b/u' - reagenz: '/\breagenz(?:ien)?\b/u' - reagenzien: '/\breagenz(?:ien)?\b/u' - zubehör: '/\bzubeh[oö]r\b/u' - ersatzteil: '/\bersatzteile?\b/u' - ersatzteile: '/\bersatzteile?\b/u' - service-set: '/\bservice(?:\s|-)?set\b/u' - filter: '/\bfilter\b/u' - pumpenkopf: '/\bpumpenkopf\b/u' - motorblock: '/\bmotorblock\b/u' - mehrwertpaket: '/\bmehrwertpaket\b/u' - neotecmaster: '/\bneotecmaster\b/u' - - # Shop matching and presentation configuration. - # YAML is the only operative source of truth; PHP must not contain shop matching defaults. - retriex.shop_matching.config: - top_product_log_limit: 3 - - # Shop role and focus lists are resolved from config/retriex/vocabulary.yaml. - # Direct list overrides may still be added to this parameter if a project needs them. - vocabulary_views: - device_focus_keywords: shop.device_focus - accessory_focus_keywords: shop.accessory_focus - device_query_keywords: shop.device_query - accessory_query_keywords: shop.accessory_query - accessory_product_keywords: shop.accessory_product - device_product_keywords: shop.device_product - - vocabulary_maps: - accessory_focus_variant_map: shop.accessory_focus_variants - - role_guard: - filter_accessory_products_for_device_queries: true - keep_ambiguous_products_for_device_queries: true - - scores: - exact_product_number_phrase: 160 - exact_product_name_phrase: 90 - exact_manufacturer_match: 40 - brand_contained_in_name: 20 - name_token_overlap_weight: 6 - product_number_token_overlap_weight: 10 - corpus_token_overlap_weight: 2 - name_number_overlap_weight: 18 - product_number_number_overlap_weight: 28 - corpus_number_overlap_weight: 8 - size_match: 12 - availability_bonus: 1 - device_query_device_product_bonus: 60 - device_query_accessory_penalty: 120 - accessory_query_accessory_product_bonus: 30 - accessory_query_device_product_bonus: 10 - - patterns: - contains_digit: '/\d/u' - matching_cleanup: '/[^\p{L}\p{N}]+/u' - whitespace_collapse: '/\s+/u' - token_split: '/[^\p{L}\p{N}]+/u' - - padding: - prefix: ' ' - suffix: ' ' - - price: - normalization_search: ['€', ' ', '.'] - normalization_replace: ['', '', ''] - decimals: 2 - decimal_separator: ',' - thousands_separator: '.' - suffix: ' €' - - custom_fields: - primary: migration_Backup_product_attr1 - secondary: migration_Backup_product_attr2 - use_cases: migration_Backup_product_attr4 - languages: migration_Backup_product_attr5 - - text: - primary_secondary_separator: ': ' - use_cases_label: 'Einsatzgebiete: ' - languages_label: 'Sprachen: ' - custom_field_join_separator: ' | ' - - description: - empty_line_pattern: '/^[ \t]*\R/m' - whitespace_cleanup_pattern: '/[ \t]{2,}/' - max_length: 1500 - - seo: - relative_prefix: '/' - - highlight: - available_label: Verfügbar - unavailable_label: Nicht verfügbar - product_number_prefix: 'Produktnummer: ' - - image: - missing_placeholder: no-image - - deduplication: - separator: '|' diff --git a/retriex_work/config/retriex/intent.yaml b/retriex_work/config/retriex/intent.yaml deleted file mode 100644 index 08109a3..0000000 --- a/retriex_work/config/retriex/intent.yaml +++ /dev/null @@ -1,323 +0,0 @@ -# Intent vocabulary and pattern configuration. -# Lists and thresholds mirror the previous PHP defaults exactly. -# Migrated config areas are YAML-only; remaining areas are migrated incrementally. -parameters: - retriex.intent.commerce.config: - strong_signals: - - shop - - alle - - preis - - kunde - - online - - produkt - - artikel - - sku - - kaufen - - kostet - - kpstet - - ksotet - - suche - - such - - finde - - finden - - analysegerät - - analysegeraet - - messgerät - - messgeraet - - pockettester - - pocket tester - - handmessgerät - - handmessgeraet - - analysator - - analyzer - - puffer - - kalibrierpuffer - - kalibrierlösung - - kalibrierloesung - - kalibrierung - - chemie - - reagenz - - reagenzien - - verbrauchsmaterial - - zubehör - - zubehoer - - ersatzteil - - anschlusskabel - - kabel - - sensorkabel - - elektrode - - elektrodenkabel - non_product_commerce_signals: - - shop - - alle - - kunde - - online - - kaufen - - kostet - - kpstet - - ksotet - - suche - - such - - finde - - finden - advisory_signals: - - passt - - eignet - - besser - - besten - - gut - - gut für - - gut fuer - - passend für - - passend fuer - - geeignet - - geeigent - - empfiehl - - empfehl - advisory_product_selection_patterns: - - '/\bmit\s+welche(?:m|n|r|s)?\s+(?:testomat(?:en)?|pockettester|pocket\s+tester|analysegerät|analysegeraet|messgerät|messgeraet|analysator|analyzer)\b.*\b(?:messen|messung|überwach(?:en|ung)?|ueberwach(?:en|ung)?)\b/u' - - '/\bwelche(?:r|s|n|m)?\s+(?:testomat(?:en)?|pockettester|pocket\s+tester|analysegerät|analysegeraet|messgerät|messgeraet|analysator|analyzer)\b.*\b(?:kann|können|koennen|misst|messen|überwacht|ueberwacht|eignet|geeignet|passt|gut|empfehl)\b.*\b(?:messen|messung|überwach(?:en|ung)?|ueberwach(?:en|ung)?)\b/u' - - '/\b(?:testomat(?:en)?|pockettester|pocket\s+tester|analysegerät|analysegeraet|messgerät|messgeraet|analysator|analyzer)\b.*\b(?:für|fuer)\b.*\b(?:messung|messen|überwachung|ueberwachung)\b/u' - - '/\b(?:ich\s+)?(?:würde|wuerde|möchte|moechte|will|brauche|benötige|benoetige)\b.{0,80}\b(?:messen|messung|überwachen|ueberwachen|kontrollieren)\b/u' - - '/\b(?:messen|messung|überwachen|ueberwachen|kontrollieren)\b.{0,80}\b(?:schwimmbad|pool|becken|wasseranalyse)\b/u' - price_terms: - - euro - - € - - eur - - teuer - - preis - - kosten - - kostet - - kpstet - - ksotet - color_terms: - - schwarz - - weiß - - weis - - blau - - grau - - beige - - rosa - - pink - - gruen - - orange - - braun - size_token_terms: - - xs - - s - - m - - l - - xl - - xxl - - xxxxl - size_terms: - - größe - - groesse - - grösse - support_diagnostic_patterns: - - '/\bfehler\b/u' - - '/\bfehlercode\b/u' - - '/\berror\b/u' - - '/\bstörung\b/u' - - '/\bstoerung\b/u' - - '/\balarm\b/u' - - '/\bstörungsmeldung\b/u' - - '/\bstoerungsmeldung\b/u' - - '/\bmeldung\b/u' - - '/\bwarnung\b/u' - - '/\bwarncode\b/u' - - '/\bcode\b/u' - - '/\bwas bedeutet\b/u' - - '/\bwarum\b/u' - - '/\bblinkt\b/u' - - '/\bzeigt\b/u' - - '/\bzeigt an\b/u' - - '/\bursache\b/u' - - '/\bdiagnose\b/u' - - '/\bservicefall\b/u' - - '/\bproblem\b/u' - - '/\bstörung beheben\b/u' - - '/\bstoerung beheben\b/u' - - '/\be\d{1,3}\b/u' - explicit_commerce_intent_patterns: - - '/\bshop\b/u' - - '/\bpreis\b/u' - - '/\bkosten\b/u' - - '/\bkostet\b/u' - - '/\bkpstet\b/u' - - '/\bksotet\b/u' - - '/\bkaufen\b/u' - - '/\bbestellen\b/u' - - '/\bprodukt\b/u' - - '/\bartikel\b/u' - - '/\bsku\b/u' - - '/\bonline\b/u' - - '/\bchemie\b/u' - - '/\breagenz(?:ien)?\b/u' - - '/\bverbrauchsmaterial(?:ien)?\b/u' - - '/\bzubehör\b/u' - - '/\bzubehoer\b/u' - - '/\bersatzteil(?:e)?\b/u' - - '/\banschlusskabel\b/u' - - '/\bkabel\b/u' - - '/\bsensorkabel\b/u' - - '/\belektrodenkabel\b/u' - technical_factual_knowledge: - signal_label: technical_factual_knowledge_query - question_marker_patterns: - - '/\bwas\s+ist\b/u' - - '/\bwelche?r?s?\b/u' - - '/\bwie\s+(hoch|niedrig|klein|gross|groß)\b/u' - - '/\bniedrigste[rsn]?\b/u' - - '/\bkleinste[rsn]?\b/u' - - '/\bhöchste[rsn]?\b/u' - - '/\bhoechste[rsn]?\b/u' - fact_patterns: - - '/\bgrenzwert(?:e|en|es)?\b/u' - - '/\bmessbereich(?:e|en|s)?\b/u' - - '/\bwasserhärte\b/u' - - '/\bwasserhaerte\b/u' - - '/\bresthärte\b/u' - - '/\bresthaerte\b/u' - - '/\bgesamthärte\b/u' - - '/\bgesamthaerte\b/u' - - '/\bauflösung\b/u' - - '/\baufloesung\b/u' - - '/\bindikator(?:en|s)?\b/u' - - '/\btestomat(?:en|s)?\b/u' - - '/\büberwach(?:t|en|ung)\b/u' - - '/\bueberwach(?:t|en|ung)\b/u' - - '/\bmess(?:en|ung|bar|wert)\b/u' - patterns: - sku_like: '/\b\d{4,10}\b/u' - price_value_template: '/\b\d+(?:[.,]\d+)?\s*(?:{price_pattern})\b/u' - size_extraction_template: '/\b(?:{size_pattern})\s*([a-z0-9.-]+)\b/u' - size_value_template: '/\b(?:{size_pattern})\s*[a-z0-9.-]+\b/u' - size_token_value_template: '/\b(?:{size_token_pattern})\b/u' - color_value_template: '/\b(?:{color_pattern})\b/u' - model_like_product: '/\b[a-zäöüß][a-zäöüß®\-]*(?:\s+[a-zäöüß][a-zäöüß®\-]*){0,2}\s+\d{2,5}[a-z0-9\-]*\b/u' - labels: - support_or_diagnostic_signal: support_or_diagnostic - sku_signal: sku - price_signal: price - size_signal: size - size_token_signal: size_token - color_signal: color - advisory_signal_prefix: 'advisory:' - advisory_product_selection_signal: advisory_product_selection - model_like_product_signal: model_like_product - scores: - product_search_min_score: 3 - advisory_product_search_min_score: 2 - strong_signal_score: 3 - sku_signal_score: 2 - price_signal_score: 2 - size_signal_score: 2 - size_token_signal_score: 1 - color_signal_score: 1 - advisory_signal_score: 1 - advisory_product_selection_signal_score: 3 - model_like_product_signal_score: 3 - - retriex.intent.catalog.config: - min_score: 0.72 - ambiguity_delta: 0.02 - intent_search_limit: 6 - list_search_limit: 3 - min_allowed_score: 0.0 - max_allowed_score: 1.0 - - retriex.intent.light.config: - list_threshold: 4 - quantity_words: - - alle - - sämtliche - - saemtliche - - mehrere - - verschiedene - - einige - - viele - - optionen - - möglichkeiten - - moeglichkeiten - - varianten - - arten - - modelle - - funktionen - - punkte - - schritte - - kategorien - - übersicht - - uebersicht - strong_patterns: - - '/\bliste(n)?\b/u' - - '/\bauflisten\b/u' - - '/\baufz(a|ä)hl(en)?\b/u' - - '/\bnenn(e)?\b/u' - - '/\bzeig(e)?\b/u' - - '/\bwelche\s+sind\b/u' - - '/\bwelche\s+gibt\s+es\b/u' - - '/\bwas\s+sind\b/u' - - '/\bwie\s+viele\b/u' - - '/\branking\b/u' - - '/\btop\s*\d+\b/u' - - retriex.intent.sales.config: - dominance_delta: 2 - min_score_threshold: 3 - sales_signals: - - preis - - preise - - kosten - - lizenz - - lizenzmodell - - tarif - - tarife - - gebuehr - - gebühr - - monatlich - - jaehrlich - - jährlich - - abo - - subscription - comparison_signals: - - '/\bvergleich(en)?\b/u' - - '/\bvs\b/u' - - '/\bgegenueber\b/u' - - '/\balternative(n)?\b/u' - - '/\bunterschied(e)?\b/u' - - '/\bbesser\b/u' - objection_signals: - - problem - - risiko - - nachteil - - datenschutz - - dsgvo - - sicherheit - - compliance - - kritik - - zweifel - - unsicher - implementation_signals: - - implementierung - - implementieren - - integration - - integrieren - - einführung - - einfuehrung - - aufwand - - setup - - rollout - - migration - - installation - - api - - schnittstelle - roi_signals: - - roi - - rentabilitaet - - rentabilität - - business case - - einsparung - - kosten senken - - umsatz steigern - - effizienz steigern