diff --git a/src/agents/context.lookup.test.ts b/src/agents/context.lookup.test.ts index bcbcd3a9f83..8db58dce89d 100644 --- a/src/agents/context.lookup.test.ts +++ b/src/agents/context.lookup.test.ts @@ -366,4 +366,19 @@ describe("lookupContextTokens", () => { }); expect(result).toBe(1_048_576); }); + + it("resolveContextTokensForModel normalizes explicit provider aliases before config lookup", async () => { + mockDiscoveryDeps([]); + + const cfg = createContextOverrideConfig("z.ai", "glm-5", 256_000); + const { resolveContextTokensForModel } = await import("./context.js"); + await flushAsyncWarmup(); + + const result = resolveContextTokensForModel({ + cfg: cfg as never, + provider: "z-ai", + model: "glm-5", + }); + expect(result).toBe(256_000); + }); }); diff --git a/src/agents/context.ts b/src/agents/context.ts index 695427936d6..7a589d4d7d9 100644 --- a/src/agents/context.ts +++ b/src/agents/context.ts @@ -292,9 +292,11 @@ function resolveProviderModelRef(params: { } const providerRaw = params.provider?.trim(); if (providerRaw) { - // Keep the exact (lowercased) provider key; callers that need the canonical - // alias (e.g. cache key construction) apply normalizeProviderId explicitly. - return { provider: providerRaw.toLowerCase(), model: modelRaw }; + const provider = normalizeProviderId(providerRaw); + if (!provider) { + return undefined; + } + return { provider, model: modelRaw }; } const slash = modelRaw.indexOf("/"); if (slash <= 0) {