my_voice_assistant_v3_jamulix/app
dschlueter 48a79da12f feat(llm): Härtung gegen tool-unfähiges Modell (no-tool-endpoints-404)
Waehlt jemand (Admin/Preset) ein Modell ohne Tool-faehigen Endpoint, lieferte
OpenRouter ein 404 "No endpoints found that support tool use" -> bisher 4x Retry
mit Backoff und danach stille, konfident-veraltete Fallback-Antwort.

- ToolCallingLLM erkennt das strukturelle 404 (_looks_tool_unsupported), merkt
  es fuer den Turn (_tools_unsupported), deaktiviert Tools und antwortet SOFORT
  plain (kein Haenger). Log-Warnung + Metrik tool_unsupported_total.
- Backstop-Inject jetzt als SYSTEM-Kontext statt synthetischem tool_call: das
  funktioniert mit tool-faehigen UND tool-unfaehigen Modellen (letztere lehnen
  tool-Messages mit 405 ab). Folge: heikle Kategorien bleiben auch auf einem
  tool-unfaehigen Modell korrekt; nur nicht-heikle Volatil-Fragen fallen plain.

Live verifiziert gegen mistral-2501 (tool-unfaehig): 3.7s statt Haenger,
Backstop liefert weiter "Merz"; gegen mistral-3.2 kein Regress (1 Suche).
Tests: 312 gruen. Doc §5.7/§5.8/§8.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 00:21:38 +02:00
..
api feat(citations): Web-Such-Quellen unter der Antwort-Bubble anzeigen 2026-06-30 00:11:24 +02:00
audio feat: Barge-in/Turn-Manager und VAD-Aeusserungserkennung (#4 Ausbau) 2026-06-17 05:06:58 +02:00
core feat(citations): Web-Such-Quellen unter der Antwort-Bubble anzeigen 2026-06-30 00:11:24 +02:00
pipeline feat(search): deterministischer Backstop für heikle Kategorien 2026-06-29 22:58:03 +02:00
providers feat(llm): Härtung gegen tool-unfähiges Modell (no-tool-endpoints-404) 2026-06-30 00:21:38 +02:00
safety feat(i18n): Niederländisch (nl) als Sprache aufnehmen 2026-06-28 15:13:29 +02:00
tools feat(llm): Koreferenz-Vorstufe + Tool-/Sonar-Metriken (Weg 2, Schritt 5) 2026-06-29 21:43:24 +02:00
utils Initial commit: Voice Assistant Gateway mit Konfig-/Routing-Fundament 2026-06-17 01:48:56 +02:00
web feat(citations): Web-Such-Quellen unter der Antwort-Bubble anzeigen 2026-06-30 00:11:24 +02:00
__init__.py release(v0.2.0): Marke „Alexis" + sichtbare Versionsnummer 2026-06-27 07:02:02 +02:00
admin_llm.py feat(menu): nicht nutzbare TTS-Provider ausblenden + GPU-Erkennung 2026-06-27 04:16:21 +02:00
audit.py feat(admin): Audit-Logging schreibender Admin-Aktionen — Plan-Schritt 5 2026-06-20 18:50:55 +02:00
auth.py feat(2-Schritt2): Login-Link + persistentes is_admin-Flag pro Nutzer 2026-06-25 04:33:33 +02:00
capabilities.py feat(menu): nicht nutzbare TTS-Provider ausblenden + GPU-Erkennung 2026-06-27 04:16:21 +02:00
config.py feat(llm): Web-Suche per Tool-Calling (Weg 2) — Sonar + ToolCallingLLM 2026-06-29 21:37:08 +02:00
dependencies.py feat(fillers): zufällige, übersetzte Senioren-Beruhigungssätze + Geduld-Schleife 2026-06-29 22:34:15 +02:00
errors.py Initial commit: Voice Assistant Gateway mit Konfig-/Routing-Fundament 2026-06-17 01:48:56 +02:00
main.py release(v0.2.0): Marke „Alexis" + sichtbare Versionsnummer 2026-06-27 07:02:02 +02:00
metrics.py feat: Resilienz (Fallback-Ketten) und Metriken (#5) 2026-06-17 05:19:07 +02:00
model_presets.py feat(admin): Dropdown „Zentrales KI-Modell" — erprobte Presets ruck-zuck umstellen 2026-06-26 20:02:44 +02:00
quota.py feat(admin): Phase 3 — Laufzeit-Konfiguration ohne Server-Neustart 2026-06-19 01:39:36 +02:00
runtime_config.py feat(llm): Web-Suche per Tool-Calling (Weg 2) — Sonar + ToolCallingLLM 2026-06-29 21:37:08 +02:00
schemas.py feat(citations): Web-Such-Quellen unter der Antwort-Bubble anzeigen 2026-06-30 00:11:24 +02:00
store.py feat(notruf): Wiederauslöse-Sperre + grüner Hinweis; "Neues Gespräch" in die Kopfzeile 2026-06-26 15:58:17 +02:00