[M1] Moteur Whisper.cpp (local via subprocess) #186

Closed
opened 2026-04-06 08:52:07 +00:00 by charles · 0 comments
Owner

Contexte

Implémenter WhisperEngine, la première implémentation concrète de SttEngine. Fonctionne entièrement en local sans réseau en appelant le binaire whisper-cpp.

Critères d'acceptation

  • Struct WhisperEngine { binary_path: PathBuf, model_path: PathBuf, model_size: WhisperModel } implémente SttEngine
  • transcribe() : écrit l'audio dans un fichier temporaire, convertit en WAV 16kHz mono via pipeline GStreamer, appelle whisper-cpp en subprocess, parse la sortie JSON et construit un Transcript avec segments
  • health_check() : vérifie que le binaire existe et est exécutable
  • Enum WhisperModel : Tiny, Base, Small, Medium, Large
  • Gestion des erreurs : binaire absent, conversion échouée, parsing JSON invalide
  • Test d'intégration avec un fichier WAV de test (mock ou fixture)

Notes techniques

  • Conversion audio via GStreamer (déjà dépendance de GTK dans Fractal upstream) : pipeline appsrc → decodebin → audioconvert → audioresample → audio/x-raw,rate=16000,channels=1 → appsink
  • Sortie attendue de whisper-cpp : JSON avec tableau de segments [{start, end, text}]
  • Utiliser tokio::process::Command pour le subprocess async
  • Voir specs §3.3 (ST-M1-03, ST-M1-04)
## Contexte Implémenter `WhisperEngine`, la première implémentation concrète de `SttEngine`. Fonctionne entièrement en local sans réseau en appelant le binaire `whisper-cpp`. ## Critères d'acceptation - [ ] Struct `WhisperEngine { binary_path: PathBuf, model_path: PathBuf, model_size: WhisperModel }` implémente `SttEngine` - [ ] `transcribe()` : écrit l'audio dans un fichier temporaire, convertit en WAV 16kHz mono via pipeline GStreamer, appelle `whisper-cpp` en subprocess, parse la sortie JSON et construit un `Transcript` avec segments - [ ] `health_check()` : vérifie que le binaire existe et est exécutable - [ ] Enum `WhisperModel` : `Tiny`, `Base`, `Small`, `Medium`, `Large` - [ ] Gestion des erreurs : binaire absent, conversion échouée, parsing JSON invalide - [ ] Test d'intégration avec un fichier WAV de test (mock ou fixture) ## Notes techniques - Conversion audio via GStreamer (déjà dépendance de GTK dans Fractal upstream) : pipeline `appsrc → decodebin → audioconvert → audioresample → audio/x-raw,rate=16000,channels=1 → appsink` - Sortie attendue de `whisper-cpp` : JSON avec tableau de segments `[{start, end, text}]` - Utiliser `tokio::process::Command` pour le subprocess async - Voir specs §3.3 (ST-M1-03, ST-M1-04)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/my-fractal#186
No description provided.