feat: OpenAiWhisperEngine + VoskEngine + SecretString (#6) #96

Closed
charles wants to merge 21 commits from feat/6-openai-vosk-engines into main
Owner

Closes #6

Summary

  • SecretString : type opaque ajouté dans types.rsDebug/Display masquent la valeur ([REDACTED]), expose() retourne la valeur brute au point d'usage
  • OpenAiWhisperEngine : appel HTTP multipart vers {base_url}/v1/audio/transcriptions via reqwest + rustls-tls (pas d'OpenSSL) ; health_check() valide la clé API via GET {base_url}/v1/models ; compatible OpenAI, Groq, Together…
  • VoskEngine : invoque vosk-transcriber en subprocess ; health_check() vérifie la présence du binaire puis du répertoire modèle ; parse le format JSON ligne-par-ligne ({"text": "…"})
  • whisper.rs : WHISPER_LANGUAGES rendu pub(crate) ; convert_to_wav extrait en fonction libre pub(crate) convert_audio_to_wav réutilisée par VoskEngine
  • lib.rs : exports mis à jour (openai, vosk, SecretString depuis types)
  • Cargo : reqwest = { version = "0.12", features = ["multipart", "json", "rustls-tls"] } et url = "2" ajoutés au workspace et à fractal-stt

Plan de test

  • cargo test -p fractal-stt — tous les tests unitaires passent (OpenAI URL building, clé masquée, parsing Vosk, health checks avec binaires manquants)
  • cargo clippy -p fractal-stt -- -D warnings — pas d'avertissement
  • Vérifier que SecretString n'apparaît pas en clair dans les logs ({:?}SecretString([REDACTED]), {}[REDACTED])
  • Test d'intégration manuel : instancier OpenAiWhisperEngine avec une vraie clé et appeler health_check()EngineStatus::Ready
  • Test d'intégration manuel : VoskEngine::health_check() avec /bin/true + modèle manquant → ModelMissing
Closes #6 ## Summary - **`SecretString`** : type opaque ajouté dans `types.rs` — `Debug`/`Display` masquent la valeur (`[REDACTED]`), `expose()` retourne la valeur brute au point d'usage - **`OpenAiWhisperEngine`** : appel HTTP multipart vers `{base_url}/v1/audio/transcriptions` via `reqwest` + `rustls-tls` (pas d'OpenSSL) ; `health_check()` valide la clé API via GET `{base_url}/v1/models` ; compatible OpenAI, Groq, Together… - **`VoskEngine`** : invoque `vosk-transcriber` en subprocess ; `health_check()` vérifie la présence du binaire puis du répertoire modèle ; parse le format JSON ligne-par-ligne (`{"text": "…"}`) - **`whisper.rs`** : `WHISPER_LANGUAGES` rendu `pub(crate)` ; `convert_to_wav` extrait en fonction libre `pub(crate) convert_audio_to_wav` réutilisée par `VoskEngine` - **`lib.rs`** : exports mis à jour (`openai`, `vosk`, `SecretString` depuis `types`) - **Cargo** : `reqwest = { version = "0.12", features = ["multipart", "json", "rustls-tls"] }` et `url = "2"` ajoutés au workspace et à `fractal-stt` ## Plan de test - [ ] `cargo test -p fractal-stt` — tous les tests unitaires passent (OpenAI URL building, clé masquée, parsing Vosk, health checks avec binaires manquants) - [ ] `cargo clippy -p fractal-stt -- -D warnings` — pas d'avertissement - [ ] Vérifier que `SecretString` n'apparaît pas en clair dans les logs (`{:?}` → `SecretString([REDACTED])`, `{}` → `[REDACTED]`) - [ ] Test d'intégration manuel : instancier `OpenAiWhisperEngine` avec une vraie clé et appeler `health_check()` → `EngineStatus::Ready` - [ ] Test d'intégration manuel : `VoskEngine::health_check()` avec `/bin/true` + modèle manquant → `ModelMissing`
feat(stt): export OpenAiWhisperEngine, VoskEngine, SecretString (#6)
Some checks are pending
CI / cargo check (pull_request) Waiting to run
CI / cargo test (pull_request) Blocked by required conditions
CI / clippy + rustfmt (pull_request) Waiting to run
532b32ace3
fix(stt): corriger EngineStatus + importer SecretString depuis secret.rs (#6)
Some checks are pending
CI / cargo check (pull_request) Waiting to run
CI / cargo test (pull_request) Blocked by required conditions
CI / clippy + rustfmt (pull_request) Waiting to run
94e419b2cc
fix(stt): corriger EngineStatus dans VoskEngine (#6)
Some checks are pending
CI / cargo check (pull_request) Waiting to run
CI / cargo test (pull_request) Blocked by required conditions
CI / clippy + rustfmt (pull_request) Waiting to run
bafb41d3e9
feat(stt): exposer tous les modules + moteurs (#6)
Some checks are pending
CI / cargo check (pull_request) Waiting to run
CI / cargo test (pull_request) Blocked by required conditions
CI / clippy + rustfmt (pull_request) Waiting to run
fa754cbd5c
fix(stt): supprimer dep dirs inutilisée (#6)
Some checks failed
CI / cargo check (pull_request) Has been cancelled
CI / cargo test (pull_request) Has been cancelled
CI / clippy + rustfmt (pull_request) Has been cancelled
edab0c898b
chore(stt): synchroniser whisper.rs depuis main pour la branche #6
Some checks are pending
CI / cargo check (pull_request) Waiting to run
CI / cargo test (pull_request) Blocked by required conditions
CI / clippy + rustfmt (pull_request) Waiting to run
92666eb452
chore(stt): utiliser workspace pour toutes les dépendances (#6)
Some checks are pending
CI / cargo check (pull_request) Waiting to run
CI / cargo test (pull_request) Blocked by required conditions
CI / clippy + rustfmt (pull_request) Waiting to run
dc1b60c49e
chore: ajouter reqwest + tempfile + dirs aux dépendances workspace (#6)
Some checks are pending
CI / cargo check (pull_request) Waiting to run
CI / cargo test (pull_request) Blocked by required conditions
CI / clippy + rustfmt (pull_request) Waiting to run
65e1814e18
feat(stt): add audio conversion utility module (#6)
Some checks are pending
CI / cargo check (pull_request) Waiting to run
CI / cargo test (pull_request) Blocked by required conditions
CI / clippy + rustfmt (pull_request) Waiting to run
0845fe7249
chore: add url workspace dep to root Cargo.toml
Some checks are pending
CI / cargo check (pull_request) Waiting to run
CI / cargo test (pull_request) Blocked by required conditions
CI / clippy + rustfmt (pull_request) Waiting to run
a6da13d417
chore: add url dep to fractal-stt Cargo.toml
Some checks failed
CI / cargo check (pull_request) Has been cancelled
CI / cargo test (pull_request) Has been cancelled
CI / clippy + rustfmt (pull_request) Has been cancelled
744d4c32a3
refactor: remove secret.rs, SecretString moved into types.rs
Some checks failed
CI / cargo check (pull_request) Has been cancelled
CI / cargo test (pull_request) Has been cancelled
CI / clippy + rustfmt (pull_request) Has been cancelled
d6227401c0
charles closed this pull request 2026-04-06 02:01:15 +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.