fix(models): align minimax and zai defaults (#2445)
Update the coding-agent default model picks for ZAI, Cerebras, and MiniMax so new sessions prefer the current model lineup. Add the missing MiniMax-M2.1-highspeed direct provider entries and normalize MiniMax Anthropic-compatible context limits so the catalog matches the provider's supported model set.
This commit is contained in:
@@ -914,6 +914,46 @@ async function generateModels() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const minimaxDirectProviders = ["minimax", "minimax-cn"] as const;
|
||||||
|
const minimaxAnthropicIds = new Set([
|
||||||
|
"MiniMax-M2",
|
||||||
|
"MiniMax-M2.1",
|
||||||
|
"MiniMax-M2.1-highspeed",
|
||||||
|
"MiniMax-M2.5",
|
||||||
|
"MiniMax-M2.5-highspeed",
|
||||||
|
"MiniMax-M2.7",
|
||||||
|
"MiniMax-M2.7-highspeed",
|
||||||
|
]);
|
||||||
|
|
||||||
|
for (const candidate of allModels) {
|
||||||
|
if (
|
||||||
|
(candidate.provider === "minimax" || candidate.provider === "minimax-cn") &&
|
||||||
|
minimaxAnthropicIds.has(candidate.id)
|
||||||
|
) {
|
||||||
|
candidate.contextWindow = 204800;
|
||||||
|
candidate.maxTokens = 131072;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const provider of minimaxDirectProviders) {
|
||||||
|
const baseModel = allModels.find((m) => m.provider === provider && m.id === "MiniMax-M2.1");
|
||||||
|
if (!baseModel) continue;
|
||||||
|
if (allModels.some((m) => m.provider === provider && m.id === "MiniMax-M2.1-highspeed")) continue;
|
||||||
|
|
||||||
|
allModels.push({
|
||||||
|
...baseModel,
|
||||||
|
id: "MiniMax-M2.1-highspeed",
|
||||||
|
name: "MiniMax-M2.1-highspeed",
|
||||||
|
cost: {
|
||||||
|
...baseModel.cost,
|
||||||
|
input: baseModel.cost.input * 2,
|
||||||
|
output: baseModel.cost.output * 2,
|
||||||
|
},
|
||||||
|
contextWindow: 204800,
|
||||||
|
maxTokens: 131072,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// OpenAI Codex (ChatGPT OAuth) models
|
// OpenAI Codex (ChatGPT OAuth) models
|
||||||
// NOTE: These are not fetched from models.dev; we keep a small, explicit list to avoid aliases.
|
// NOTE: These are not fetched from models.dev; we keep a small, explicit list to avoid aliases.
|
||||||
// Context window is based on observed server limits (400s above ~272k), not marketing numbers.
|
// Context window is based on observed server limits (400s above ~272k), not marketing numbers.
|
||||||
|
|||||||
@@ -4512,8 +4512,8 @@ export const MODELS = {
|
|||||||
cacheRead: 0,
|
cacheRead: 0,
|
||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
contextWindow: 196608,
|
contextWindow: 204800,
|
||||||
maxTokens: 128000,
|
maxTokens: 131072,
|
||||||
} satisfies Model<"anthropic-messages">,
|
} satisfies Model<"anthropic-messages">,
|
||||||
"MiniMax-M2.1": {
|
"MiniMax-M2.1": {
|
||||||
id: "MiniMax-M2.1",
|
id: "MiniMax-M2.1",
|
||||||
@@ -4532,6 +4532,23 @@ export const MODELS = {
|
|||||||
contextWindow: 204800,
|
contextWindow: 204800,
|
||||||
maxTokens: 131072,
|
maxTokens: 131072,
|
||||||
} satisfies Model<"anthropic-messages">,
|
} satisfies Model<"anthropic-messages">,
|
||||||
|
"MiniMax-M2.1-highspeed": {
|
||||||
|
id: "MiniMax-M2.1-highspeed",
|
||||||
|
name: "MiniMax-M2.1-highspeed",
|
||||||
|
api: "anthropic-messages",
|
||||||
|
provider: "minimax",
|
||||||
|
baseUrl: "https://api.minimax.io/anthropic",
|
||||||
|
reasoning: true,
|
||||||
|
input: ["text"],
|
||||||
|
cost: {
|
||||||
|
input: 0.6,
|
||||||
|
output: 2.4,
|
||||||
|
cacheRead: 0,
|
||||||
|
cacheWrite: 0,
|
||||||
|
},
|
||||||
|
contextWindow: 204800,
|
||||||
|
maxTokens: 131072,
|
||||||
|
} satisfies Model<"anthropic-messages">,
|
||||||
"MiniMax-M2.5": {
|
"MiniMax-M2.5": {
|
||||||
id: "MiniMax-M2.5",
|
id: "MiniMax-M2.5",
|
||||||
name: "MiniMax-M2.5",
|
name: "MiniMax-M2.5",
|
||||||
@@ -4616,8 +4633,8 @@ export const MODELS = {
|
|||||||
cacheRead: 0,
|
cacheRead: 0,
|
||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
contextWindow: 196608,
|
contextWindow: 204800,
|
||||||
maxTokens: 128000,
|
maxTokens: 131072,
|
||||||
} satisfies Model<"anthropic-messages">,
|
} satisfies Model<"anthropic-messages">,
|
||||||
"MiniMax-M2.1": {
|
"MiniMax-M2.1": {
|
||||||
id: "MiniMax-M2.1",
|
id: "MiniMax-M2.1",
|
||||||
@@ -4636,6 +4653,23 @@ export const MODELS = {
|
|||||||
contextWindow: 204800,
|
contextWindow: 204800,
|
||||||
maxTokens: 131072,
|
maxTokens: 131072,
|
||||||
} satisfies Model<"anthropic-messages">,
|
} satisfies Model<"anthropic-messages">,
|
||||||
|
"MiniMax-M2.1-highspeed": {
|
||||||
|
id: "MiniMax-M2.1-highspeed",
|
||||||
|
name: "MiniMax-M2.1-highspeed",
|
||||||
|
api: "anthropic-messages",
|
||||||
|
provider: "minimax-cn",
|
||||||
|
baseUrl: "https://api.minimaxi.com/anthropic",
|
||||||
|
reasoning: true,
|
||||||
|
input: ["text"],
|
||||||
|
cost: {
|
||||||
|
input: 0.6,
|
||||||
|
output: 2.4,
|
||||||
|
cacheRead: 0,
|
||||||
|
cacheWrite: 0,
|
||||||
|
},
|
||||||
|
contextWindow: 204800,
|
||||||
|
maxTokens: 131072,
|
||||||
|
} satisfies Model<"anthropic-messages">,
|
||||||
"MiniMax-M2.5": {
|
"MiniMax-M2.5": {
|
||||||
id: "MiniMax-M2.5",
|
id: "MiniMax-M2.5",
|
||||||
name: "MiniMax-M2.5",
|
name: "MiniMax-M2.5",
|
||||||
|
|||||||
@@ -26,11 +26,11 @@ export const defaultModelPerProvider: Record<KnownProvider, string> = {
|
|||||||
"vercel-ai-gateway": "anthropic/claude-opus-4-6",
|
"vercel-ai-gateway": "anthropic/claude-opus-4-6",
|
||||||
xai: "grok-4-fast-non-reasoning",
|
xai: "grok-4-fast-non-reasoning",
|
||||||
groq: "openai/gpt-oss-120b",
|
groq: "openai/gpt-oss-120b",
|
||||||
cerebras: "zai-glm-4.6",
|
cerebras: "zai-glm-4.7",
|
||||||
zai: "glm-4.6",
|
zai: "glm-5",
|
||||||
mistral: "devstral-medium-latest",
|
mistral: "devstral-medium-latest",
|
||||||
minimax: "MiniMax-M2.1",
|
minimax: "MiniMax-M2.7",
|
||||||
"minimax-cn": "MiniMax-M2.1",
|
"minimax-cn": "MiniMax-M2.7",
|
||||||
huggingface: "moonshotai/Kimi-K2.5",
|
huggingface: "moonshotai/Kimi-K2.5",
|
||||||
opencode: "claude-opus-4-6",
|
opencode: "claude-opus-4-6",
|
||||||
"opencode-go": "kimi-k2.5",
|
"opencode-go": "kimi-k2.5",
|
||||||
|
|||||||
@@ -378,6 +378,13 @@ describe("default model selection", () => {
|
|||||||
expect(defaultModelPerProvider["openai-codex"]).toBe("gpt-5.4");
|
expect(defaultModelPerProvider["openai-codex"]).toBe("gpt-5.4");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("zai, minimax, and cerebras defaults track current models", () => {
|
||||||
|
expect(defaultModelPerProvider.zai).toBe("glm-5");
|
||||||
|
expect(defaultModelPerProvider.minimax).toBe("MiniMax-M2.7");
|
||||||
|
expect(defaultModelPerProvider["minimax-cn"]).toBe("MiniMax-M2.7");
|
||||||
|
expect(defaultModelPerProvider.cerebras).toBe("zai-glm-4.7");
|
||||||
|
});
|
||||||
|
|
||||||
test("ai-gateway default is opus 4.6", () => {
|
test("ai-gateway default is opus 4.6", () => {
|
||||||
expect(defaultModelPerProvider["vercel-ai-gateway"]).toBe("anthropic/claude-opus-4-6");
|
expect(defaultModelPerProvider["vercel-ai-gateway"]).toBe("anthropic/claude-opus-4-6");
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user