patrick

patrick wypycha do master w patrick/Trixy7

  • 0c349ec98b Fix: Follow-Up Audio-Streaming + RecordingComplete Der FOLLOW_UP State im WakewordService pufferte Audio nur lokal, streamte es aber NICHT an den Server. Der Server empfing nie Audio-Daten und konnte keinen STT/NLP durchfuehren. Fixes: 1. FOLLOW_UP State: Audio an Server streamen (wie RECORDING) 2. _finish_follow_up: RecordingComplete Command senden 3. Audio-Unduck vor TTS-Antwort Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
  • e582d8c7fc Fix: Follow-Up wartet auf TTS-Abspielen bevor Aufnahme startet Der Client startete die Follow-Up Aufnahme sofort nach Empfang des FollowUpRequest — waehrend die TTS-Ausgabe noch lief. Das Mikrofon nahm die eigene TTS-Ausgabe auf → "Keine Sprache". Jetzt sendet der Server die TTS-Audio-Dauer (audio_duration) im FollowUpRequest mit. Der Client wartet diese Zeit + 0.5s Buffer ab bevor er die Aufnahme startet. - FollowUpRequest: neues Feld audio_duration (float, Sekunden) - IntentDispatcher: duration_seconds aus tts_completed durchreichen - Client: asyncio.sleep(audio_duration + 0.5) vor Follow-Up Start Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
  • bda25fde15 Fix: WakewordService direkt via self._wakeword_service ansprechen WakewordService ist nicht im ServiceContainer registriert — services.get_service("WakewordService") gab None zurueck. Jetzt wird self._wakeword_service direkt verwendet. Debug-Logging in _handle_follow_up hinzugefuegt. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
  • a32ca666fb Fix: Audio-Ducking Unduck vor TTS + Follow-Up Client-Handler 1. Audio-Unduck sofort nach Recording-Ende (vor TTS-Abspielen): Vorher wurde die Lautstaerke erst bei ConversationEnd/Timeout wiederhergestellt — TTS war kaum hoerbar. Jetzt wird Unduck direkt nach RecordingComplete aufgerufen. 2. Follow-Up Client-Handler: _handle_follow_up_request ruft jetzt WakewordService._handle_follow_up() auf → Satellite wechselt in FOLLOW_UP State und nimmt Audio auf. Wartet auf TTS-Abspielen bevor Aufnahme startet (verhindert Aufnahme der eigenen TTS-Ausgabe). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
  • 790fd755a0 Fix: FollowUpRequest Command an Satellite senden Der IntentDispatcher emittierte nur ein internes followup_expected Event, sendete aber keinen FollowUpRequest Command an den Satellite. Der Client wartete auf FollowUpRequest um in den Hoer-Modus zu wechseln — ohne diesen Command blieb er stumm. Jetzt wird nach followup_expected auch ein FollowUpRequest via Command-Socket an den Satellite gesendet. Der Client wechselt in FOLLOW_UP State und nimmt Audio auf ohne neues Wakeword. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
  • Zobacz porównanie tych 20 commitów »

2 dni temu

patrick wypycha do master w patrick/Trixy7

  • 45e6a439c3 Neue Plugins, ConfigTool-Erweiterungen und Windows-Fixes Neue Plugins: - Homematic: XML-API Wrapper, DeviceManager mit Geraetetyp-Klassifizierung (400+ Typen, HM/HmIP/HMW/HmIPW), Sprachsteuerung (Licht, LED, Heizung, Fenster, Bewegung, Programme, Sysvars), Monitor-Task mit Batterie-/ Connection-Warnungen, interaktive Raum-Zuordnung mit Satellite-Mapping - math_calc: Natuerlichsprachiger Mathe-Parser (Grundrechenarten, Wurzeln, Prozent, Quersumme, Trigonometrie, Variablen, Zahlwoerter, Klammern) - wikipedia: Multilinguale Wissensabfragen mit Sprachdateien (de/en/fr), intelligente Datumsextraktion, Disambiguation-Handling, TTS-Optimierung, Intent-Konflikt-Loesung mit math_calc via is_math_expression() Entity-System: - Multi-Datei Struktur: entities/{lang}/*.yml und *.json - Plugin-Entities aus plugins/*/entities/{lang}/* - EntityRegistry.add_values() fuer Laufzeit-Registrierung - Alte entities_de.yml in datum/zeit/dauer/stadt/person aufgeteilt ConfigTool-Erweiterungen: - PluginCustomView unterstuetzt schema-basierte Formulare, interaktive Listen mit Detail-Panel, DataTable, Action-Buttons - ConfigPluginActionRequest um params erweitert, Response um result_data - Unbekannte Plugin-Actions werden an plugin.handle_config_action() delegiert - plugin_settings_saved Event nach Config-Aenderungen - Config-Daten werden an Custom-Views propagiert Piper TTS: - Automatisches Resampling auf 22050 Hz (fuer 16 kHz Modelle wie Kerstin) - Neue deutsche Stimmen: Ramona, Karlsson, Pavoque, MLS, Thorsten_Emotional - Auto-Discovery lokaler Modelle via .onnx.json Metadaten - Kerstin Samplerate korrigiert (16000 statt 22050) Windows-Fixes: - application.py + shutdown.py: signal.signal() Fallback fuer Windows (loop.add_signal_handler ist Unix-only) Sonstiges: - NLP-Plugins (nlp_llm, nlp_classifier) auf neues Entity-Layout umgestellt Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

6 dni temu

patrick wypycha do master w patrick/Trixy7

  • 7969a1e9ff Music: Mehrere Tracks in Queue bei Kuenstler-Suche "Spiele Musik von Rammstein" sucht jetzt bis zu 5 YouTube-Tracks und fuegt alle in die Warteschlange: - Erster Track wird sofort abgespielt - Restliche werden im Hintergrund heruntergeladen und zur Queue hinzugefuegt - Antwort: "Spiele 'Track' von Rammstein. 4 weitere in der Warteschlange." Aenderungen: - YouTube-Suche: limit 3 → 5 (lokal: 5 → 10) - _queue_remaining_tracks(): Hintergrund-Task fuer Downloads - Player.add_to_queue() statt nur play_track() Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • d8f28bc7a4 BIO Slot-Tagger: Alle Slot-Typen + erweiterte SlotRegistry Erweiterte SlotRegistry um fehlende Slot-Typen: query (30 Werte: Kuenstler, Songs, Suchbegriffe) content (18 Werte: Notiz/Erinnerung-Inhalte) name (14 Werte: Timer-Namen) person (17 Werte: Deutsche Vornamen) topping (17 Werte: Pizza-Belaege) size (12 Werte: Groessen) pizza_type (8 Werte) preset_name, alias, level, value BIO-Tags: 34 (vorher 12) — alle Slot-Typen trainiert GPU→CPU Fix: auto_model.cpu() fuer Device-Mismatch Ergebnis: "musik von rammstein spielen" → query: "rammstein" ✅ "wetter morgen in berlin" → date: "morgen", city: "berlin" ✅ "timer fuenf minuten" → duration: "fuenf minuten" ✅ "merke dir milch kaufen" → content: "milch kaufen" ✅ Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • d55a6f5322 Joint Intent + BIO Slot-Tagger (Token-Level) Training: - BIO-Tagger als separate Phase nach Intent-Training - Token-Level Embeddings via SentenceTransformer auto_model - Slot-Samples + Negative fuer balanciertes BIO-Training - Joint Training: Intent-Kopf + BIO-Kopf - ONNX Export: slot_tagger.onnx (6KB) - bio_labels.json mit Tag-Index-Mapping Runtime: - BIO-Tagger automatisch geladen wenn vorhanden - Token-Embeddings (vor Mean-Pool) fuer BIO-Decoding genutzt - Slot-Extraktion: BIO-Tagger → Fallback regelbasiert - decode_bio_tags(): Subword-Zusammenfuehrung + Multi-Value Getestet: "wetter morgen in berlin" → {city: "berlin"} ✅ Noch offen: query, content, name Slots brauchen mehr Training-Coverage Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • bc2b892a2a BIO-Tagger fuer Token-Level Slot-Extraktion Neues Modul: trixy_core/trainer/core/intent/bio_tagger.py - BIOTagSet: Tag-Index-Mapping (O, PAD, B-{slot}, I-{slot}) - generate_word_bio_tags(): Wort-Level BIO aus Text + Slots - align_bio_to_tokens(): Subword-Alignment mit HuggingFace Tokenizer - decode_bio_tags(): BIO-Indizes → Slot-Dict (mit Multi-Value) Getestet mit: - Multi-Slot: "morgen in Berlin" → {date: "morgen", city: "Berlin"} - Multi-Value: "Salami und Pilzen" → {topping: ["Salami", "Pilzen"]} - Multi-Word: "fuenf minuten" → {duration: "fuenf minuten"} - Subword-Alignment: Korrekte Zuordnung bei Tokenizer-Split TrainingSample: bio_tags Feld zurueck (list[str]) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • a1a4a71738 Classifier: Query-Heuristik als Fallback bei fehlenden Slots Problem: ONNX-Classifier erkennt Intent aber KeywordMatcher findet keine Slots bei hoeflichen Formulierungen ("koenntest du bitte musik von rammstein spielen" → slots={}). Fix: Strategie 3 — Stoppwort-Heuristik als letzter Fallback. Entfernt Hoeflichkeits-, Funktions- und Intent-spezifische Woerter, Rest wird als Query-Slot verwendet. "koenntest du bitte musik von rammstein spielen" → query="rammstein" "ich moechte musik von mozart hoeren" → query="mozart" Gilt fuer: play_music, search_notes, search_appointment Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • aba82fc1d6 Music: Patterns fuer hoefliche Formulierungen mit Verb am Ende Problem: "koenntest du bitte musik von rammstein spielen" wurde nicht gematcht weil Patterns das Verb am Anfang erwarten. Neue Patterns: - "musik [von] {query} [spielen]" — Verb am Ende - "[koenntest|kannst] [du] [bitte] {query} spielen" — Hoeflich - "mach [mal] musik [von] {query} an" — Umgangssprachlich Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • ffe963499f Follow-Up: Timeout (60s) + Intent-Vorrang bei hoher Confidence Probleme behoben: - Follow-Up-Kontext blieb unbegrenzt aktiv (kein Timeout) "Musik spielen" wurde als Reminder-Antwort interpretiert - Kein Check ob ein neuer Intent erkannt wurde Fixes: - Follow-Up-Timeout: 60 Sekunden, danach wird Kontext geloescht - Intent-Vorrang: Wenn Classifier Intent mit conf >= 0.8 erkennt der NICHT zum Follow-Up gehoert, wird Follow-Up uebersprungen - Zeitstempel (created_at) im Follow-Up-Kontext Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • bb8b9cc468 Classifier: Slot-Extraktion gezielt fuer erkannten Intent Problem: KeywordMatcher.match() matcht gegen ALLE Intents und gibt den falschen Slot zurueck (z.B. status='ein' statt query='rammstein'). Fix: _extract_slots_for_intent() matcht die Patterns des erkannten Intents gezielt gegen den Text. "musik von rammstein spielen" wird jetzt korrekt als query="musik von rammstein" extrahiert. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • 64cd5d0b56 Classifier: Slot-Extraktion via KeywordMatcher nach ONNX-Erkennung Problem: ONNX-Classifier erkennt Intent (play_music) aber extrahiert keine Slots (query fehlt → Musik ohne Suchbegriff abgespielt). Fix: Nach ONNX-Intent-Erkennung den KeywordMatcher fuer Slot-Extraktion nutzen. Der Classifier erkennt den Intent, der KeywordMatcher die Slots. "koenntest du bitte musik von rammstein spielen" → Classifier: play_music (0.96) → KeywordMatcher Slots: {query: "musik von rammstein"} Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • 1032dcbb2b Stop-Intent erweitert: Schnauze, Klappe, Musik aus, etc. Neue Patterns: schnauze, klappe, musik aus, stopp die musik, mach die musik aus, aus Neue Beispiele: Halt die Klappe, Sei leise, Still, Ruhe jetzt Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • 95ac15f8cc Fuellwort-Injection grammatisch korrigiert Probleme behoben: - Kein polite Prefix auf Fragesaetze ("koenntest du wie wird das wetter") - Imperativ → Infinitiv bei polite: "Loesche Cache" → "koenntest du den Cache loeschen" - Kein doppeltes "mir" ("kannst du mir" + "mir ein Lied") - Keine Platzhalter-Samples ([query], [content]) - Emotional/Polite nur bei Imperativ-Saetzen, nicht bei Fragen - Nur example/pattern Samples als Basis (keine Filler auf Filler) - Imperativ-zu-Infinitiv Woerterbuch (35 Verben) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • 8aa28ab0da Trainings-Assets umorganisiert + Datenexport + konfigurierbare Varianten Dateien umorganisiert: - trainer/assets/intent/fillers_de.json (vorher config/) - trainer/assets/intent/slot_lists.json (vorher config/) - trainer/assets/intent/tone_keywords.json (vorher config/) - Fallback auf config/ fuer Abwaertskompatibilitaet Trainings-Daten Export: - export_to_files() schreibt nach trainer/data/intent/processed/ - Pro Intent eine .txt Datei (lesbar, mit Quelle und Slots) - _all_samples.csv (alle Samples, semikolon-getrennt) - _summary.txt (Uebersicht: Samples pro Intent nach Quelle) - Dateien werden bei Trainingsstart neu geschrieben, bleiben nach Training Konfigurierbare Fuellwort-Varianten: - filler_variants Setting (0-10, default 3) in Trainer-Settings und TUI - 0 = Fuellwort-Injection deaktiviert Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • 7262ed9628 Intent-Beispiele erweitert: 254 → 892 Beispiele, 0 Intents unter 5 Alle 13 YAML-Dateien auf mindestens 8 Beispiele pro Intent erweitert. 2 neue YAML-Dateien erstellt (Notes, Reminders — hatten nur Decorator-Intents). Aenderungen: - System-Intents (20): hoefliche, umgangssprachliche und formelle Varianten - DateTime/Timer/Music/Weather (14): verschiedene Satzbauweisen - Email/Calendar/Fritzbox (14): natuerliche Sprachvarianten - Voice Morph/Admin (28): erweiterte Formulierungen - Notes/Reminders (17): YAML erstellt mit je 8-10 Beispielen - Pizza-Order (4): erweiterte Bestellvarianten Trainingsergebnis mit erweiterten Daten: - 103 Intents (vorher 82), 20.563 Samples (vorher 10.773) - Val-Acc: 0.871, CV Mean: 0.868 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • 36433645ac Fuellwort-Injection fuer Intent-Training (multilingual via JSON) - config/fillers_de.json: Deutsche Fuellwoerter in 5 Kategorien (hesitation, casual, polite, emotional, insertions) - DataGenerator.load_fillers(): Laedt Fuellwoerter aus externer Datei - _inject_fillers(): Erzeugt ~3 Varianten pro Sample mit Fuellwoertern "Spiel Musik" → "koenntest du bitte musik spielen" "Timer 5 Minuten" → "aehm timer 5 minuten bitte" "Wie spaet ist es" → "sag mal wie spaet ist es" - Multilingual: Pro Sprache eine fillers_{lang}.json Datei Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • 0ebac77fe3 ONNX Encoder-Export via optimum (Int8 quantisiert, 113MB) - Encoder-Export: optimum ORTModelForFeatureExtraction + Int8 Quantisierung 448MB float32 → 113MB int8 (4x kleiner) - Runtime: ONNX-Encoder bevorzugt, SentenceTransformer als Fallback Kein PyTorch auf dem Pi noetig wenn ONNX-Encoder vorhanden - Inferenz: 1.8-5.2ms mit ONNX-Encoder (vorher 4-8ms mit SentenceTransformer) - _tag_names Referenz entfernt (BIO-Tags wurden in vorherigem Commit entfernt) Deployment-Bundle models/intent/: encoder_onnx/model_quantized.onnx (113MB) — Encoder intent_classifier.onnx (~5KB) — Classifier-Kopf tokenizer/ — HuggingFace Tokenizer metafile.json + intent_labels.json Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • 5bc67d9d50 Intent-Classifier Deps im Installer + requirements.txt aufgeteilt - nlp_classifier Plugin-Deps: sentence-transformers, onnxruntime, transformers - requirements.txt: Training-Deps und Inferenz-Deps kommentiert getrennt - install_linux.sh und install_windows.bat werden automatisch mit archiviert Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

  • bf8bcd185e Plugins: NLP-Classifier, Pizza-Order, Audio-Ducking + Fixes Neue Plugins: - nlp_classifier: 3-stufige Intent-Pipeline (Keyword → ONNX → LLM-Fallback) EventPriority.HIGHEST, cancelt Event bei ausreichender Confidence - pizza_order: Beispiel fuer Follow-Up Dialoge mit Multi-Slot-Extraktion Individuelle Belaege, Groessen, mehrere Pizzen pro Bestellung - audio_ducking: Musik leiser bei Sprachinteraktion (Server-seitig) Plugin-Fixes: - fritzbox: satellites.items() → satellites.get_connected() - music: YouTube Music Suche (search_mode: music/music_fallback/youtube) - nlp_llm: context_window 8192, Prompt-Trimming bei Token-Overflow - timer: stop_timer Pattern erfordert jetzt "timer" im Satz Installer: - plugins.json: nlp_classifier als empfohlenes Plugin Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
  • 81e476c0fc Intent-Classifier Trainer + Tone-Analyse + Audio-Ducking Intent-Classifier: - IntentTrainer mit SentenceTransformer + Linear Classifier (89% Val-Acc) - DataGenerator: YAML-Intents laden, Pattern-Expansion, Augmentation - SlotRegistry: 554 Slot-Werte (312 Staedte, 107 Laender, Raeume, etc.) - EmbeddingCache: Re-Training auf Pi nur fuer neue Intents - ONNX-Export fuer Pi-Deployment (<10ms Inferenz) - Cross-Validation (5-Fold), Per-Intent Metriken - TrainerRegistry: Subdirectory-Scan fuer core/intent/trainer.py Tone-Analyse: - 31 Tone-Tags in 6 Kategorien (friendliness, negativity, emotion, etc.) - Keywords in config/tone_keywords.json (multilingual, 169 deutsche Keywords) - tone_detected Event pro erkanntem Tag - Integriert in IntentPrediction (tones + category) Follow-Up-System: - IntentResult.follow_up() mit valid_responses und retry_text - Dispatcher validiert Antworten im Follow-Up-Kontext Audio-Ducking (Client-seitig): - ALSA-Lautstaerke sofort bei Wakeword auf 10% (amixer, <50ms) - Wiederherstellung bei resume() (Wakeword-Detection wieder aktiv) - Synchron im Audio-Thread (kein Event-Delay) Weitere Aenderungen: - requirements.txt: sentence-transformers, onnxruntime, PyYAML - TUI Settings-View: key/name und type/field_type Fallback - run_linux.sh: venv-Aktivierung, robuste Python-Suche Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
  • Zobacz porównanie tych 2 commitów »

1 tydzień temu

patrick wypycha do master w patrick/Trixy7

1 tydzień temu