

























@@ -280,6 +280,40 @@ describe("zai provider plugin", () => {
280280expect(capturedPayload).not.toHaveProperty("tool_stream");
281281});
282282283+it("exposes full GLM-5.2 thinking levels while keeping older GLM models binary", async () => {
284+const provider = await registerSingleProviderPlugin(plugin);
285+286+expect(
287+provider.resolveThinkingProfile?.({
288+provider: "zai",
289+modelId: "glm-5.2",
290+reasoning: true,
291+} as never),
292+).toEqual({
293+levels: [
294+{ id: "off", label: "off" },
295+{ id: "low", label: "low" },
296+{ id: "high", label: "high" },
297+{ id: "max", label: "max" },
298+],
299+defaultLevel: "off",
300+});
301+302+expect(
303+provider.resolveThinkingProfile?.({
304+provider: "zai",
305+modelId: "glm-5.1",
306+reasoning: true,
307+} as never),
308+).toEqual({
309+levels: [
310+{ id: "off", label: "off" },
311+{ id: "low", label: "on" },
312+],
313+defaultLevel: "off",
314+});
315+});
316+283317it("maps thinking off to Z.AI thinking disabled", async () => {
284318const provider = await registerSingleProviderPlugin(plugin);
285319let capturedPayload: Record<string, unknown> | undefined;
@@ -312,6 +346,74 @@ describe("zai provider plugin", () => {
312346expect(capturedPayload?.thinking).toEqual({ type: "disabled" });
313347});
314348349+it("keeps minimal thinking enabled for binary GLM models", async () => {
350+const provider = await registerSingleProviderPlugin(plugin);
351+let capturedPayload: Record<string, unknown> | undefined;
352+const baseStreamFn: StreamFn = (model, _context, options) => {
353+const payload: Record<string, unknown> = {};
354+options?.onPayload?.(payload as never, model as never);
355+capturedPayload = payload;
356+return {} as ReturnType<StreamFn>;
357+};
358+359+const wrapped = provider.wrapStreamFn?.({
360+provider: "zai",
361+modelId: "glm-5.1",
362+extraParams: {},
363+thinkingLevel: "minimal",
364+streamFn: baseStreamFn,
365+} as never);
366+367+void wrapped?.(
368+{
369+api: "openai-completions",
370+provider: "zai",
371+id: "glm-5.1",
372+} as Model<"openai-completions">,
373+{ messages: [] } as Context,
374+{},
375+);
376+377+expect(capturedPayload).not.toHaveProperty("thinking");
378+});
379+380+it("maps GLM-5.2 thinking levels to Z.AI reasoning effort", async () => {
381+const provider = await registerSingleProviderPlugin(plugin);
382+const baseStreamFn: StreamFn = (model, _context, options) => {
383+const payload: Record<string, unknown> = {};
384+options?.onPayload?.(payload as never, model as never);
385+return { payload } as never;
386+};
387+388+for (const [thinkingLevel, expectedEffort] of [
389+["low", "high"],
390+["high", "high"],
391+["max", "max"],
392+] as const) {
393+const wrapped = provider.wrapStreamFn?.({
394+provider: "zai",
395+modelId: "glm-5.2",
396+extraParams: {},
397+ thinkingLevel,
398+streamFn: baseStreamFn,
399+} as never);
400+401+const result = wrapped?.(
402+{
403+api: "openai-completions",
404+provider: "zai",
405+id: "glm-5.2",
406+} as Model<"openai-completions">,
407+{ messages: [] } as Context,
408+{},
409+) as unknown as { payload: Record<string, unknown> };
410+411+expect(result.payload.reasoning_effort).toBe(expectedEffort);
412+expect(result.payload).not.toHaveProperty("thinking");
413+expect(result.payload.tool_stream).toBe(true);
414+}
415+});
416+315417it("enables Z.AI preserved thinking only when requested", async () => {
316418const provider = await registerSingleProviderPlugin(plugin);
317419let capturedPayload: Record<string, unknown> | undefined;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。