feat(opencode): expose High/Max thinking variants for GLM-5.2 (#32446)

Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
This commit is contained in:
imranshaiedi-byte 2026-06-21 05:59:08 +08:00 committed by GitHub
commit 22cc758b1a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 119 additions and 1 deletions

View file

@ -666,6 +666,9 @@ export function variants(model: Provider.Model): Record<string, Record<string, a
if (!model.capabilities.reasoning) return {}
const id = model.id.toLowerCase()
const glm52 = ["glm-5.2", "glm-5-2", "glm-5p2"].some(
(name) => id.includes(name) || model.api.id.toLowerCase().includes(name),
)
if (
model.api.id.toLowerCase().includes("minimax-m3") &&
["@ai-sdk/anthropic", "@ai-sdk/openai-compatible"].includes(model.api.npm)
@ -677,13 +680,32 @@ export function variants(model: Provider.Model): Record<string, Record<string, a
}
const adaptiveThinkingOmitted = anthropicOmitsThinking(model.api.id)
const adaptiveEfforts = anthropicAdaptiveEfforts(model.api.id)
if (glm52 && model.api.npm === "@openrouter/ai-sdk-provider") {
// OpenRouter maps xhigh to GLM-5.2's native max effort.
return {
high: { reasoning: { effort: "high" } },
xhigh: { reasoning: { effort: "xhigh" } },
}
}
if (glm52 && model.api.npm === "@ai-sdk/openai-compatible") {
return {
high: { reasoningEffort: "high" },
max: { reasoningEffort: "max" },
}
}
if (glm52 && model.api.npm === "@ai-sdk/anthropic") {
return {
high: { effort: "high" },
max: { effort: "max" },
}
}
if (
id.includes("deepseek-chat") ||
id.includes("deepseek-reasoner") ||
id.includes("deepseek-r1") ||
id.includes("deepseek-v3") ||
id.includes("minimax") ||
id.includes("glm") ||
(id.includes("glm") && !glm52) ||
id.includes("kimi") ||
id.includes("k2p") ||
id.includes("qwen") ||

View file

@ -2895,6 +2895,102 @@ describe("ProviderTransform.variants", () => {
expect(result).toEqual({})
})
test("glm-5.2 returns native effort variants for openai-compatible providers", () => {
const model = createMockModel({
id: "zhipuai/glm-5.2",
providerID: "zhipuai",
api: {
id: "glm-5.2",
url: "https://open.bigmodel.cn/api/paas/v4",
npm: "@ai-sdk/openai-compatible",
},
})
expect(ProviderTransform.variants(model)).toEqual({
high: { reasoningEffort: "high" },
max: { reasoningEffort: "max" },
})
})
test("recognizes GLM-5.2 provider model IDs", () => {
for (const id of ["accounts/fireworks/models/glm-5p2", "zai-org-glm-5-2", "umans-glm-5.2"]) {
const model = createMockModel({
id: `test/${id}`,
api: {
id,
url: "https://api.test.com",
npm: "@ai-sdk/openai-compatible",
},
})
expect(ProviderTransform.variants(model)).toEqual({
high: { reasoningEffort: "high" },
max: { reasoningEffort: "max" },
})
}
})
test("recognizes GLM-5.2 from the API ID when the configured model ID is an alias", () => {
const model = createMockModel({
id: "custom/my-glm",
api: {
id: "accounts/fireworks/models/glm-5p2",
url: "https://api.fireworks.ai/inference/v1",
npm: "@ai-sdk/openai-compatible",
},
})
expect(ProviderTransform.variants(model)).toEqual({
high: { reasoningEffort: "high" },
max: { reasoningEffort: "max" },
})
})
test("glm-5.2 returns openrouter effort variants for openrouter", () => {
const model = createMockModel({
id: "openrouter/z-ai/glm-5.2",
providerID: "openrouter",
api: {
id: "z-ai/glm-5.2",
url: "https://openrouter.ai/api/v1",
npm: "@openrouter/ai-sdk-provider",
},
})
expect(ProviderTransform.variants(model)).toEqual({
high: { reasoning: { effort: "high" } },
xhigh: { reasoning: { effort: "xhigh" } },
})
})
test("glm-5.2 returns effort variants for anthropic-compatible providers", () => {
const model = createMockModel({
id: "zai-coding-plan/glm-5.2",
providerID: "zai-coding-plan",
api: {
id: "glm-5.2",
url: "https://api.z.ai/api/anthropic",
npm: "@ai-sdk/anthropic",
},
})
expect(ProviderTransform.variants(model)).toEqual({
high: { effort: "high" },
max: { effort: "max" },
})
})
test("glm-5.2 falls back to provider defaults for other packages", () => {
const model = createMockModel({
id: "test/glm-5.2",
api: {
id: "glm-5.2",
url: "https://api.test.com",
npm: "@ai-sdk/amazon-bedrock",
},
})
expect(ProviderTransform.variants(model)).toEqual({
low: { reasoningConfig: { type: "enabled", maxReasoningEffort: "low" } },
medium: { reasoningConfig: { type: "enabled", maxReasoningEffort: "medium" } },
high: { reasoningConfig: { type: "enabled", maxReasoningEffort: "high" } },
})
})
test("mistral models with reasoning support return variants", () => {
const model = createMockModel({
id: "mistral/mistral-small-latest",