Implementation complete (cf-voice side)
cf-voice#1 implemented and closed:
SpeakerTracker— maps pyannote IDs (SPEAKER_00) to stable per-session friendly labels (Speaker A,…
Code exists: cf_voice.diarize.Diarizer wraps pyannote/speaker-diarization-3.1 with async thread pool. Gated by CF_VOICE_DIARIZE=1 + HF_TOKEN. Lazy-loaded in _classify_real_async…
Partial: wav2vec2 tone classifier (cf_voice.classify.ToneClassifier) is done and confirmed working — closes the tone/affect part of this issue.
Remaining: YAMNet acoustic event classification…
Done. cf_voice.stt.WhisperSTT wraps faster-whisper with async thread pool execution and a 50-word rolling session prompt for cross-chunk context continuity. Lazy-loaded on first real classify…
Done. cf-voice exposes a /classify sidecar API (cf_voice.app). Linnet session_store.forward_audio_chunk() accumulates 100ms PCM chunks into 1s windows and POSTs to the sidecar. In-process…