feat(stt): OpenAiWhisperEngine + VoskEngine + SecretString (#6) #95

Closed
charles wants to merge 5 commits from feat/6-stt-engines into main
Owner

Résumé

Ajoute deux moteurs STT alternatifs + le type SecretString dans fractal-stt.

Changements

  • secret.rsSecretString : wrapper opaque, Debug/Display masqués (***), expose() pour usage interne
  • openai_whisper.rsOpenAiWhisperEngine :
    • HTTP multipart → /v1/audio/transcriptions (OpenAI, Groq, Together.ai…)
    • base_url configurable, reqwest + rustls-tls (pas d'OpenSSL)
    • health_check() via GET /v1/models timeout 5 s (détecte 401 = clé invalide)
    • Segments avec timestamps float→ms, Confidence::High
  • vosk.rsVoskEngine :
    • Subprocess vosk-transcriber --model <dir> --input <wav> --output json
    • Parse JSON streaming ligne par ligne
    • health_check() : binaire + répertoire modèle
    • supported_languages() : déduit depuis vosk-<lang> dans le nom du répertoire
  • Cargo.toml (workspace) — ajout reqwest = "0.12" (rustls, multipart, json)
  • crates/fractal-stt/Cargo.toml — ajout reqwest = { workspace = true }

Plan de test

  • cargo test -p fractal-stt — SecretString masquage, health_check
  • Test manuel OpenAI : clé API + fichier audio → transcription
  • Test manuel Vosk : binaire + modèle vosk-en → transcription locale

Closes #6

## Résumé Ajoute deux moteurs STT alternatifs + le type `SecretString` dans `fractal-stt`. ### Changements - **`secret.rs`** — `SecretString` : wrapper opaque, `Debug`/`Display` masqués (`***`), `expose()` pour usage interne - **`openai_whisper.rs`** — `OpenAiWhisperEngine` : - HTTP multipart → `/v1/audio/transcriptions` (OpenAI, Groq, Together.ai…) - `base_url` configurable, `reqwest` + `rustls-tls` (pas d'OpenSSL) - `health_check()` via `GET /v1/models` timeout 5 s (détecte 401 = clé invalide) - Segments avec timestamps float→ms, `Confidence::High` - **`vosk.rs`** — `VoskEngine` : - Subprocess `vosk-transcriber --model <dir> --input <wav> --output json` - Parse JSON streaming ligne par ligne - `health_check()` : binaire + répertoire modèle - `supported_languages()` : déduit depuis `vosk-<lang>` dans le nom du répertoire - **`Cargo.toml`** (workspace) — ajout `reqwest = "0.12"` (rustls, multipart, json) - **`crates/fractal-stt/Cargo.toml`** — ajout `reqwest = { workspace = true }` ### Plan de test - [ ] `cargo test -p fractal-stt` — SecretString masquage, health_check - [ ] Test manuel OpenAI : clé API + fichier audio → transcription - [ ] Test manuel Vosk : binaire + modèle `vosk-en` → transcription locale Closes #6
charles closed this pull request 2026-04-06 01:56:28 +00:00
Some checks are pending
CI / cargo check (pull_request) Has been cancelled
CI / cargo test (pull_request) Has been cancelled
CI / clippy + rustfmt (pull_request) Has been cancelled
qa
Required

Pull request closed

Sign in to join this conversation.
No description provided.