fix(routing): yearly costs to local RAG, not Sonar

- Remove standalone "kosten" from WEB_TRIGGERS (matched "jährlichen kosten" and sent Perplexity without tools).
- Add LOCAL_OVERRIDES for jahreskosten/jaehrlich/beitragsrechnung phrases.
- Extend forced-RAG keywords and enrich ES query with Beitrag/Beitragsrechnung for cost questions.
- System hint: extract amounts and periods per hit when possible.
This commit is contained in:
Homelab Cursor 2026-03-26 17:01:43 +01:00
parent ec83e3e433
commit d771a330c7

View file

@ -56,10 +56,12 @@ _LOCAL_OVERRIDES = [
"familienbuch", "urkunde", "bescheid", "police", "beitrag",
"meine unterlagen", "meine dokumente", "meine dateien",
"habe ich", "welche habe", "was habe ich",
"jahreskosten", "jährlichen", "jährliche", "jaehrlichen", "jaehrliche",
"monatliche kosten", "versicherungskosten", "beitragsrechnung",
]
_WEB_TRIGGERS = [
"recherche", "recherchiere", "suche im internet", "web search",
"preis", "preise", "kostet", "kosten", "price",
"preis", "preise", "kostet", "price",
"news", "nachrichten", "aktuell", "aktuelle",
"google", "finde heraus", "finde raus",
"gold", "silber", "kurs", "kurse",
@ -420,6 +422,8 @@ def ask_with_tools(question: str, tool_handlers: dict, session_id: str = None) -
"kindergeld", "rechnung", "haftpflicht", "rechtsschutz",
"lebensversicherung", "bauspar", "reisepass", "personalausweis",
"lvm", "allianz", "ergo", "huk", "nuernberger",
"jahreskosten", "jährlichen", "jährliche", "jaehrlichen", "jaehrliche",
"monatliche kosten", "versicherungskosten", "beitragsrechnung",
]
_q_low = question.lower()
if route == MODEL_LOCAL and any(k in _q_low for k in _DOC_KW):
@ -427,7 +431,22 @@ def ask_with_tools(question: str, tool_handlers: dict, session_id: str = None) -
if _rag_fn:
try:
log.info("RAG-Pflicht: forciere rag_search fuer: %s", question[:80])
_rag_res = _rag_fn(query=question, top_k=10)
_rag_q = question
if any(
x in _q_low
for x in (
"kosten",
"jähr",
"jaehr",
"jahreskosten",
"monatliche kosten",
)
):
_rag_q = (
question
+ " Versicherung Beitrag Beitragsrechnung Jahresbetrag"
)
_rag_res = _rag_fn(query=_rag_q, top_k=10)
if _rag_res and not _rag_res.startswith("Keine"):
log.info("RAG-Pflicht: %d Zeichen — loesche Session-History", len(str(_rag_res)))
messages = [
@ -439,11 +458,12 @@ def ask_with_tools(question: str, tool_handlers: dict, session_id: str = None) -
+ "liste jede erkannte Sparte bzw. jeden Dokumenttyp separat "
+ "(z.B. Kfz/Auto, Rechtsschutz, Haftpflicht, Sach, Ausland, Kranken) "
+ "mit kurzem Beleg (Dateiname oder Ordner aus den Treffern). "
+ "Nicht nur den ersten Treffer nennen."},
+ "Nicht nur den ersten Treffer nennen. "
+ "Bei Kosten/Beitraegen: je Treffer Betrag und Zeitraum nennen wenn im Snippet erkennbar; sonst kurz nicht eindeutig."},
{"role": "assistant", "content": None,
"tool_calls": [{"id": "forced_rag", "type": "function",
"function": {"name": "rag_search",
"arguments": json.dumps({"query": question, "top_k": 10})}}]},
"arguments": json.dumps({"query": _rag_q, "top_k": 10})}}]},
{"role": "tool", "tool_call_id": "forced_rag",
"content": str(_rag_res)[:12000]},
{"role": "user", "content": question},