my_voice_assistant_v3_jamulix/CHANGELOG.md
dschlueter f83c04f3d6 docs: CHANGELOG 0.3.3 + Version 0.3.3
Einstellbare Tarife, local_llm_base_url live-setzbar, 15 weitere Filler,
Mitteilung bei "kein Treffer". Version 0.3.2 -> 0.3.3.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 14:15:30 +02:00

114 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Changelog
Alle nennenswerten Änderungen an **Alexis**. Format lose nach [Keep a Changelog](https://keepachangelog.com/de/);
Versionierung nach [SemVer](https://semver.org/lang/de/) (prä-1.0: `0.x`).
## [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_url` live-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 in `Docs/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"**.
- **$-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_enabled`
fehlte im `AdminUserPrefsUpdate`-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/sonar` und
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 Baseline
`mistralai/mistral-small-24b-instruct-2501` kann **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 ist `pyproject.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/config` wird serverseitig gecacht
(spart die zuvor pro Seitenladen ausgelöste, kostenpflichtige OpenRouter-Probe).
- **GPU-Erkennung:** Setting `GPUS` (`auto|none|"0,1,2"`), an `CUDA_VISIBLE_DEVICES`
gekoppelt; zentrale Erkennung in `app/capabilities.py`.
### Behoben
- **Stimm-Geschlechtswahl wirkt wieder:** `voice_gender` fehlte im `UserPrefs`-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.