KV污染根治(还9/14的债):JNI 每次 generate 前 llama_memory_clear——翻译慢的主因(每批重建引擎=每次尝试重载E2B 4~6s)就此免除;Kotlin 侧 translateNumbered 改引擎复用(translateEngine ?: ensure),闲置60s卸载不变;纪要流水线多块共享引擎的潜在污染同步消除;.so 已重编部署(strip 4.32MB,6导出符号)
This commit is contained in:
parent
fe7c696589
commit
cea9892426
|
|
@ -2382,6 +2382,7 @@ class MainActivity : AppCompatActivity() {
|
|||
}
|
||||
|
||||
private fun ensureTranslateEngine(): LlmEngine? {
|
||||
translateEngine?.let { return it }
|
||||
val f = File(File(externalModelDir, summarizeModelDirName), summarizeGgufName)
|
||||
if (!f.isFile) {
|
||||
Log.i(TAG, "translate model missing at ${f.absolutePath}; tap-translate off")
|
||||
|
|
@ -2400,18 +2401,17 @@ class MainActivity : AppCompatActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
// 一批 = 一个全新引擎(nativeGenerate 不清 KV 的 workaround)。
|
||||
// items: key(通常是 sid 字符串) × 原文;返回 key × 译文,失败 null。
|
||||
// 直译模式(2026-09-16):不再携带同轮上下文
|
||||
// 直译模式(2026-09-16):不携带同轮上下文;引擎复用(JNI 每次生成前清 KV)
|
||||
private fun translateNumbered(
|
||||
items: List<Pair<String, String>>, temp: Float = 0f,
|
||||
): Map<String, String>? {
|
||||
if (items.isEmpty()) return emptyMap()
|
||||
val targetName = transTargetName()
|
||||
val langHint = transLangHint()
|
||||
translateEngine?.let { runCatching { it.release() } }
|
||||
translateEngine = null
|
||||
val engine = ensureTranslateEngine() ?: return null
|
||||
// 引擎复用(2026-09-16,JNI 已加 KV 清除):不再按批重建——
|
||||
// "每批重建"曾让每次尝试都重载 E2B ~4-6s,是翻译单句 30~40s 的主因
|
||||
val engine = translateEngine ?: ensureTranslateEngine() ?: return null
|
||||
// 长句拆段:小模型对短输入才稳定;长句译到中途会"掉语言"
|
||||
// (简体→繁体→别的语言)。拆 ≤140 字段一次 generate,段序拼回。
|
||||
val segKeys = ArrayList<Pair<String, String>>()
|
||||
|
|
|
|||
|
|
@ -165,6 +165,12 @@ Java_com_k2fsa_sherpa_onnx_LlmEngine_nativeGenerate(
|
|||
std::lock_guard<std::mutex> lock(e->mu);
|
||||
e->abort.store(false);
|
||||
|
||||
// KV 清除(2026-09-16 根治):原实现不清 KV,同引擎连续 generate 会复读
|
||||
// 上一条输出 -> Kotlin 侧被迫"每次尝试重建引擎"(E2B 每次重载 4~6s,
|
||||
// 是翻译单句 30~40s 的主因)。每次生成前清空内存,引擎即可安全复用;
|
||||
// 顺带修复纪要流水线多块共享引擎的潜在污染。
|
||||
llama_memory_clear(llama_get_memory(e->ctx), true);
|
||||
|
||||
const std::string prompt = jstringToUtf8(env, jPrompt);
|
||||
if (prompt.empty()) {
|
||||
throwJava(env, "nativeGenerate: empty prompt");
|
||||
|
|
|
|||
Loading…
Reference in New Issue