fix(gguf_server): fail-closed on null logprob / empty probs from llama-server

#3

背景

2026-10-05 实证:StartLux-Decision-27B 在「双问并发(disclosed+supports)」时必然失败,
报 TypeError: must be real number, not NoneType @ gguf_server.py:63。

根因

上游 llama-server 在失败态返回 top_logprobs 带 logprob: null(或无 probs)。
_letter_logprobs 不区分该失败态,[got[t] ...] 中出现 None,_logits 的
torch.tensor(...) 裸崩。单问各自均 PASS,故不是内容/长度/语言/配额问题。

改动

  • _letter_logprobs:rows 为空 → 换更大 n_probs 重试;目标字母 logprob 为 null → 也视为失败重试。
  • _logits:末尾 fail-closed 汇总 null 数并抛结构化 RuntimeError(指向 llama-server.log / SD27B_DIAG)。

影响面

仅改失败处理,不改推理数值。补丁已 py_compile 通过。

验证

Space 侧已用等效手段(GGUFDecision workers=4→1 串行化)消除并发争用,双问行判定 SUCCESS。
本 PR 的守卫使错误可读性更佳,非恢复必需。

Ready to merge
This branch is ready to get merged automatically.

Sign up or log in to comment