[M1] Crate fractal-stt : trait SttEngine + types AudioData / Transcript #73

Closed
opened 2026-04-06 01:41:28 +00:00 by charles · 1 comment
Owner

Contexte

Première brique de M1 : définir le contrat commun à tous les moteurs STT et les types de données partagés. Cette abstraction permet de brancher Whisper.cpp, OpenAI Whisper ou Vosk sans modifier le reste du pipeline.

Critères d'acceptation

  • Crate fractal-stt créée dans le workspace, implémentant le trait Extension (via fractal-ext)
  • Trait SttEngine défini :
    • async fn transcribe(&self, audio: AudioData) -> Result<Transcript>
    • async fn health_check(&self) -> Result<()>
    • fn supported_languages(&self) -> Vec<String>
  • Type AudioData : { bytes: Vec<u8>, mime_type: String, duration_ms: u64 }
  • Type Transcript : { text: String, language: String, confidence: Confidence, segments: Vec<TranscriptSegment> }
  • Type TranscriptSegment : { start_ms: u64, end_ms: u64, text: String }
  • Enum Confidence : High / Medium / Low
  • Config [stt] dans config.toml : engine (whisper_cpp | openai | vosk), auto_transcribe: bool, language: Option<String>, model_size (tiny/base/small/medium/large)
  • Cache SQLite : table transcriptions(event_id TEXT PRIMARY KEY, text TEXT, language TEXT, confidence TEXT)

Notes techniques

  • Dépend de #72 (fractal-ext)
  • Ce crate est le point d'entrée ; les moteurs (#74, #75, #76) en sont des implémentations
  • Le cache évite de retranscrire un message déjà traité ; clé = event_id Matrix
## Contexte Première brique de M1 : définir le contrat commun à tous les moteurs STT et les types de données partagés. Cette abstraction permet de brancher Whisper.cpp, OpenAI Whisper ou Vosk sans modifier le reste du pipeline. ## Critères d'acceptation - [ ] Crate `fractal-stt` créée dans le workspace, implémentant le trait `Extension` (via `fractal-ext`) - [ ] Trait `SttEngine` défini : - `async fn transcribe(&self, audio: AudioData) -> Result<Transcript>` - `async fn health_check(&self) -> Result<()>` - `fn supported_languages(&self) -> Vec<String>` - [ ] Type `AudioData` : `{ bytes: Vec<u8>, mime_type: String, duration_ms: u64 }` - [ ] Type `Transcript` : `{ text: String, language: String, confidence: Confidence, segments: Vec<TranscriptSegment> }` - [ ] Type `TranscriptSegment` : `{ start_ms: u64, end_ms: u64, text: String }` - [ ] Enum `Confidence` : `High / Medium / Low` - [ ] Config `[stt]` dans `config.toml` : `engine` (whisper_cpp | openai | vosk), `auto_transcribe: bool`, `language: Option<String>`, `model_size` (tiny/base/small/medium/large) - [ ] Cache SQLite : table `transcriptions(event_id TEXT PRIMARY KEY, text TEXT, language TEXT, confidence TEXT)` ## Notes techniques - Dépend de #72 (fractal-ext) - Ce crate est le point d'entrée ; les moteurs (#74, #75, #76) en sont des implémentations - Le cache évite de retranscrire un message déjà traité ; clé = `event_id` Matrix
Author
Owner

Fermé en doublon : ce travail a été réalisé dans la PR #81 (issue #4). Le trait SttEngine et tous les types (AudioData, Transcript, EngineStatus, etc.) sont déjà mergés sur main.

Fermé en doublon : ce travail a été réalisé dans la PR #81 (issue #4). Le trait `SttEngine` et tous les types (`AudioData`, `Transcript`, `EngineStatus`, etc.) sont déjà mergés sur `main`.
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#73
No description provided.