jorel
Version:
A unified wrapper for working with LLMs from multiple providers, including streams, images, documents & automatic tool use.
37 lines (36 loc) • 1.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.zodSchemaToJsonSchema = void 0;
const zod_1 = require("openai/helpers/zod");
const zod_2 = require("zod");
const zod_to_json_schema_1 = require("zod-to-json-schema");
const object_utils_1 = require("./object-utils");
function isZodV4(zodObject) {
return "_zod" in zodObject;
}
const zodSchemaToJsonSchema = (zodObject, target = "jsonSchema7", name = "response") => {
if (target === "openAi") {
return (0, zod_1.zodTextFormat)(zodObject, name).schema;
}
return deepClean(isZodV4(zodObject)
? (0, zod_2.toJSONSchema)(zodObject, {
target: "draft-7",
})
: (0, zod_to_json_schema_1.zodToJsonSchema)(zodObject, {
target: "jsonSchema7",
}), ["additionalProperties"]);
};
exports.zodSchemaToJsonSchema = zodSchemaToJsonSchema;
function deepClean(schema, keysToRemove) {
if (Array.isArray(schema)) {
return schema.map((item) => deepClean(item, keysToRemove));
}
else if (typeof schema === "object" && schema !== null) {
const cleaned = (0, object_utils_1.omit)(schema, keysToRemove);
for (const key of Object.keys(cleaned)) {
cleaned[key] = deepClean(cleaned[key], keysToRemove);
}
return cleaned;
}
return schema;
}