diff --git a/packages/kbot/dist-in/zod_schema.js b/packages/kbot/dist-in/zod_schema.js index 77544a05..828a51f2 100644 --- a/packages/kbot/dist-in/zod_schema.js +++ b/packages/kbot/dist-in/zod_schema.js @@ -158,29 +158,48 @@ export const OptionsSchema = (opts) => { .optional() .default(false) .describe('Dry run - only write out parameters without making API calls')) - .add('format', z.string().optional().transform((val) => { - try { - let schema; - // Check if the string is a file path - if (exists(val) && val.endsWith('.json')) { - const content = readFS(val); - schema = JSON.parse(content.toString()); + .add('format', z.union([ + z.string().transform((val) => { + try { + // Check if the string is a file path + if (exists(val) && val.endsWith('.json')) { + const content = readFS(val); + const schema = JSON.parse(content.toString()); + const zodSchemaStr = jsonSchemaToZod(schema); + // Evaluate the string to get the actual Zod schema + const zodSchema = eval(`(${zodSchemaStr})`); + return zodResponseFormat(zodSchema, "format"); + } + else { + // Try parsing as JSON schema first + try { + const schema = JSON.parse(val); + const zodSchemaStr = jsonSchemaToZod(schema); + const zodSchema = eval(`(${zodSchemaStr})`); + return zodResponseFormat(zodSchema, "format"); + } + catch { + // If not JSON, try evaluating as Zod schema directly + const zodSchema = eval(`(${val})`); + return zodResponseFormat(zodSchema, "format"); + } + } } - else { - schema = JSON.parse(val); + catch (e) { + console.error(`Error parsing format: ${e}`); + return null; + } + }), + z.any().transform((val) => { + // If it's already a Zod schema, use it directly + if (val && typeof val === 'object' && 'parse' in val) { + return zodResponseFormat(val, "format"); } - const zodSchemaStr = jsonSchemaToZod(schema); - // Evaluate the string to get the actual Zod schema - const zodSchema = eval(`(${zodSchemaStr})`); - return zodResponseFormat(zodSchema, "format"); - } - catch (e) { - console.error(`Error parsing format: ${e}`); return null; - } - }) + }) + ]) .optional() - .describe('Zod schema for structured outputs. Can be a Zod schema, a JSON schema string, or a path to a JSON file.')); + .describe('Format for structured outputs. Can be a Zod schema, a Zod schema string, a JSON schema string, or a path to a JSON file.')); return schemaMap.root() .passthrough() .describe('IKBotOptions'); @@ -194,4 +213,4 @@ export const schemas = () => { write([OptionsSchema()], 'schema.json', 'kbot', {}); writeFS('schema_ui.json', schemaMap.getUISchema()); }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3NjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy96b2Rfc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFDdkIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUE7QUFDakMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFBO0FBQ3pCLE9BQU8sR0FBRyxNQUFNLFNBQVMsQ0FBQTtBQUN6QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNuRixPQUFPLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxJQUFJLElBQUksT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDcEQsT0FBTyxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUV0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFckYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3NjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy96b2Rfc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFDdkIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUE7QUFDakMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFBO0FBQ3pCLE9BQU8sR0FBRyxNQUFNLFNBQVMsQ0FBQTtBQUN6QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNuRixPQUFPLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxJQUFJLElBQUksT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDcEQsT0FBTyxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUV0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFckYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVB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 \ No newline at end of file diff --git a/packages/kbot/dist-in/zod_types.d.ts b/packages/kbot/dist-in/zod_types.d.ts index db6b0d21..f1c47495 100644 --- a/packages/kbot/dist-in/zod_types.d.ts +++ b/packages/kbot/dist-in/zod_types.d.ts @@ -427,6 +427,6 @@ export interface IKBotOptions { filters?: (string | ("JSON" | "JSONUnescape" | "JSONPretty" | "AlphaSort" | "code" | "JSONParse" | "trim")[] | string[] | ((...args_0: unknown[]) => unknown)[]); /** Dry run - only write out parameters without making API calls */ dry?: (boolean | string); - /** Zod schema for structured outputs. Can be a Zod schema, a JSON schema string, or a path to a JSON file. */ - format?: (string | undefined) | undefined; + /** Format for structured outputs. Can be a Zod schema, a Zod schema string, a JSON schema string, or a path to a JSON file. */ + format?: (string | any) | undefined; } diff --git a/packages/kbot/schema.json b/packages/kbot/schema.json index c2befbe4..299d9285 100644 --- a/packages/kbot/schema.json +++ b/packages/kbot/schema.json @@ -188,8 +188,13 @@ "description": "Dry run - only write out parameters without making API calls" }, "format": { - "type": "string", - "description": "Zod schema for structured outputs. Can be a Zod schema, a JSON schema string, or a path to a JSON file." + "anyOf": [ + { + "type": "string" + }, + {} + ], + "description": "Format for structured outputs. Can be a Zod schema, a Zod schema string, a JSON schema string, or a path to a JSON file." } }, "additionalProperties": true, diff --git a/packages/kbot/schema_ui.json b/packages/kbot/schema_ui.json index 2d4c4d88..06c8e0f9 100644 --- a/packages/kbot/schema_ui.json +++ b/packages/kbot/schema_ui.json @@ -127,7 +127,7 @@ "ui:placeholder": false }, "format": { - "ui:description": "Zod schema for structured outputs. Can be a Zod schema, a JSON schema string, or a path to a JSON file.", + "ui:description": "Format for structured outputs. Can be a Zod schema, a Zod schema string, a JSON schema string, or a path to a JSON file.", "ui:title": "Format" } } \ No newline at end of file diff --git a/packages/kbot/src/zod_schema.ts b/packages/kbot/src/zod_schema.ts index da3af02d..6a934d54 100644 --- a/packages/kbot/src/zod_schema.ts +++ b/packages/kbot/src/zod_schema.ts @@ -248,27 +248,45 @@ export const OptionsSchema = (opts?: any): any => { ) .add( 'format', - z.string().optional().transform((val) => { - try { - let schema; - // Check if the string is a file path - if (exists(val) && val.endsWith('.json')) { - const content = readFS(val); - schema = JSON.parse(content.toString()); - } else { - schema = JSON.parse(val); + z.union([ + z.string().transform((val) => { + try { + // Check if the string is a file path + if (exists(val) && val.endsWith('.json')) { + const content = readFS(val); + const schema = JSON.parse(content.toString()); + const zodSchemaStr = jsonSchemaToZod(schema); + // Evaluate the string to get the actual Zod schema + const zodSchema = eval(`(${zodSchemaStr})`); + return zodResponseFormat(zodSchema, "format"); + } else { + // Try parsing as JSON schema first + try { + const schema = JSON.parse(val); + const zodSchemaStr = jsonSchemaToZod(schema); + const zodSchema = eval(`(${zodSchemaStr})`); + return zodResponseFormat(zodSchema, "format"); + } catch { + // If not JSON, try evaluating as Zod schema directly + const zodSchema = eval(`(${val})`); + return zodResponseFormat(zodSchema, "format"); + } + } + } catch (e) { + console.error(`Error parsing format: ${e}`) + return null; + } + }), + z.any().transform((val) => { + // If it's already a Zod schema, use it directly + if (val && typeof val === 'object' && 'parse' in val) { + return zodResponseFormat(val, "format"); } - const zodSchemaStr = jsonSchemaToZod(schema); - // Evaluate the string to get the actual Zod schema - const zodSchema = eval(`(${zodSchemaStr})`); - return zodResponseFormat(zodSchema, "format"); - } catch (e) { - console.error(`Error parsing format: ${e}`) return null; - } - }) + }) + ]) .optional() - .describe('Zod schema for structured outputs. Can be a Zod schema, a JSON schema string, or a path to a JSON file.') + .describe('Format for structured outputs. Can be a Zod schema, a Zod schema string, a JSON schema string, or a path to a JSON file.') ); return schemaMap.root() .passthrough() diff --git a/packages/kbot/src/zod_types.ts b/packages/kbot/src/zod_types.ts index c5d922a1..958f2dca 100644 --- a/packages/kbot/src/zod_types.ts +++ b/packages/kbot/src/zod_types.ts @@ -427,6 +427,6 @@ export interface IKBotOptions { filters?: (string | ("JSON" | "JSONUnescape" | "JSONPretty" | "AlphaSort" | "code" | "JSONParse" | "trim")[] | string[] | ((...args_0: unknown[]) => unknown)[]); /** Dry run - only write out parameters without making API calls */ dry?: (boolean | string); - /** Zod schema for structured outputs. Can be a Zod schema, a JSON schema string, or a path to a JSON file. */ - format?: (string | undefined) | undefined; + /** Format for structured outputs. Can be a Zod schema, a Zod schema string, a JSON schema string, or a path to a JSON file. */ + format?: (string | any) | undefined; } \ No newline at end of file diff --git a/packages/kbot/tests/response-format/africa-countries.json b/packages/kbot/tests/response-format/africa-countries.json index 9f44a968..4567d924 100644 --- a/packages/kbot/tests/response-format/africa-countries.json +++ b/packages/kbot/tests/response-format/africa-countries.json @@ -1,84 +1,94 @@ { "cities": [ { - "name": "Lagos", - "country": "Nigeria", - "population": 14779000 + "name": "Nigeria", + "population": 21140000, + "conflict": 0, + "exports": "Petroleum, Cocoa", + "languages": "English, Hausa, Igbo, Yoruba", + "religion": "Islam, Christianity, Indigenous beliefs", + "colonia": "Colonized by the British" }, { - "name": "Cairo", - "country": "Egypt", - "population": 20484965 + "name": "Egypt", + "population": 98420000, + "conflict": 0, + "exports": "Crude Oil, Cotton, Textiles", + "languages": "Arabic", + "religion": "Islam, Christianity", + "colonia": "Colonized by the British" }, { - "name": "Kinshasa", - "country": "Democratic Republic of the Congo", - "population": 15075000 + "name": "South Africa", + "population": 59310000, + "conflict": 0, + "exports": "Gold, Diamonds, Platinum", + "languages": "Zulu, Xhosa, Afrikaans, English", + "religion": "Christianity, Traditional African beliefs", + "colonia": "Colonized by the British and Dutch" }, { - "name": "Johannesburg", - "country": "South Africa", - "population": 9574417 + "name": "Kenya", + "population": 53700000, + "conflict": 0, + "exports": "Tea, Coffee, Cut Flowers", + "languages": "English, Swahili", + "religion": "Christianity, Islam, Hinduism", + "colonia": "Colonized by the British" }, { - "name": "Nairobi", - "country": "Kenya", - "population": 5545000 + "name": "Ethiopia", + "population": 112100000, + "conflict": 1, + "exports": "Coffee, Livestock, Pulses", + "languages": "Amharic, Oromo, Tigrinya", + "religion": "Christianity, Islam, Indigenous beliefs", + "colonia": "Briefly occupied by Italy" }, { - "name": "Luanda", - "country": "Angola", - "population": 8200000 + "name": "Ghana", + "population": 31280000, + "conflict": 0, + "exports": "Gold, Cocoa, Oil", + "languages": "English, Akan, Ewe", + "religion": "Christianity, Islam, Traditional African beliefs", + "colonia": "Colonized by the British" }, { - "name": "Addis Ababa", - "country": "Ethiopia", - "population": 4942826 + "name": "Morocco", + "population": 36470000, + "conflict": 0, + "exports": "Electronics, Phosphates, Textiles", + "languages": "Arabic, Berber", + "religion": "Islam", + "colonia": "Colonized by the French and Spanish" }, { - "name": "Khartoum", - "country": "Sudan", - "population": 6400000 + "name": "Algeria", + "population": 43850000, + "conflict": 0, + "exports": "Petroleum, Natural Gas", + "languages": "Arabic, Berber", + "religion": "Islam", + "colonia": "Colonized by the French" }, { - "name": "Dar es Salaam", - "country": "Tanzania", - "population": 6936403 + "name": "Uganda", + "population": 45740000, + "conflict": 0, + "exports": "Coffee, Fish, Tea", + "languages": "English, Swahili", + "religion": "Christianity, Islam", + "colonia": "Colonized by the British" }, { - "name": "Accra", - "country": "Ghana", - "population": 4540000 - }, - { - "name": "Algiers", - "country": "Algeria", - "population": 3415811 - }, - { - "name": "Casablanca", - "country": "Morocco", - "population": 3500000 - }, - { - "name": "Abidjan", - "country": "Ivory Coast", - "population": 5040000 - }, - { - "name": "Dakar", - "country": "Senegal", - "population": 3483664 - }, - { - "name": "Tunis", - "country": "Tunisia", - "population": 2750330 - }, - { - "name": "Douala", - "country": "Cameroon", - "population": 4050687 + "name": "Sudan", + "population": 43850000, + "conflict": 1, + "exports": "Gold, Oil, Gum Arabic", + "languages": "Arabic, English", + "religion": "Islam, Christianity", + "colonia": "Colonized by the British and Egyptians" } ] } \ No newline at end of file diff --git a/packages/kbot/tests/response-format/countries.json b/packages/kbot/tests/response-format/countries.json index 062caf87..f187be81 100644 --- a/packages/kbot/tests/response-format/countries.json +++ b/packages/kbot/tests/response-format/countries.json @@ -1,8 +1,8 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://example.com/cities.schema.json", - "title": "Cities Wrapper", - "description": "An object containing a list of cities (without coordinates).", + "title": "countries Wrapper", + "description": "An object containing a list of countries (without coordinates).", "type": "object", "properties": { "cities": { @@ -12,15 +12,31 @@ "properties": { "name": { "type": "string", - "description": "City name." - }, - "country": { - "type": "string", - "description": "Country where the city is located." + "description": "Country name." }, "population": { "type": "integer", "description": "Total population of the city." + }, + "conflict": { + "type": "integer", + "description": "Is involved in a conflict." + }, + "exports": { + "type": "string", + "description": "Goods exported from the country." + }, + "languages": { + "type": "string", + "description": "list of languages spoken in the country." + }, + "religion": { + "type": "string", + "description": "list of religions practiced in the country." + }, + "colonia": { + "type": "string", + "description": "Colonial history of the country." } }, "required": ["name", "country"]