107 lines
5.6 KiB
Markdown
107 lines
5.6 KiB
Markdown
# Kazeia-Engine — vue d'ensemble du moteur unifié
|
|
|
|
**Mai 2026**. Moteur d'inférence local-first pour la tablette Snapdragon 8 Elite (Pad3). Couvre LLM, TTS (avec clonage vocal embarqué) et STT dans une stack cohérente.
|
|
|
|
```
|
|
┌─────────────────────── Kazeia-Engine ───────────────────────┐
|
|
│ │
|
|
│ STT (Whisper-Small NPU) TTS (Qwen3-TTS in-process) │
|
|
│ ┌──────────────────────┐ ┌────────────────────────┐ │
|
|
│ │ libkazeia_stt.so │ │ libkazeia_tts.so │ │
|
|
│ │ 168 KB │ │ ~5 MB │ │
|
|
│ │ ↳ stt_engine │ │ ↳ tts_engine │ │
|
|
│ │ ↳ kazeia_mel │ ────► │ ↳ kazeia_mel │ │ partage
|
|
│ │ ↳ VAD RMS C++ │ │ ↳ speaker_encoder │ │ mel + VAD
|
|
│ │ ↳ BPE byte-level │ │ ↳ cp_inference │ │
|
|
│ │ ↳ JSON parser │ │ ↳ decoder ggml chraac │ │
|
|
│ │ │ │ ↳ sampler │ │
|
|
│ │ runtime : │ │ │ │
|
|
│ │ libonnxruntime.so + │ │ runtime : │ │
|
|
│ │ libQnnHtp*.so │ │ libllama + libggml* │ │
|
|
│ └──────────────────────┘ └────────────────────────┘ │
|
|
│ │
|
|
│ LLM (Qwen3.5-4B GGUF) │
|
|
│ ┌──────────────────────────────────────────────────────┐ │
|
|
│ │ libllama.so + libggml-htp-v79.so + chraac codec │ │
|
|
│ │ ↳ prefill HTP / decode CPU NEON │ │
|
|
│ └──────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
└──────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## API Kotlin unifiée (côté app)
|
|
|
|
```kotlin
|
|
// 1) STT in-process (Whisper-Small NPU)
|
|
val stt = SttEngine("/data/.../whisper-small-sm8750", useHtp = true)
|
|
val transcript = stt.transcribe(pcm16, language = "fr")
|
|
|
|
// 2) VAD (drop-in replacement de VadStage.kt)
|
|
val vad = SttVad()
|
|
when (vad.push(chunk)) { SttVad.SPEECH -> ... ; SttVad.END_OF_SPEECH -> ... }
|
|
|
|
// 3) TTS in-process (Qwen3-TTS + clonage vocal embarqué)
|
|
val tts = TtsEngine(
|
|
talkerGguf = "/data/.../talker_f32.gguf",
|
|
vocabGguf = "/data/.../Qwen3-4B-Q4_0.gguf",
|
|
dumpDir = "/data/.../tts_dump",
|
|
useHtp = false,
|
|
nThreads = 6
|
|
)
|
|
val r = tts.synthesize("Bonjour, comment ça va ?", "/sdcard/out.wav")
|
|
|
|
// 4) LLM via libllama (Qwen3.5-4B Q4_0 cascade Speaker+Thinker)
|
|
// -- intégration via lib séparée libkazeia_engine.so + façade existante.
|
|
```
|
|
|
|
## Composants livrés à ce jour
|
|
|
|
| Composant | État | Lib | Doc |
|
|
|---|---|---|---|
|
|
| LLM Qwen3.5-4B / Qwen3.5-9B GGUF | prod | `libllama.so` + Hexagon backend | `CLAUDE.md` |
|
|
| TTS Talker + CP + decoder ggml | prod | `libkazeia_tts.so` | `tts_engine.h` |
|
|
| Clonage vocal speaker encoder ECAPA-TDNN | **livré 31/05** | `libkazeia_tts.so` | mémoire `project_tts_voice_cloning` |
|
|
| STT Whisper-Small NPU C++ | **livré 31/05** | `libkazeia_stt.so` | **`STT_INTEGRATION.md`** |
|
|
| VAD RMS C++ | **livré 31/05** | `libkazeia_stt.so` | idem |
|
|
| Mel extractor partagé (FFT) | **livré 31/05** | `kazeia_mel.{h,cpp}` | header |
|
|
|
|
## Empreinte mémoire (Snapdragon 8 Elite, 16 GB RAM)
|
|
|
|
| Composant chargé | RAM peak |
|
|
|---|---:|
|
|
| LLM Qwen3.5-4B Q4_0 | 2.4 GB |
|
|
| LLM Qwen3.5-9B Q4_0 | 5.0 GB |
|
|
| TTS (talker + CP + decoder + vocab + xvector fixture) | 3.5 GB |
|
|
| TTS clonage vocal (speaker encoder, en plus du fixture) | +34 MB |
|
|
| STT Whisper-Small NPU (encoder + decoder QAIRT) | 378 MB |
|
|
| **Total cascade Speaker 4B + STT + TTS** | **~6.3 GB** (sur 16 GB dispo) |
|
|
|
|
## Pipeline vocal de bout en bout (latence typique)
|
|
|
|
```
|
|
mic 16 kHz PCM16
|
|
↓ AudioRecord
|
|
SttVad (RMS énergie) → ~830 ms après fin de parole (silence 800 ms + overhead)
|
|
↓ end_of_speech
|
|
SttEngine.transcribe(pcm) → ~0.4-2.0 s selon longueur audio (RTF 0.4)
|
|
↓ texte FR
|
|
LLM Qwen3.5-4B cascade → ~5-10 s (Guard + Speaker, 4-9 GB total)
|
|
↓ réponse FR
|
|
TtsEngine.synthesize(text) → ~3-10 s (RTF 2.5-3.0 selon longueur)
|
|
↓
|
|
audio playback
|
|
```
|
|
|
|
Total latence voix→audio : ~10-25 s selon longueur du tour, dominée par LLM + TTS.
|
|
|
|
## Documentation par sous-système
|
|
|
|
- **LLM** : `/opt/Kazeia-engine/CLAUDE.md` (état complet)
|
|
- **TTS** : `tts_engine.h` (API publique) + clonage vocal section §1 du STT_INTEGRATION.md
|
|
- **STT** : **`STT_INTEGRATION.md`** (guide intégration complet)
|
|
- **Mémoire interne assistant** : `/home/alf/.claude/projects/-opt-Kazeia-engine/memory/`
|
|
|
|
## Pour intégrer côté app Android
|
|
|
|
Lire `STT_INTEGRATION.md` — guide complet de migration depuis `WhisperHybridEngine.kt`. Les libs `libkazeia_tts.so` et `libkazeia_stt.so` partagent le même runtime (NDK r27d, arm64-v8a, API 31+, `-march=armv8.6-a+i8mm+bf16+dotprod+fp16`).
|