Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions packages/types/src/providers/zai.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import { ZaiApiLine } from "../provider-settings.js"
// https://docs.z.ai/guides/llm/glm-4-32b-0414-128k
// https://docs.z.ai/guides/llm/glm-4.5
// https://docs.z.ai/guides/llm/glm-4.6
// https://docs.z.ai/guides/llm/glm-4.7
// https://docs.z.ai/guides/capabilities/thinking-mode
// https://docs.z.ai/guides/overview/pricing
// https://bigmodel.cn/pricing

Expand Down Expand Up @@ -107,6 +109,21 @@ export const internationalZAiModels = {
description:
"GLM-4.6 is Zhipu's newest model with an extended context window of up to 200k tokens, providing enhanced capabilities for processing longer documents and conversations.",
},
"glm-4.7": {
maxTokens: 98_304,
contextWindow: 200_000,
supportsImages: false,
supportsPromptCache: true,
supportsNativeTools: true,
defaultToolProtocol: "native",
preserveReasoning: true,
inputPrice: 0.6,
outputPrice: 2.2,
cacheWritesPrice: 0,
cacheReadsPrice: 0.11,
description:
"GLM-4.7 is Zhipu's latest model with preserved thinking capabilities, allowing reasoning content to be retained across turns for improved coherence and cache efficiency.",
},
"glm-4-32b-0414-128k": {
maxTokens: 98_304,
contextWindow: 131_072,
Expand Down Expand Up @@ -221,6 +238,21 @@ export const mainlandZAiModels = {
description:
"GLM-4.6 is Zhipu's newest model with an extended context window of up to 200k tokens, providing enhanced capabilities for processing longer documents and conversations.",
},
"glm-4.7": {
maxTokens: 98_304,
contextWindow: 204_800,
supportsImages: false,
supportsPromptCache: true,
supportsNativeTools: true,
defaultToolProtocol: "native",
preserveReasoning: true,
inputPrice: 0.29,
outputPrice: 1.14,
cacheWritesPrice: 0,
cacheReadsPrice: 0.057,
description:
"GLM-4.7 is Zhipu's latest model with preserved thinking capabilities, allowing reasoning content to be retained across turns for improved coherence and cache efficiency.",
},
} as const satisfies Record<string, ModelInfo>

export const ZAI_DEFAULT_TEMPERATURE = 0.6
Expand Down
35 changes: 35 additions & 0 deletions src/api/providers/__tests__/zai.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { Anthropic } from "@anthropic-ai/sdk"
import {
type InternationalZAiModelId,
type MainlandZAiModelId,
type ModelInfo,
internationalZAiDefaultModelId,
mainlandZAiDefaultModelId,
internationalZAiModels,
Expand Down Expand Up @@ -96,6 +97,23 @@ describe("ZAiHandler", () => {
expect(model.info.maxTokens).toBe(16_384)
expect(model.info.contextWindow).toBe(131_072)
})

it("should return GLM-4.7 international model with preserved thinking support", () => {
const testModelId: InternationalZAiModelId = "glm-4.7"
const handlerWithModel = new ZAiHandler({
apiModelId: testModelId,
zaiApiKey: "test-zai-api-key",
zaiApiLine: "international_coding",
})
const model = handlerWithModel.getModel()
expect(model.id).toBe(testModelId)
expect(model.info).toEqual(internationalZAiModels[testModelId])
// GLM-4.7 should have preserveReasoning enabled for interleaved thinking mode
// This allows reasoning_content to be passed back during tool call continuation
expect((model.info as ModelInfo).preserveReasoning).toBe(true)
expect(model.info.contextWindow).toBe(200_000)
expect(model.info.supportsNativeTools).toBe(true)
})
})

describe("China Z AI", () => {
Expand Down Expand Up @@ -161,6 +179,23 @@ describe("ZAiHandler", () => {
expect(model.info.maxTokens).toBe(16_384)
expect(model.info.contextWindow).toBe(131_072)
})

it("should return GLM-4.7 China model with preserved thinking support", () => {
const testModelId: MainlandZAiModelId = "glm-4.7"
const handlerWithModel = new ZAiHandler({
apiModelId: testModelId,
zaiApiKey: "test-zai-api-key",
zaiApiLine: "china_coding",
})
const model = handlerWithModel.getModel()
expect(model.id).toBe(testModelId)
expect(model.info).toEqual(mainlandZAiModels[testModelId])
// GLM-4.7 should have preserveReasoning enabled for interleaved thinking mode
// This allows reasoning_content to be passed back during tool call continuation
expect((model.info as ModelInfo).preserveReasoning).toBe(true)
expect(model.info.contextWindow).toBe(204_800)
expect(model.info.supportsNativeTools).toBe(true)
})
})

describe("International API", () => {
Expand Down
Loading