openclaw/src/agents/pi-embedded-runner/extra-params.zai-tool-stream.test.ts
2026-03-17 07:47:28 +00:00

89 lines
2.3 KiB
TypeScript

import type { Model, SimpleStreamOptions } from "@mariozechner/pi-ai";
import { describe, expect, it, vi } from "vitest";
import type { OpenClawConfig } from "../../config/config.js";
import { runExtraParamsCase } from "./extra-params.test-support.js";
// Mock streamSimple for testing
vi.mock("@mariozechner/pi-ai", () => ({
streamSimple: vi.fn(() => ({
push: vi.fn(),
result: vi.fn(),
})),
}));
type ToolStreamCase = {
applyProvider: string;
applyModelId: string;
model: Model<"openai-completions">;
cfg?: OpenClawConfig;
options?: SimpleStreamOptions;
};
function runToolStreamCase(params: ToolStreamCase) {
return runExtraParamsCase({
applyModelId: params.applyModelId,
applyProvider: params.applyProvider,
cfg: params.cfg,
model: params.model,
options: params.options,
payload: { model: params.model.id, messages: [] },
}).payload as Record<string, unknown>;
}
describe("extra-params: Z.AI tool_stream support", () => {
it("injects tool_stream=true for zai provider by default", () => {
const payload = runToolStreamCase({
applyProvider: "zai",
applyModelId: "glm-5",
model: {
api: "openai-completions",
provider: "zai",
id: "glm-5",
} as Model<"openai-completions">,
});
expect(payload.tool_stream).toBe(true);
});
it("does not inject tool_stream for non-zai providers", () => {
const payload = runToolStreamCase({
applyProvider: "openai",
applyModelId: "gpt-5",
model: {
api: "openai-completions",
provider: "openai",
id: "gpt-5",
} as Model<"openai-completions">,
});
expect(payload).not.toHaveProperty("tool_stream");
});
it("allows disabling tool_stream via params", () => {
const payload = runToolStreamCase({
applyProvider: "zai",
applyModelId: "glm-5",
model: {
api: "openai-completions",
provider: "zai",
id: "glm-5",
} as Model<"openai-completions">,
cfg: {
agents: {
defaults: {
models: {
"zai/glm-5": {
params: {
tool_stream: false,
},
},
},
},
},
},
});
expect(payload).not.toHaveProperty("tool_stream");
});
});