diff --git a/app/src/main/java/com/k2fsa/sherpa/onnx/SummarizePipeline.kt b/app/src/main/java/com/k2fsa/sherpa/onnx/SummarizePipeline.kt index 62f758e..238c1cb 100644 --- a/app/src/main/java/com/k2fsa/sherpa/onnx/SummarizePipeline.kt +++ b/app/src/main/java/com/k2fsa/sherpa/onnx/SummarizePipeline.kt @@ -396,10 +396,12 @@ class SummarizePipeline( maxNewTokens = 900, temperature = 0f, ) var parsed = extractJson(out) - // 空笔记视同失败:小模型吃不透指令时会把输入的空模板原样复读 - // (EMPTY 进 EMPTY 出)。首轮空结果带一次强约束重试再判。 - val emptyEcho = parsed != null && idx == 0 && - resumeNotes == null && notesEntriesEmpty(parsed) + // 空概括回显(EMPTY 进 EMPTY 出):小模型(尤其 MiniCPM5)会把提示词里 + // 的空 schema 原样抄回。2026-09-16 现场 raw(9)={"概括":""}。 + // 注意:extractJson 对空值已判 null,"parsed!=null"式旧探测永远 + // 进不去——改为对原文正则探测,让重试提示词用准确措辞 + val emptyEcho = parsed == null && idx == 0 && resumeNotes == null && + Regex("\"概括\"\\s*:\\s*\"\\s*\"").containsMatchIn(out) if (parsed == null || emptyEcho) { // 一次修复重试:把畸形/空洞输出递回去(仍失败保留旧笔记,计 failed) if (listener.isCancelled()) throw SummarizeCancelledException()