From b822974b99510197bbae1c865430484c47732b38 Mon Sep 17 00:00:00 2001 From: Kazeia Team Date: Mon, 15 Jun 2026 11:26:00 +0200 Subject: [PATCH] =?UTF-8?q?fix(llm):=20sessionReset=20natif=20corrig=C3=A9?= =?UTF-8?q?=20(archi=20hybride)=20=E2=80=94=20reset=20de=20borne=20propre?= =?UTF-8?q?=20=E2=80=94=20v0.1.8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug : sessionReset()+sessionAsk() renvoyait VIDE. Cause = q35-lmq4 est l'archi hybride Qwen3.5 (DeltaNet/SSM) ; llama_memory_seq_rm d'un suffixe « Returns false if a partial sequence cannot be removed » (l'état récurrent ne se rembobine pas partiellement). Le code ignorait ce retour → KV incohérent → tour suivant vide. Fix natif (kazeia-engine dist/jni/kazeia_engine_jni.cpp, .so rebuildé CPU-only, drop-in) : sessionReset teste le retour de seq_rm ; s'il échoue (récurrent/ hybride) → reset COMPLET (llama_memory_clear + re-prefill du system mémorisé) + llama_sampler_reset. sessionStart mémorise désormais les tokens system. App : EngineLlmAdapter.resetSession() rebascule sur le session.reset() natif (au lieu du contournement newSession). Validé device : après reset, le tour n'est plus vide ET la mémoire est effacée (ne connaît plus le prénom), prefill ~285ms, decode ~17 tok/s, tours suivants OK. Co-Authored-By: Claude Opus 4.8 (1M context) --- kazeia-android/app/build.gradle.kts | 4 ++-- .../main/java/com/kazeia/llm/EngineLlmAdapter.kt | 15 ++++++--------- kazeia-android/scripts/jnilibs.MANIFEST.sha256 | 2 +- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/kazeia-android/app/build.gradle.kts b/kazeia-android/app/build.gradle.kts index c10fd97..0a3ecc6 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 = 8 - versionName = "0.1.7" + versionCode = 9 + versionName = "0.1.8" // 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/llm/EngineLlmAdapter.kt b/kazeia-android/app/src/main/java/com/kazeia/llm/EngineLlmAdapter.kt index 51f0150..a0d265a 100644 --- a/kazeia-android/app/src/main/java/com/kazeia/llm/EngineLlmAdapter.kt +++ b/kazeia-android/app/src/main/java/com/kazeia/llm/EngineLlmAdapter.kt @@ -86,15 +86,12 @@ class EngineLlmAdapter( GenerationResult(out, n, ms, st.decodeTokPerSec.toFloat()) } - /** Démarre une conversation VIERGE : recrée la session (re-prefille le system, - * vide l'historique KV). À appeler aux bornes de conversation (changement de - * patient, effacement du chat) — sinon la mémoire d'un patient fuiterait vers - * le suivant. Recrée plutôt que d'appeler sessionReset() (bug natif : reset+ask - * renvoie vide, n_past non restauré — à corriger côté engine). */ - fun resetSession() { - val e = engine ?: return - if (!plainChatml) session = e.newSession(systemPrompt) - } + /** Démarre une conversation VIERGE (garde le system prefillé). À appeler aux + * bornes de conversation (changement de patient, effacement du chat) — sinon + * la mémoire d'un patient fuiterait vers le suivant. sessionReset natif corrigé + * 2026-06-15 (clear + re-prefill system sur archi hybride où le rewind partiel + * échoue), donc on l'utilise directement. */ + fun resetSession() { session?.reset() } override fun release() { session = null; engine?.release(); engine = null } } diff --git a/kazeia-android/scripts/jnilibs.MANIFEST.sha256 b/kazeia-android/scripts/jnilibs.MANIFEST.sha256 index f657e51..fa79cd2 100644 --- a/kazeia-android/scripts/jnilibs.MANIFEST.sha256 +++ b/kazeia-android/scripts/jnilibs.MANIFEST.sha256 @@ -14,7 +14,7 @@ d49b53137f478b7b4ccbd58b9166d83e832c299b681609c70628291c61ae7204 libGenie.so 66ea0c948385d8060a7296285d7a85738c21318a88ef767986444a3d9683aeea libggml-cpu.so 7aeb209ec5c1da8857779b8f3b4c3e7519ed69c6211491948d3c87349dbced57 libggml.so 77efdb8f4c233009c05f34635ab62a60cfc9e9702d5450397c404c0cca3baf11 libkazeia_cosyvoice.so -80d9a9e524da0b32acefaef04e6510234bf1fe6e5ee9547b885f9af0e40993d5 libkazeia_engine.so +776f37e43433459a7350dc9d5d15dcb8eb3e17465a28fa78de92559bec3918bd libkazeia_engine.so fdd730af3daf132d0819b3fc99abd8aae79800aab7a9aad371e117c16bd3a3aa libkazeia_stt.so 114795bf0256c380dc87971598707e9e0b745a7fc868f3d1fb460e94cecdd69c libkazeia_tts.so 349ba592462113c6e871b9c3ee508727a9e5f154a33905f946bda97535eff586 libllama-common.so