fix(llmExtract): remove unsupported JSON schema properties (#1335)

This commit is contained in:
Gergő Móricz 2025-03-13 20:10:39 +01:00 committed by GitHub
parent 387dd3aa38
commit c3ebfafba7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 53 additions and 1 deletions

View File

@ -29,6 +29,28 @@ describe("Extract tests", () => {
expect(typeof res.data.is_open_source).toBe("boolean"); expect(typeof res.data.is_open_source).toBe("boolean");
expect(res.data.is_open_source).toBe(true); expect(res.data.is_open_source).toBe(true);
}, 60000); }, 60000);
it.concurrent("works with unsupported JSON schema parameters", async () => {
const res = await extract({
urls: ["https://firecrawl.dev"],
schema: {
"type": "object",
"properties": {
"company_name": {
"type": "string",
"pattern": "^[a-zA-Z0-9]+$"
},
},
"required": [
"company_name"
]
},
origin: "api-sdk",
});
expect(res.data).toHaveProperty("company_name");
expect(typeof res.data.company_name).toBe("string")
}, 60000);
} else { } else {
it.concurrent("dummy test", () => { it.concurrent("dummy test", () => {
expect(true).toBe(true); expect(true).toBe(true);

View File

@ -365,7 +365,37 @@ export async function performLLMExtract(
export function removeDefaultProperty(schema: any): any { export function removeDefaultProperty(schema: any): any {
if (typeof schema !== "object" || schema === null) return schema; if (typeof schema !== "object" || schema === null) return schema;
const { default: _, ...rest } = schema; const rest = { ...schema };
// unsupported global keys
delete rest.default;
// unsupported object keys
delete rest.patternProperties;
delete rest.unevaluatedProperties;
delete rest.propertyNames;
delete rest.minProperties;
delete rest.maxProperties;
// unsupported string keys
delete rest.minLength;
delete rest.maxLength;
delete rest.pattern;
delete rest.format;
// unsupported number keys
delete rest.minimum;
delete rest.maximum;
delete rest.multipleOf;
// unsupported array keys
delete rest.unevaluatedItems;
delete rest.contains;
delete rest.minContains;
delete rest.maxContains;
delete rest.minItems;
delete rest.maxItems;
delete rest.uniqueItems;
for (const key in rest) { for (const key in rest) {
if (Array.isArray(rest[key])) { if (Array.isArray(rest[key])) {