mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-12 01:31:08 +00:00
57 lines
1.6 KiB
TypeScript
57 lines
1.6 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
applyXaiModelCompat,
|
|
buildProviderToolCompatFamilyHooks,
|
|
inspectGeminiToolSchemas,
|
|
normalizeGeminiToolSchemas,
|
|
resolveXaiModelCompatPatch,
|
|
} from "./provider-tools.js";
|
|
|
|
describe("buildProviderToolCompatFamilyHooks", () => {
|
|
it("covers the tool compat family matrix", () => {
|
|
const cases = [
|
|
{
|
|
family: "gemini" as const,
|
|
normalizeToolSchemas: normalizeGeminiToolSchemas,
|
|
inspectToolSchemas: inspectGeminiToolSchemas,
|
|
},
|
|
];
|
|
|
|
for (const testCase of cases) {
|
|
const hooks = buildProviderToolCompatFamilyHooks(testCase.family);
|
|
|
|
expect(hooks.normalizeToolSchemas).toBe(testCase.normalizeToolSchemas);
|
|
expect(hooks.inspectToolSchemas).toBe(testCase.inspectToolSchemas);
|
|
}
|
|
});
|
|
|
|
it("covers the shared xAI tool compat patch", () => {
|
|
const patch = resolveXaiModelCompatPatch();
|
|
|
|
expect(patch).toMatchObject({
|
|
toolSchemaProfile: "xai",
|
|
nativeWebSearchTool: true,
|
|
toolCallArgumentsEncoding: "html-entities",
|
|
});
|
|
expect(patch.unsupportedToolSchemaKeywords).toEqual(
|
|
expect.arrayContaining(["minLength", "maxLength", "minItems", "maxItems"]),
|
|
);
|
|
|
|
expect(
|
|
applyXaiModelCompat({
|
|
id: "grok-4",
|
|
compat: {
|
|
supportsUsageInStreaming: true,
|
|
},
|
|
}),
|
|
).toMatchObject({
|
|
compat: {
|
|
supportsUsageInStreaming: true,
|
|
toolSchemaProfile: "xai",
|
|
nativeWebSearchTool: true,
|
|
toolCallArgumentsEncoding: "html-entities",
|
|
},
|
|
});
|
|
});
|
|
});
|