Commit Graph

2 Commits

Author SHA1 Message Date
Richard Loyer 3775bbc37c chantier TTS CosyVoice3 + verdict R&D NPU
dist/cosyvoice/ : engine streaming chunk-causal (RTF 0.88, cache prompt block-causal,
  HiFT F16) + clonage vocal ECAPA + JNI + libs + exemple voix (damien.cvps)
dist/distill/ : pipeline distillation Reflow 2-NFE (train, export ONNX, eval)
dist/jni/ : CosyVoiceTtsEngine.kt + kazeia_cosyvoice_jni + maj engine/tts/speaker_encoder
dist/lib-cpu/ : libs ggml/llama CPU-only (contournement SELinux FastRPC untrusted_app)
dist/outetts/ : runner OuteTTS (écarté au profit de CosyVoice3)

R&D NPU (détail en mémoire) : QNN HTP exécute MAL le flow DiT de façon irréductible
hors-root (CPU-backend fidèle 0.74 vs HTP 0.14, même DLC ; chirurgie ONNX canonicalisée,
opt-level sans effet). Hexagon-MLIR open exécute GPT-2 correctement sur V79 -> QNN
backend coupable, pas le silicium. Ship = CPU RTF 0.88 ; bug-report Qualcomm = vrai levier.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 21:48:30 +02:00
Richard Loyer 655d65a655 chantier RAG #2 : modèle FR tranché (e5-small voie a) + .so CPU-only + patch converter
Réponses aux 3 demandes du dev :

#1 .so CPU-only livrée : dist/b-jni-cpu/libkazeia_engine.so (64 KB).
   DT_NEEDED = libllama/libggml/libggml-base (CPU-only dist/lib-cpu/) + système,
   AUCUNE dep libggml-hexagon -> pas de FastRPC -> pas de bloqueur SELinux.
   Validée tablette : charge e5+nomic, n_embd auto, déterministe, norme 1.0.

#2 modèle FR tranché = VOIE A (multilingual-e5-small), blocage XLM-R levé.
   Question décisive "petit patch ou trou architectural ?" -> PETIT PATCH, mesuré :
   - runtime C++ a déjà UGM (unigram/SPM), découplé de l'arch (tokenizer_model=t5
     -> LLAMA_VOCAB_TYPE_UGM). Pas de trou.
   - converter a déjà _xlmroberta_set_vocab (écrit t5/UGM) mais seul NomicBert le
     câblait. e5 declare architectures=[BertModel]+tokenizer Unigram -> tombait en
     BertModel.set_vocab -> chemin BPE -> get_vocab_base_pre échoue (hash inconnu).
   - fix = wiring dans BertModel (3 méthodes : __init__ détecte Unigram, set_vocab
     route xlmroberta, modify_tensors choppe positions) calqué sur Roberta/Nomic.
   Patch : dist/patches/bert_xlmroberta_unigram.diff (~25 lignes, à appliquer dans
   le fork ql par le dev — non commité dans ql par respect AGENTS.md).
   PROUVÉ end-to-end : converti e5-small-f16.gguf (384-dim) via converter patché,
   chargé sur build CPU-only tablette :
     cos(dormir,insomnie)=0.909 > cos(dormir,tarte)=0.821, marge FR 0.089
     (nomic 0.04 -> e5 2.2x mieux), ranking propre, norme 1.0, déterministe.
   Voie c (nomic stopgap) documentée si besoin de dérisquer l'E2E in-app d'abord.

#3 interface FIGÉE confirmée : loadEmbedder/embedText/freeEmbedder inchangées.

Bit-identique garanti sur le MÊME build (CPU vs HTP divergent ~1.5e-2 sur Q4_K_M ;
sans effet car ingestion+requête tournent sur le même build in-app).

Doc dist/RAG_INTEGRATION.md mise à jour (décision modèle, patch, reproduction GGUF,
interface figée, .so CPU-only). GGUF e5 = artefact distribution (non versionné git).
2026-06-09 22:46:02 +02:00