perf(llm): reduce vendor-extract excerpt 50k → 20k chars

VW-Loop-Iteration 1: LLM cascade lieferte 14 vendors (Lucky-Hit via
Direct-Fallback). VW-Loop-Iteration 2: 0 vendors — qwen2.5:14b
ReadTimeout auch im 420s-Direct-Fallback (50k input + 16k output
output dauert > 7min auf M4 Pro).

Fix: max_text_chars 50000 → 20000. Erfasst die ersten ~3000 Worte der
Cookie-Tabelle (Tabellen-Kopf komplett). Vollstaendige Tabelle wird
ohnehin deterministisch von parse_flat_cookie_text geparsed. LLM ist
nur fuer Vendor-Namen die NICHT in der Tabelle stehen (z.B. aus
Prosa) und Inferenz-faehiger.

Erwartung: 60-120s LLM-call statt Timeout, reproduzierbar 10-15 LLM-
Vendors → Vendor-Normalizer-Total bleibt stabil bei 20+ statt 17.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-05-22 21:55:23 +02:00
parent 10c73a1a33
commit 6dad42a8c0
@@ -49,14 +49,17 @@ _SYSTEM_PROMPT = (
async def extract_vendors_via_llm(
cookie_text: str,
max_text_chars: int = 50000,
max_text_chars: int = 20000,
) -> list[dict]:
"""Run the Qwen → OVH cascade. Returns vendor records (possibly empty).
max_text_chars: VW-Cookie-Richtlinie hat ~60k chars mit ~100 Cookies in
der Tabelle. Bei 12k waren wir auf die ersten ~5 Cookies begrenzt und
haben nur 1 Vendor extrahiert. 50k deckt VW/BMW/Mercedes komplett ab
und passt in Qwen3-30b-a3b (128k Context) sowie OVH 120B.
max_text_chars: P-fix 2026-05-22 — auf 20000 reduziert. Vorher 50000
hat qwen2.5:14b ReadTimeout (auch bei 420s — Output 16000 tokens fuer
50k input dauert > 7min). 20000 chars erfassen die ersten ~3000 Worte
der Cookie-Tabelle (bei VW deckt das den Tabellen-Kopf komplett ab).
Vollstaendige Tabelle wird vom deterministischen parse_flat erfasst,
LLM ist nur fuer Vendor-Namen die NICHT in der Tabelle stehen (z.B.
aus Prosa-Text). Schneller + zuverlaessiger.
"""
if not cookie_text or len(cookie_text) < 500:
logger.info(