fix(provider-registry): add correct contextLength to theoldllm models (#4184)

Integrated into release/v3.8.29 — correct contextLength for theoldllm models. Adds an entry-level defaultContextLength (200000) + per-model overrides (GPT-5.4 400K, Gemini 3 Flash/Pro 1M, Claude/DeepSeek 200K) so the models report their real context windows instead of null. Thanks @herjarsa! On review we added a regression test (the resolved window was null before this fix), satisfying the PR Test Policy gate. 4/4 tests + eslint + prettier clean.
This commit is contained in:
Hernan Javier Ardila Sanchez
2026-06-18 19:28:12 +02:00
committed by GitHub
parent 89cd954322
commit d4e92db7a7
2 changed files with 65 additions and 7 deletions

View File

@@ -10,15 +10,16 @@ export const theoldllmProvider: RegistryEntry = {
baseUrls: ["https://theoldllm.vercel.app/api/chatgpt"],
authType: "none",
authHeader: "none",
defaultContextLength: 200000,
models: [
{ id: "GPT_5_4", name: "GPT-5.4 (The Old LLM 🆓)" },
{ id: "GPT_5_4", name: "GPT-5.4 (The Old LLM 🆓)", contextLength: 400000 },
{ id: "GPT_4o", name: "GPT-4o (The Old LLM 🆓)" },
{ id: "claude_opus_4", name: "Claude Opus 4 (The Old LLM 🆓)" },
{ id: "claude_sonnet_4", name: "Claude Sonnet 4 (The Old LLM 🆓)" },
{ id: "claude_haiku_3_5", name: "Claude Haiku 3.5 (The Old LLM 🆓)" },
{ id: "deepseek_v4", name: "DeepSeek V4 (The Old LLM 🆓)" },
{ id: "gemini_3_flash", name: "Gemini 3 Flash (The Old LLM 🆓)" },
{ id: "gemini_3_pro", name: "Gemini 3 Pro (The Old LLM 🆓)" },
{ id: "claude_opus_4", name: "Claude Opus 4 (The Old LLM 🆓)", contextLength: 200000 },
{ id: "claude_sonnet_4", name: "Claude Sonnet 4 (The Old LLM 🆓)", contextLength: 200000 },
{ id: "claude_haiku_3_5", name: "Claude Haiku 3.5 (The Old LLM 🆓)", contextLength: 200000 },
{ id: "deepseek_v4", name: "DeepSeek V4 (The Old LLM 🆓)", contextLength: 200000 },
{ id: "gemini_3_flash", name: "Gemini 3 Flash (The Old LLM 🆓)", contextLength: 1000000 },
{ id: "gemini_3_pro", name: "Gemini 3 Pro (The Old LLM 🆓)", contextLength: 1000000 },
],
passthroughModels: true,
};

View File

@@ -0,0 +1,57 @@
import test from "node:test";
import assert from "node:assert/strict";
// Regression guard for #4184.
//
// The theoldllm provider (free OpenAI-compatible upstream) listed its models
// with NO contextLength, so getResolvedModelCapabilities resolved their context
// window to `null` and the dashboard/catalog reported no usable window. #4184
// adds an entry-level `defaultContextLength` plus per-model `contextLength`
// overrides reflecting each upstream model's real window. This test asserts both
// the registry data (source of truth) and the resolved context window for the
// models that carry an explicit override — the latter would resolve to `null`
// on the pre-#4184 registry, so it fails without the fix.
const { getRegistryEntry } = await import("../../open-sse/config/providerRegistry.ts");
const { getResolvedModelCapabilities } = await import("../../src/lib/modelCapabilities.ts");
function model(id: string) {
const entry = getRegistryEntry("theoldllm");
assert.ok(entry, "theoldllm registry entry must exist");
return (entry.models ?? []).find((m) => m.id === id);
}
test("#4184 theoldllm entry declares a 200000 defaultContextLength", () => {
const entry = getRegistryEntry("theoldllm");
assert.ok(entry, "theoldllm registry entry must exist");
assert.equal(entry.defaultContextLength, 200000);
});
test("#4184 per-model contextLength overrides match each upstream window", () => {
assert.equal(model("GPT_5_4")?.contextLength, 400000, "GPT-5.4 window is 400K");
assert.equal(model("gemini_3_flash")?.contextLength, 1000000, "Gemini 3 Flash window is 1M");
assert.equal(model("gemini_3_pro")?.contextLength, 1000000, "Gemini 3 Pro window is 1M");
for (const id of ["claude_opus_4", "claude_sonnet_4", "claude_haiku_3_5", "deepseek_v4"]) {
assert.equal(model(id)?.contextLength, 200000, `${id} window is 200K`);
}
});
test("#4184 GPT_4o carries no explicit contextLength (relies on defaultContextLength)", () => {
// Intentionally left to the entry default — documents the fallback contract so a
// later edit that removes defaultContextLength is caught by the assertion above.
assert.equal(model("GPT_4o")?.contextLength, undefined);
});
test("#4184 resolved context window reflects the override (null before the fix)", () => {
assert.equal(
getResolvedModelCapabilities({ provider: "theoldllm", model: "GPT_5_4" }).contextWindow,
400000
);
assert.equal(
getResolvedModelCapabilities({ provider: "theoldllm", model: "gemini_3_pro" }).contextWindow,
1000000
);
assert.equal(
getResolvedModelCapabilities({ provider: "theoldllm", model: "claude_opus_4" }).contextWindow,
200000
);
});