From 8abad1eb7865277b35232f41e826f2ad943c22f6 Mon Sep 17 00:00:00 2001 From: liwenhao2 Date: Tue, 15 Sep 2026 11:07:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=BC=8F=E5=8F=A5=E6=9C=80=E5=90=8E=E4=B8=80?= =?UTF-8?q?=E9=87=8C:=20=E9=87=8D=E8=AF=95=E9=A2=84=E7=AE=972=E6=AC=A1?= =?UTF-8?q?=E6=B8=A9=E5=BA=A6=E9=80=92=E8=BF=9B0.3=E2=86=920.7(=E8=B7=B3?= =?UTF-8?q?=E8=B4=AA=E5=BF=83=E6=AD=BB=E8=B7=AF)=E3=80=81MISS=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=B8=A6attempt=E3=80=81Start=E9=A2=84=E7=83=AD?= =?UTF-8?q?=E7=BF=BB=E8=AF=91=E5=BC=95=E6=93=8E=E6=B6=88=E9=99=A4=E5=86=B7?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=9C=9F=E5=BC=80=E5=A4=B4=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/k2fsa/sherpa/onnx/MainActivity.kt | 41 ++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt b/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt index ce6c269..d62312c 100644 --- a/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt +++ b/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt @@ -314,7 +314,15 @@ class MainActivity : AppCompatActivity() { private val initialPending = ArrayList>() private var initialBatchTimer: Runnable? = null private val translatedSids = HashSet() // 每槽只翻一次 - private val retriedSids = HashSet() // 失败仅重试一次 + // 失败重试预算:每句最多 2 次,温度递进(0→0.3→0.7),贪心死路可被跳出。 + // 仅在翻译线程读写,无并发。 + private val translateAttempts = HashMap() + + private fun bumpAttempt(sid: Long): Int { + val n = (translateAttempts[sid] ?: 0) + 1 + translateAttempts[sid] = n + return n + } companion object { private val SUMMARY_THREADS = 6 // 空闲时:大核全用 @@ -519,6 +527,15 @@ class MainActivity : AppCompatActivity() { sessionTranscript?.close() sessionTranscript = SessionTranscript.begin(filesDir) } + // 预热翻译引擎:把模型文件读进 OS 页缓存后即释放(每批仍按防污染 + // 协议重建),消除开头几批的冷加载失败 + translateHandler.post { + val e = ensureTranslateEngine() + if (e != null) { + translateEngine = null + runCatching { e.release() } + } + } recordingThread = thread(true) { processSamples() } @@ -2026,18 +2043,21 @@ class MainActivity : AppCompatActivity() { } // 翻译线程执行:直出/编号批 → 逐条质检(空/复读/语言漂移)→ 主线程应用。 - // 生成失败或语言漂移 → 带温度重试一次(每句仅一次,retriedSids 全部在本线程读写)。 + // 生成失败或语言漂移 → 温度递进重试(每句最多 2 次,translateAttempts 仅在本线程读写)。 private fun runTranslateBatch(batch: List>, temp: Float) { val map = translateNumbered( batch.map { Pair(it.first.toString(), it.second) }, temp ) if (map == null || !plausibleTranslations(map.values)) { - Log.i(TAG, "MISS reason=genfail sids=" + - batch.joinToString(",") { it.first.toString() }) - if (temp == 0f) { - val retry = batch.filter { retriedSids.add(it.first) } - if (retry.isNotEmpty()) translateHandler.post { - runTranslateBatch(retry, 0.3f) + val retry = ArrayList>() + for ((sid, src) in batch) { + val att = bumpAttempt(sid) + Log.i(TAG, "MISS sid=" + sid + " reason=genfail attempt=" + att) + if (att <= 2) retry.add(Pair(sid, src)) + } + if (retry.isNotEmpty()) { + translateHandler.post { + runTranslateBatch(retry, if (temp < 0.5f) 0.3f else 0.7f) } } return @@ -2052,8 +2072,9 @@ class MainActivity : AppCompatActivity() { isEcho(src, tr, echoJaccardTh(src)) -> Log.i(TAG, "MISS sid=" + sid + " reason=echo") !targetLangOk(tr) -> { - Log.i(TAG, "MISS sid=" + sid + " reason=langdrift") - if (temp == 0f && retriedSids.add(sid)) drift.add(Pair(sid, src)) + val att = bumpAttempt(sid) + Log.i(TAG, "MISS sid=" + sid + " reason=langdrift attempt=" + att) + if (att <= 2) drift.add(Pair(sid, src)) } else -> good[sid] = tr }