fix(ai): prevent removed xAI models regenerating, closes #6736

This commit is contained in:
Armin Ronacher
2026-07-16 20:07:36 +02:00
parent 78ff249436
commit c1b7856e26
11 changed files with 41 additions and 160 deletions
+1 -1
View File
@@ -262,7 +262,7 @@ describe("Context overflow error handling", () => {
// =============================================================================
describe.skipIf(!process.env.XAI_API_KEY)("xAI", () => {
it("grok-3-fast - should detect overflow via isContextOverflow", async () => {
it("grok-4.3 - should detect overflow via isContextOverflow", async () => {
const model = getModel("xai", "grok-4.3");
const result = await testContextOverflow(model, process.env.XAI_API_KEY!);
logResult(result);
@@ -79,7 +79,7 @@ const PROVIDER_MODEL_PAIRS: ProviderModelPair[] = [
label: "bedrock-claude-sonnet-4-5",
},
// xAI
{ provider: "xai", model: "grok-code-fast-1", label: "xai-grok-code-fast-1" },
{ provider: "xai", model: "grok-4.3", label: "xai-grok-4.3" },
// Cerebras
{ provider: "cerebras", model: "zai-glm-4.7", label: "cerebras-zai-glm-4.7" },
// Cloudflare Workers AI
+1 -1
View File
@@ -542,7 +542,7 @@ describe("Generate E2E Tests", () => {
});
});
describe.skipIf(!process.env.XAI_API_KEY)("xAI Provider (grok-code-fast-1 via OpenAI Completions)", () => {
describe.skipIf(!process.env.XAI_API_KEY)("xAI Provider (grok-4.3 via OpenAI Completions)", () => {
const llm = getModel("xai", "grok-4.3");
it("should complete basic text generation", { retry: 3 }, async () => {
+9 -13
View File
@@ -244,22 +244,18 @@ describe("totalTokens field", () => {
// =========================================================================
describe.skipIf(!process.env.XAI_API_KEY)("xAI", () => {
it(
"grok-3-fast - should return totalTokens equal to sum of components",
{ retry: 3, timeout: 60000 },
async () => {
const llm = getModel("xai", "grok-4.3");
it("grok-4.3 - should return totalTokens equal to sum of components", { retry: 3, timeout: 60000 }, async () => {
const llm = getModel("xai", "grok-4.3");
console.log(`\nxAI / ${llm.id}:`);
const { first, second } = await testTotalTokensWithCache(llm, { apiKey: process.env.XAI_API_KEY });
console.log(`\nxAI / ${llm.id}:`);
const { first, second } = await testTotalTokensWithCache(llm, { apiKey: process.env.XAI_API_KEY });
logUsage("First request", first);
logUsage("Second request", second);
logUsage("First request", first);
logUsage("Second request", second);
assertTotalTokensEqualsComponents(first);
assertTotalTokensEqualsComponents(second);
},
);
assertTotalTokensEqualsComponents(first);
assertTotalTokensEqualsComponents(second);
});
});
// =========================================================================
+12
View File
@@ -60,6 +60,18 @@ describe("xAI Responses provider", () => {
vi.restoreAllMocks();
});
it("excludes retired and redundant models from the built-in catalog", () => {
for (const modelId of [
"grok-3",
"grok-3-fast",
"grok-4.20-0309-non-reasoning",
"grok-4.20-0309-reasoning",
"grok-code-fast-1",
]) {
expect(Object.keys(XAI_MODELS)).not.toContain(modelId);
}
});
it("uses Responses with low/medium/high efforts only for Grok 4.5", () => {
expect(XAI_MODELS["grok-4.5"].api).toBe("openai-responses");
expect(getSupportedThinkingLevels(XAI_MODELS["grok-4.5"])).toEqual(["low", "medium", "high"]);