diff --git a/src/agents/context-window-guard.e2e.test.ts b/src/agents/context-window-guard.e2e.test.ts index adabb92d9c6..afc6731f496 100644 --- a/src/agents/context-window-guard.e2e.test.ts +++ b/src/agents/context-window-guard.e2e.test.ts @@ -142,6 +142,43 @@ describe("context-window-guard", () => { expect(guard.shouldBlock).toBe(false); }); + it("does not warn when context window is explicitly configured via modelsConfig", () => { + const cfg = { + models: { + providers: { + ollama: { + baseUrl: "http://localhost:11434/v1", + apiKey: "x", + models: [ + { + id: "qwen2.5:7b-2k", + name: "Qwen 2.5 7B 2k", + reasoning: false, + input: ["text"], + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, + contextWindow: 2_048, + maxTokens: 2_048, + }, + ], + }, + }, + }, + } satisfies OpenClawConfig; + + const info = resolveContextWindowInfo({ + cfg, + provider: "ollama", + modelId: "qwen2.5:7b-2k", + modelContextWindow: undefined, + defaultTokens: 200_000, + }); + const guard = evaluateContextWindowGuard({ info }); + expect(info.source).toBe("modelsConfig"); + expect(guard.tokens).toBe(2_048); + expect(guard.shouldWarn).toBe(false); + expect(guard.shouldBlock).toBe(true); + }); + it("exports thresholds as expected", () => { expect(CONTEXT_WINDOW_HARD_MIN_TOKENS).toBe(1_024); expect(CONTEXT_WINDOW_WARN_BELOW_TOKENS).toBe(32_000); diff --git a/src/agents/context-window-guard.ts b/src/agents/context-window-guard.ts index f908986d3c1..aee6f3fc4f2 100644 --- a/src/agents/context-window-guard.ts +++ b/src/agents/context-window-guard.ts @@ -68,7 +68,7 @@ export function evaluateContextWindowGuard(params: { return { ...params.info, tokens, - shouldWarn: tokens > 0 && tokens < warnBelow, + shouldWarn: tokens > 0 && tokens < warnBelow && params.info.source !== "modelsConfig", shouldBlock: tokens > 0 && tokens < hardMin, }; }