fix(llm): sessionReset natif corrigé (archi hybride) — reset de borne propre — v0.1.8

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) <noreply@anthropic.com>
This commit is contained in:
Kazeia Team 2026-06-15 11:26:00 +02:00
parent 8d548b1ca6
commit b822974b99
3 changed files with 9 additions and 12 deletions

View File

@ -44,8 +44,8 @@ android {
applicationId = "com.kazeia" applicationId = "com.kazeia"
minSdk = 28 minSdk = 28
targetSdk = 36 targetSdk = 36
versionCode = 8 versionCode = 9
versionName = "0.1.7" versionName = "0.1.8"
// WebDAV de distribution — injecté depuis local.properties. // WebDAV de distribution — injecté depuis local.properties.
buildConfigField("String", "WEBDAV_BASE", "\"${localProp("webdav.base")}\"") buildConfigField("String", "WEBDAV_BASE", "\"${localProp("webdav.base")}\"")

View File

@ -86,15 +86,12 @@ class EngineLlmAdapter(
GenerationResult(out, n, ms, st.decodeTokPerSec.toFloat()) GenerationResult(out, n, ms, st.decodeTokPerSec.toFloat())
} }
/** Démarre une conversation VIERGE : recrée la session (re-prefille le system, /** Démarre une conversation VIERGE (garde le system prefillé). À appeler aux
* vide l'historique KV). À appeler aux bornes de conversation (changement de * bornes de conversation (changement de patient, effacement du chat) sinon
* patient, effacement du chat) sinon la mémoire d'un patient fuiterait vers * la mémoire d'un patient fuiterait vers le suivant. sessionReset natif corrigé
* le suivant. Recrée plutôt que d'appeler sessionReset() (bug natif : reset+ask * 2026-06-15 (clear + re-prefill system sur archi hybride le rewind partiel
* renvoie vide, n_past non restauré à corriger côté engine). */ * échoue), donc on l'utilise directement. */
fun resetSession() { fun resetSession() { session?.reset() }
val e = engine ?: return
if (!plainChatml) session = e.newSession(systemPrompt)
}
override fun release() { session = null; engine?.release(); engine = null } override fun release() { session = null; engine?.release(); engine = null }
} }

View File

@ -14,7 +14,7 @@ d49b53137f478b7b4ccbd58b9166d83e832c299b681609c70628291c61ae7204 libGenie.so
66ea0c948385d8060a7296285d7a85738c21318a88ef767986444a3d9683aeea libggml-cpu.so 66ea0c948385d8060a7296285d7a85738c21318a88ef767986444a3d9683aeea libggml-cpu.so
7aeb209ec5c1da8857779b8f3b4c3e7519ed69c6211491948d3c87349dbced57 libggml.so 7aeb209ec5c1da8857779b8f3b4c3e7519ed69c6211491948d3c87349dbced57 libggml.so
77efdb8f4c233009c05f34635ab62a60cfc9e9702d5450397c404c0cca3baf11 libkazeia_cosyvoice.so 77efdb8f4c233009c05f34635ab62a60cfc9e9702d5450397c404c0cca3baf11 libkazeia_cosyvoice.so
80d9a9e524da0b32acefaef04e6510234bf1fe6e5ee9547b885f9af0e40993d5 libkazeia_engine.so 776f37e43433459a7350dc9d5d15dcb8eb3e17465a28fa78de92559bec3918bd libkazeia_engine.so
fdd730af3daf132d0819b3fc99abd8aae79800aab7a9aad371e117c16bd3a3aa libkazeia_stt.so fdd730af3daf132d0819b3fc99abd8aae79800aab7a9aad371e117c16bd3a3aa libkazeia_stt.so
114795bf0256c380dc87971598707e9e0b745a7fc868f3d1fb460e94cecdd69c libkazeia_tts.so 114795bf0256c380dc87971598707e9e0b745a7fc868f3d1fb460e94cecdd69c libkazeia_tts.so
349ba592462113c6e871b9c3ee508727a9e5f154a33905f946bda97535eff586 libllama-common.so 349ba592462113c6e871b9c3ee508727a9e5f154a33905f946bda97535eff586 libllama-common.so