diff --git a/kazeia-android/app/build.gradle.kts b/kazeia-android/app/build.gradle.kts index 0a3ecc6..b7791e6 100644 --- a/kazeia-android/app/build.gradle.kts +++ b/kazeia-android/app/build.gradle.kts @@ -44,8 +44,8 @@ android { applicationId = "com.kazeia" minSdk = 28 targetSdk = 36 - versionCode = 9 - versionName = "0.1.8" + versionCode = 10 + versionName = "0.1.9" // WebDAV de distribution — injecté depuis local.properties. buildConfigField("String", "WEBDAV_BASE", "\"${localProp("webdav.base")}\"") diff --git a/kazeia-android/app/src/main/java/com/kazeia/service/KazeiaService.kt b/kazeia-android/app/src/main/java/com/kazeia/service/KazeiaService.kt index b0597b9..ca87a6a 100644 --- a/kazeia-android/app/src/main/java/com/kazeia/service/KazeiaService.kt +++ b/kazeia-android/app/src/main/java/com/kazeia/service/KazeiaService.kt @@ -1837,6 +1837,11 @@ Pas d'introduction, pas d'explication. Juste les 4 lignes en francais. /no_think // the enqueueSentence plumbing fall through to the legacy post-LLM // pipeline.speakText batch call. val qwen = tts as? com.kazeia.tts.Qwen3TtsEngine + // NB CosyVoice : PAS de streaming LLM→TTS. LLM decode et synthèse CosyVoice + // sont tous deux CPU-bound (saturent les cœurs) ; les chevaucher étrangle le + // LLM (mesuré : 17→0,55 tok/s, tour 1,1s→41s). On laisse le LLM finir vite + // (session ~1,1s) PUIS synthesizeAndPlay (chemin legacy) qui streame déjà + // phrase-par-phrase EN INTERNE (synthèse N+1 pendant lecture N, sans contention). // Bulle vide + signal Thinking sur le visualizer : la couleur de l'orbe // pulse pendant que le LLM réfléchit, plus de "..." textuels parasites. // L'écran reveal mot-par-mot s'enchaîne quand le premier audio joue. @@ -1899,6 +1904,8 @@ Pas d'introduction, pas d'explication. Juste les 4 lignes en francais. /no_think val sentenceCounter = java.util.concurrent.atomic.AtomicInteger(0) // TTS coupé (llmOnly) → pas de session de synthèse ouverte ; la bulle // se remplit token par token dans onToken (voir plus bas). + // Streaming LLM→TTS réservé à Qwen3 (NPU/Hexagon : pas de contention CPU avec + // le LLM). CosyVoice (CPU) passe par le chemin batch (voir note plus haut). val ttsStreamer: com.kazeia.tts.SentenceStreamer? = if (qwen != null && !llmOnly) { qwen.onSegmentPlaying = onSegPlay