feat(speaker-id): Phase 3 — Speaker-Gating im Streaming-STT
Sobald eine Streaming-Session ~1.5s Audio im Buffer hat, wird einmal pro Session der Speaker-ID-Check ausgefuehrt (im Executor, ~50-100ms auf GPU). Bei Match → Session laeuft normal weiter. Bei Mismatch → synthetisches stt_endpoint mit text='' reason='speaker_mismatch' + stt_stream_done → App ruft endConversation. Kein Whisper-Transcribe fuer fremde Stimmen → Token + Latenz gespart. - StreamSession: 3 neue Felder (speaker_checked, speaker_match, speaker_similarity). - SessionManager._check_speaker / _finalize_speaker_mismatch: Check + sauberes Beenden bei Mismatch. - _tick_session: Check-Gate vor STREAM_MIN_AUDIO_MS-Check eingehaengt. - speaker_id.verify: threshold=None statt =DEFAULT_THRESHOLD damit config-Broadcast-Updates zur Laufzeit greifen (Default-Arg wird sonst zur Def-Zeit gebunden). Fail-open: ohne Fingerprint returnt verify() (True, 0.0) — keine Auswirkung. Stefan kann ohne Enrollment weiter wie bisher arbeiten. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -157,12 +157,18 @@ def delete_fingerprint() -> bool:
|
||||
return False
|
||||
|
||||
|
||||
def verify(audio_bytes: bytes, threshold: float = DEFAULT_THRESHOLD) -> tuple[bool, float]:
|
||||
def verify(audio_bytes: bytes, threshold: Optional[float] = None) -> tuple[bool, float]:
|
||||
"""Returns (is_match, similarity).
|
||||
|
||||
Wenn threshold=None: nutzt den Modul-Default (DEFAULT_THRESHOLD) — der wird
|
||||
vom config-Broadcast zur Laufzeit auf den Diagnostic-Slider-Wert gesetzt.
|
||||
Default-Arg-Bindung waere zur Def-Zeit, also bewusst None statt direkt.
|
||||
|
||||
Fail-open: wenn kein Fingerprint vorhanden ist oder das Embedding-Modell
|
||||
crasht, returnt (True, 0.0) — kein Filtering. Sonst wuerde ein kaputter
|
||||
Speaker-ID-Service die ganze Aufnahme blockieren."""
|
||||
if threshold is None:
|
||||
threshold = DEFAULT_THRESHOLD
|
||||
fp = load_fingerprint()
|
||||
if fp is None:
|
||||
return True, 0.0
|
||||
|
||||
Reference in New Issue
Block a user