fix: llm_client按OCG-Router文档——max_tokens默认None不写入payload(推理模型烧光根因),timeout150→180

This commit is contained in:
xxm
2026-08-17 11:47:07 +08:00
parent cc45f604f5
commit ff39dbcfa9
+13 -8
View File
@@ -215,8 +215,13 @@ def gateway_alive(timeout=5):
return False
def call_llm(prompt, model=None, max_tokens=4096, timeout=150,
def call_llm(prompt, model=None, max_tokens=None, timeout=180,
retries=1, backoff=20, system=None, concurrent=False):
# 2026-08-17 OCG-Router文档对齐:
# max_tokens 默认 None=不写入 payloaddeepseek-v4-flash 是推理模型,指定 max_tokens
# 会被 reasoning tokens 烧光 → finish=length 空输出。不指定用模型默认 1M 上下文)。
# timeout 150→180(文档普通请求建议)。
# retries/backoff 保持 1/20:6 通道链下多重试=疯狂重试(文档禁止项),20s 退避防限流。
"""调用 LLMOCG 直连优先,hermes gateway 兜底。带重试和结构化日志。
Args:
@@ -235,18 +240,18 @@ def call_llm(prompt, model=None, max_tokens=4096, timeout=150,
永远不抛异常到调用方。
"""
model_name = model or REASSESS_MODEL
# OCG/deepseek 对过小 max_tokens 会短路返回空(2026-07-22 实测 max_tokens=64 必空)
if max_tokens < 512:
# 仅显式传入时才钳制下限(防过小短路,2026-07-22 实测 max_tokens=64 必空)
# None = 不指定(遵循文档:推理模型不设上限)
if max_tokens is not None and max_tokens < 512:
max_tokens = 512
messages = []
if system:
messages.append({"role": "system", "content": system})
messages.append({"role": "user", "content": prompt})
payload = json.dumps({
"model": model_name,
"messages": messages,
"max_tokens": max_tokens,
}).encode()
_req = {"model": model_name, "messages": messages}
if max_tokens is not None:
_req["max_tokens"] = max_tokens
payload = json.dumps(_req).encode()
# ── 构建通道列表:SenseNova(快,同款model) → OCG路由代理(本地,自动选key) → key池直连 → gateway 兜底 ──
# 2026-08-13 老莫修复 ocg_router bug 后,路由代理作为 OCG 主通道(自动选最空闲key+故障冷却)。