fix: 修复所有超时设置0=禁用不生效的问题
1. 流式超时: baseTimeout=0时被忽略,仍走动态计算120s-600s 2. HTTP超时: ipc.ts中0>0=false导致setHTTPTimeout未调用 + Math.max(5000,ms)阻止0值 3. MCP超时: 同HTTP模式 + Math.max(10000,ms)阻止0值 4. fetchWithTimeout和web_fetch中直接setTimeout在HTTP_TIMEOUT=0时仍触发abort
This commit is contained in:
@@ -1336,12 +1336,21 @@ async function handleThinking(
|
||||
|
||||
const abortController = registerAbortController();
|
||||
|
||||
// ── 流式超时保护 — 动态计算:基础 120s + 上下文 token 数 * 0.5s/1K tokens ──
|
||||
// ── 流式超时保护 — 0=禁用, 正数=自定义, -1/未设置=动态计算 ──
|
||||
const baseTimeout = state.get<number>('streamTimeout', 0);
|
||||
const numCtxForTimeout = getEffectiveNumCtx();
|
||||
const dynamicTimeout = baseTimeout > 0 ? baseTimeout : Math.max(120_000, 120_000 + Math.floor(numCtxForTimeout / 1000) * 500);
|
||||
// 上限 10 分钟,避免极端值
|
||||
const STREAM_TIMEOUT_MS = Math.min(dynamicTimeout, 600_000);
|
||||
let STREAM_TIMEOUT_MS: number;
|
||||
if (baseTimeout === 0) {
|
||||
// 0 = 禁用流式超时
|
||||
STREAM_TIMEOUT_MS = 0;
|
||||
} else if (baseTimeout > 0) {
|
||||
// 用户自定义超时,上限 10 分钟
|
||||
STREAM_TIMEOUT_MS = Math.min(baseTimeout, 600_000);
|
||||
} else {
|
||||
// -1 或未设置 = 动态计算:基础 120s + 上下文 token 数 * 0.5s/1K tokens
|
||||
const dynamicTimeout = Math.max(120_000, 120_000 + Math.floor(numCtxForTimeout / 1000) * 500);
|
||||
STREAM_TIMEOUT_MS = Math.min(dynamicTimeout, 600_000);
|
||||
}
|
||||
|
||||
let totalTimer: ReturnType<typeof setTimeout> | null = null;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user