45 lines
1.4 KiB
JavaScript
45 lines
1.4 KiB
JavaScript
const HELPER = [
|
|
"function normalizeLegacyToolSchema(schema) {",
|
|
" if (Array.isArray(schema)) return schema.map((item) => normalizeLegacyToolSchema(item));",
|
|
' if (!schema || typeof schema !== "object") return schema;',
|
|
" const normalized = {};",
|
|
" for (const [key, value] of Object.entries(schema)) {",
|
|
' if (key === "const") {',
|
|
" normalized.enum = [value];",
|
|
" continue;",
|
|
" }",
|
|
" normalized[key] = normalizeLegacyToolSchema(value);",
|
|
" }",
|
|
" return normalized;",
|
|
"}",
|
|
].join("\n");
|
|
|
|
const ORIGINAL =
|
|
' ...(useParameters ? { parameters: tool.parameters } : { parametersJsonSchema: tool.parameters }),';
|
|
const PATCHED = [
|
|
" ...(useParameters",
|
|
" ? { parameters: normalizeLegacyToolSchema(tool.parameters) }",
|
|
" : { parametersJsonSchema: tool.parameters }),",
|
|
].join("\n");
|
|
|
|
export function patchPiGoogleLegacySchemaSource(source) {
|
|
let patched = source;
|
|
|
|
if (patched.includes("function normalizeLegacyToolSchema(schema) {")) {
|
|
return patched;
|
|
}
|
|
|
|
if (!patched.includes(ORIGINAL)) {
|
|
return source;
|
|
}
|
|
|
|
patched = patched.replace(ORIGINAL, PATCHED);
|
|
const marker = "export function convertTools(tools, useParameters = false) {";
|
|
const markerIndex = patched.indexOf(marker);
|
|
if (markerIndex === -1) {
|
|
return source;
|
|
}
|
|
|
|
return `${patched.slice(0, markerIndex)}${HELPER}\n\n${patched.slice(markerIndex)}`;
|
|
}
|