mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 21:00:42 +00:00
74 lines
2.5 KiB
TypeScript
74 lines
2.5 KiB
TypeScript
import {
|
|
createNativeOpenAICodexResponsesModel,
|
|
createNativeOpenAIResponsesModel,
|
|
createParameterFreeTool,
|
|
createPermissiveTool,
|
|
createProxyOpenAIResponsesModel,
|
|
normalizedParameterFreeSchema,
|
|
} from "openclaw/plugin-sdk/agent-runtime-test-contracts";
|
|
import { describe, expect, it } from "vitest";
|
|
import { buildProviderToolCompatFamilyHooks } from "./provider-tools.js";
|
|
|
|
describe("OpenAI-family schema normalization runtime contract", () => {
|
|
const hooks = buildProviderToolCompatFamilyHooks("openai");
|
|
|
|
it("normalizes parameter-free schemas for native OpenAI Responses tools", () => {
|
|
const normalized = hooks.normalizeToolSchemas({
|
|
provider: "openai",
|
|
modelId: "gpt-5.4",
|
|
modelApi: "openai-responses",
|
|
model: createNativeOpenAIResponsesModel() as never,
|
|
tools: [createParameterFreeTool()] as never,
|
|
});
|
|
|
|
expect(normalized[0]?.parameters).toEqual(normalizedParameterFreeSchema());
|
|
});
|
|
|
|
it("normalizes parameter-free schemas for native OpenAI Codex Responses tools", () => {
|
|
const normalized = hooks.normalizeToolSchemas({
|
|
provider: "openai-codex",
|
|
modelId: "gpt-5.4",
|
|
modelApi: "openai-codex-responses",
|
|
model: createNativeOpenAICodexResponsesModel() as never,
|
|
tools: [createParameterFreeTool()] as never,
|
|
});
|
|
|
|
expect(normalized[0]?.parameters).toEqual(normalizedParameterFreeSchema());
|
|
});
|
|
|
|
it("does not apply native strict normalization to proxy-like OpenAI routes", () => {
|
|
const tools = [createParameterFreeTool()] as never;
|
|
const normalized = hooks.normalizeToolSchemas({
|
|
provider: "openai",
|
|
modelId: "custom-gpt",
|
|
modelApi: "openai-responses",
|
|
model: createProxyOpenAIResponsesModel() as never,
|
|
tools,
|
|
});
|
|
|
|
expect(normalized).toBe(tools);
|
|
});
|
|
|
|
it("keeps permissive schemas observable for transport strict:false downgrade", () => {
|
|
const tool = createPermissiveTool();
|
|
const normalized = hooks.normalizeToolSchemas({
|
|
provider: "openai-codex",
|
|
modelId: "gpt-5.4",
|
|
modelApi: "openai-codex-responses",
|
|
model: createNativeOpenAICodexResponsesModel() as never,
|
|
tools: [tool] as never,
|
|
});
|
|
|
|
expect(normalized[0]?.parameters).toEqual(tool.parameters);
|
|
expect(
|
|
hooks.inspectToolSchemas({
|
|
provider: "openai-codex",
|
|
modelId: "gpt-5.4",
|
|
modelApi: "openai-codex-responses",
|
|
model: createNativeOpenAICodexResponsesModel() as never,
|
|
tools: [tool] as never,
|
|
}),
|
|
).toEqual([]);
|
|
});
|
|
});
|