Toter Verweis auf die in 3389f75 entfernte Auto-Notfallerkennung entfernt
(if emergency/X-Emergency-Header). /ws/chat war nicht betroffen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
8.1 KiB
8.1 KiB
Changelog
Alle nennenswerten Änderungen an Alexis. Format lose nach Keep a Changelog;
Versionierung nach SemVer (prä-1.0: 0.x).
[0.3.7] — 2026-07-01
Behoben
/api/chat(REST) warf HTTP 500 (NameError: emergency) — toter Verweis auf die in3389f75entfernte automatische Notfallerkennung. Block entfernt; der Web-UI-Weg (/ws/chat) war nicht betroffen.
[0.3.6] — 2026-07-01
Hinzugefügt
- Modell-Browser (Cloud) im Admin (System-Tab): durchsuchbare OpenRouter-Modelle
mit Tool-Badge (✅ im Eval bestätigt / 🔧 laut Anbieter), ⬆/⬇-Preisen pro Mio.
Token und geschätzter „$/Antwort" (aus live gemessenem Turn-Token-Profil).
„Verwenden" setzt
openrouter_llm_model. Lokale Modelle: spätere Phase. - Token je Turn werden nun erfasst (Turn-Token-Profil, EMA) — Basis für „$/Antwort".
qwen/qwen3.5-35b-a3bals eval-verifiziert aufgenommen (Tool-Calling-Test bestanden).
[0.3.5] — 2026-06-30
Hinzugefügt
- Kostenerfassung vervollständigt:
- Filler-Übersetzung (OpenRouter) bucht jetzt ihre Ist-Kosten (Kategorie
llm). - OpenRouter-TTS wird geschätzt erfasst (Zeichen ×
openrouter_tts_usd_per_char, Kategorietts) — der Audio-Endpunkt liefert keine inline-usage. Preis im Admin live einstellbar (Default ≈ $15/1M Zeichen, an Modellpreis anpassen).
- Filler-Übersetzung (OpenRouter) bucht jetzt ihre Ist-Kosten (Kategorie
[0.3.4] — 2026-06-30
Hinzugefügt
- Admin: Daten je Nutzer gezielt löschen — neue Knöpfe pro Nutzerkarte „Statistik zurücksetzen" (Anfragen/Web-Suchen/Kosten inkl. Budget-Zähler) und „Erinnerungen löschen". Konto und Verlauf bleiben; audit-geloggt.
- Admin: Bulk „Alle Nutzerdaten löschen (Konten behalten)" (Gefahrenzone, doppelte Bestätigung): löscht für alle Nutzer Verlauf, Statistik, Erinnerungen und Notruf-Protokolle auf einmal; die Konten selbst bleiben. Das Audit-Log (System-Logger) bleibt unberührt.
Geändert
- Nutzerliste alphabetisch (case-insensitive) statt nach Anlagedatum.
- Nutzungsstatistik-Tabelle alphabetisch sortiert; die „Anfragen je Nutzer"- Balken bleiben nach Aktivität.
[0.3.3] — 2026-06-30
Hinzugefügt
- Tarife der Kostenschätzung im Admin live einstellbar: Strompreis (€/kWh), Notruf-Kosten (€/Alarm), Cartesia ($/Zeichen).
local_llm_base_urllive-setzbar (Admin-Live-Config; wirkt pro Request ohne Deploy) — lokale LLM-Basis-URL ohne Neustart umstellbar.- 15 weitere Beruhigungssätze für die Web-Suche (Opening 12 → 27, zufällige Auswahl).
Behoben
- Stille bei „kein Treffer": Kommt keine Antwort (z. B. Web-Suche ohne Ergebnis), sagt das System jetzt eine freundliche, lokalisierte Mitteilung („Dazu konnte ich leider keine Informationen finden.") statt stumm zu bleiben.
- Immer gleicher Beruhigungssatz lag an einem alten Übersetzungs-Cache; wird beim Start mit der formalen „Sie"-Übersetzung neu gefüllt.
[0.3.2] — 2026-06-30
Hinzugefügt
- Pro-Nutzer-Kostenerfassung (USD). Zentraler
CostMeter(ContextVars, multitool-ready,app/core/costs.py); Konzept inDocs/kosten-erfassung.md.- Exakt: Alle OpenRouter-Calls (LLM, Web-Suche/Sonar, Koreferenz, Fallback)
senden
usage:{include:true}und buchen die Ist-Kosten je Kategorie (llm/web_search) — inkl. finalem Streaming-usage-Chunk. - Geschätzt: lokales LLM (Call-Dauer × Strom-Formel, marginaler GPU-Verbrauch,
llm_local), Cartesia-TTS (Zeichen × Preis,tts), Notruf (pro Webhook-Alarm,alert, nur Doku — nie Sperre). Sätze konfigurierbar (GPU-Watt/Last, Strompreis,usd_per_eur, Cartesia-Preis, Alarm-Preis). cost_usage-Tabelle (Nutzer/Tag/Kategorie); Statistik-Spalten „Kosten (Monat)"- „Ø/Anfrage", Tooltip „davon geschätzt" und Summenzeile „exakt vs. geschätzt".
- Exakt: Alle OpenRouter-Calls (LLM, Web-Suche/Sonar, Koreferenz, Fallback)
senden
- $-Tagesbudget pro Nutzer (
cost_daily_limit_usd, Pref > global, 0 = unbegrenzt): ist das Web-Such- oder Kostenbudget aufgebraucht, wird die Web-Suche für den Turn ausgesetzt (+ freundlicher Hinweis). Admin-Eingabe + globales Live-Setting. - Nutzungsstatistik: Spalte „mit Websuche" je Nutzer (
total_web_searches).
[0.3.1] — 2026-06-30
Hinzugefügt
- Admin: „Verlauf löschen" pro Nutzer — löscht Sessions + Nachrichten eines
Nutzers, ohne Konto/Erinnerungen/Nutzungsdaten (Button +
DELETE /api/admin/users/{id}/history, audit-geloggt). - Web-Suche pro Nutzer ein-/ausschaltbar (Admin-Checkbox).
web_search_enabledfehlte imAdminUserPrefsUpdate-Schema und wurde still verworfen — jetzt wirksam. - Web-Such-Budget pro Nutzer/Tag (
web_search_daily_limit, 0 = unbegrenzt; Pref > global): Tageszähler (web_search_usage); ist das Kontingent aufgebraucht, wird die Web-Suche für den Turn ausgesetzt. Admin-Eingabefeld. - Freundliche Hinweise: Ist die Web-Suche bei einer klar tagesaktuellen Frage nicht verfügbar (abgeschaltet oder Kontingent aufgebraucht), erscheint eine kleine, lokalisierte System-Notiz in der Unterhaltung.
Behoben
- Veraltete Dev-Datenbank (
data/voice-assistant.db) entfernt; Produktiv-DB liegt unter/var/lib/voice-assistant/(Doku-Klarstellung der Prod/Dev-Trennung).
[0.3.0] — 2026-06-30
Hinzugefügt
- Web-Suche per Tool-Calling („Weg 2"): Das zentrale Modell entscheidet selbst,
ob eine Frage tagesaktuelle Fakten braucht, holt sie über
perplexity/sonarund formuliert die Antwort in Persona (Vorrang fürs frische Faktum). Standard an, pro Nutzer/Profil abschaltbar (web_search_enabled). Quellen-Links unter der Antwort. Ausführliche Referenz:Docs/weg2-tool-calling.md. - Deterministischer Such-Backstop für heikle Kategorien (aktuelle Amtsträger, Wohnort lebender Personen, „lebt X noch", Öffnungszeiten/Fahrpläne): diese suchen immer — auch auf einem tool-unfähigen Modell (Fakten als System-Kontext).
- Beruhigungssätze während der Recherche: zufällige, in die Zielsprache
übersetzte „Sie"-Sätze (sofort gesprochen — Server- und Geräte-TTS, sowie in der
Status-Zeile); bei langer Recherche Geduldssätze (Abstand ≥ 10 s). Eine Pflege-
Stelle (
app/pipeline/fillers.py, Englisch). - Zentrale Datum-/Uhrzeit-Auskunft (
app/core/clock.py): in alle LLM-System- Prompts injiziert → relative Zeitangaben („heute", „morgen", „nächsten Montag", „in 3 Stunden") werden aufgelöst. - Koreferenz-Vorstufe (Pronomen-Folgefragen) + Metriken
tool_calls_total,sonar_calls_total,search_forced_total,tool_unsupported_total.
Geändert
- Standard-LLM:
mistralai/mistral-small-3.2-24b-instruct(tool-fähig; im Tool-Calling-Eval einziger Recall-Gate-Passer). Die frühere Baselinemistralai/mistral-small-24b-instruct-2501kann kein Tool-Calling — nicht mehr dorthin zurückstellen, solange die Web-Suche aktiv ist.
[0.2.0] — 2026-06-27
Geändert
- Marke: Produkt heißt jetzt Alexis (Anzeigename); technische Identifier (Dienst, Pfade, Paketname, Konfig-/DB-Dateinamen) bleiben unverändert.
- Version wird im UI (Kopfzeile) und unter
/api/config(version) angezeigt; eine Quelle der Wahrheit istpyproject.toml.
Hinzugefügt
- Aufgeräumtes Vorlese-Menü: nicht nutzbare TTS-Provider werden ausgeblendet
(statt ausgegraut). Backend liefert die fertige Sichtbarkeit (
tts_menu), „Im Gerät" nur auf Mobilgeräten./api/configwird serverseitig gecacht (spart die zuvor pro Seitenladen ausgelöste, kostenpflichtige OpenRouter-Probe). - GPU-Erkennung: Setting
GPUS(auto|none|"0,1,2"), anCUDA_VISIBLE_DEVICESgekoppelt; zentrale Erkennung inapp/capabilities.py.
Behoben
- Stimm-Geschlechtswahl wirkt wieder:
voice_genderfehlte imUserPrefs-Schema und wurde still verworfen → es kam immer die weibliche Stimme. Feld ergänzt (+ Regressions-Test). - Geräte-TTS folgt der Geschlechtswahl (Heuristik über Stimmname/voiceURI), sonst Server-Fallback.
[0.1.0]
- Erste interne Version: modulares Gateway (STT/LLM/TTS austauschbar), Profile, Provider-Registries, Notruf-Eskalation, Auto-Erinnerungen, Admin-Panel, Auth/SSO + Passwort-Login.