kbot:structured output - spieglein spieglein :)
This commit is contained in:
parent
174b4c3cc2
commit
393591e28e
77
packages/kbot/.vscode/launch.json
vendored
77
packages/kbot/.vscode/launch.json
vendored
@ -9,7 +9,7 @@
|
||||
"request": "launch",
|
||||
"name": "create",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -32,7 +32,7 @@
|
||||
"request": "launch",
|
||||
"name": "modify",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -54,7 +54,7 @@
|
||||
"request": "launch",
|
||||
"name": "git",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -77,7 +77,7 @@
|
||||
"request": "launch",
|
||||
"name": "templates:solidworks",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -100,7 +100,7 @@
|
||||
"request": "launch",
|
||||
"name": "prompt:docker",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -125,7 +125,7 @@
|
||||
"request": "launch",
|
||||
"name": "iterator",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -154,7 +154,7 @@
|
||||
"request": "launch",
|
||||
"name": "search:google",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -177,7 +177,7 @@
|
||||
"request": "launch",
|
||||
"name": "search:serpapi",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -199,7 +199,7 @@
|
||||
"request": "launch",
|
||||
"name": "interact",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -224,7 +224,7 @@
|
||||
"request": "launch",
|
||||
"name": "web",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -247,7 +247,7 @@
|
||||
"request": "launch",
|
||||
"name": "deepseek",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -269,7 +269,7 @@
|
||||
"request": "launch",
|
||||
"name": "tools:email",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -291,7 +291,7 @@
|
||||
"request": "launch",
|
||||
"name": "tools:terminal:astro",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -313,7 +313,7 @@
|
||||
"request": "launch",
|
||||
"name": "types",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -333,7 +333,7 @@
|
||||
"request": "launch",
|
||||
"name": "tools:search",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -357,7 +357,7 @@
|
||||
"request": "launch",
|
||||
"name": "assistant:code",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -383,7 +383,7 @@
|
||||
"request": "launch",
|
||||
"name": "assistant:pdf",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -409,7 +409,7 @@
|
||||
"request": "launch",
|
||||
"name": "assistant:md",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -431,12 +431,39 @@
|
||||
"outputCapture": "std",
|
||||
"console": "integratedTerminal"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "response-format",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
"cwd": "${workspaceFolder}",
|
||||
"args": [
|
||||
"'return a list of african countries'",
|
||||
"--disable='npm,terminal,interact,git,search'",
|
||||
"--router2=openai",
|
||||
"--format=./tests/response-format/countries.json",
|
||||
"--model=openai/gpt-4o",
|
||||
"--mode=completion",
|
||||
"--filters=JSONParse",
|
||||
"--dst=./tests/response-format/africa-countries.json",
|
||||
],
|
||||
"resolveSourceMapLocations": [
|
||||
"${workspaceFolder}/**",
|
||||
"!**/node_modules/**"
|
||||
],
|
||||
"outputCapture": "std",
|
||||
"console": "integratedTerminal"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "each:glob",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -462,7 +489,7 @@
|
||||
"request": "launch",
|
||||
"name": "each:array",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -494,7 +521,7 @@
|
||||
"request": "launch",
|
||||
"name": "salamand",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -527,7 +554,7 @@
|
||||
"request": "launch",
|
||||
"name": "tools:test",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -556,7 +583,7 @@
|
||||
"request": "launch",
|
||||
"name": "images:jpg-svg",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -582,7 +609,7 @@
|
||||
"request": "launch",
|
||||
"name": "images:jpg-svg-overlay",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
@ -609,7 +636,7 @@
|
||||
"request": "launch",
|
||||
"name": "hono",
|
||||
"skipFiles": [],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program": "${workspaceFolder}\\dist-in\\main.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
|
||||
@ -38,9 +38,10 @@ export const runCompletion = async (client, params, options) => {
|
||||
const completion = await client.chat.completions.create({
|
||||
model: options.model,
|
||||
messages: params.messages,
|
||||
response_format: options.format,
|
||||
});
|
||||
let result = completion.choices[0].message.content;
|
||||
result = await onCompletion(result, options);
|
||||
return result;
|
||||
};
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLWNvbXBsZXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvcnVuLWNvbXBsZXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEQsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUE7QUFDakMsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFJM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFHM0MsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxTQUFjLEVBQUUsRUFBRSxPQUFrQixFQUFFLEVBQUU7SUFDekUsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQW1CLElBQUksRUFBRSxDQUFDLENBQUE7SUFDaEUsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQy9CLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ3ZELEdBQUcsSUFBSTtZQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJO1lBQ3JDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtTQUN2QixDQUFDLENBQUMsQ0FBQTtRQUNILEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDdEIsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsT0FBTyxNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7WUFDeEIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUMsQ0FBQTtRQUNILE1BQU0sT0FBTyxHQUFXLE1BQU0sQ0FBQyxNQUFNLENBQVcsQ0FBQztRQUNqRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBQ0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JCLGtCQUFrQjtJQUNsQixPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQUUsTUFBYyxFQUFFLE1BQVcsRUFBRSxPQUFrQixFQUFFLEVBQUU7SUFDckYsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO1FBQzFDLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3RELEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7S0FDMUIsQ0FBQyxDQUFBO0lBQ0YsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFBO0lBQ2xELE1BQU0sR0FBRyxNQUFNLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDNUMsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDLENBQUEifQ==
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLWNvbXBsZXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvcnVuLWNvbXBsZXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEQsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUE7QUFDakMsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFJM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFHM0MsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxTQUFjLEVBQUUsRUFBRSxPQUFrQixFQUFFLEVBQUU7SUFDekUsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQW1CLElBQUksRUFBRSxDQUFDLENBQUE7SUFDaEUsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQy9CLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ3ZELEdBQUcsSUFBSTtZQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJO1lBQ3JDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtTQUN2QixDQUFDLENBQUMsQ0FBQTtRQUNILEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDdEIsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsT0FBTyxNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7WUFDeEIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUMsQ0FBQTtRQUNILE1BQU0sT0FBTyxHQUFXLE1BQU0sQ0FBQyxNQUFNLENBQVcsQ0FBQztRQUNqRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBQ0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JCLGtCQUFrQjtJQUNsQixPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQUUsTUFBYyxFQUFFLE1BQVcsRUFBRSxPQUFrQixFQUFFLEVBQUU7SUFDckYsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO1FBQzFDLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3RELEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7UUFDekIsZUFBZSxFQUFFLE9BQU8sQ0FBQyxNQUFhO0tBQ3ZDLENBQUMsQ0FBQTtJQUNGLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQTtJQUNsRCxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzVDLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQyxDQUFBIn0=
|
||||
File diff suppressed because one or more lines are too long
4
packages/kbot/dist-in/zod_types.d.ts
vendored
4
packages/kbot/dist-in/zod_types.d.ts
vendored
@ -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 */
|
||||
format?: any;
|
||||
/** 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;
|
||||
}
|
||||
|
||||
10
packages/kbot/package-lock.json
generated
10
packages/kbot/package-lock.json
generated
@ -20,6 +20,7 @@
|
||||
"emojilib": "4.0.1",
|
||||
"env-var": "7.5.0",
|
||||
"glob": "11.0.1",
|
||||
"json-schema-to-zod": "2.6.0",
|
||||
"marked": "14.1.4",
|
||||
"marked-terminal": "7.2.1",
|
||||
"mime-types": "2.1.35",
|
||||
@ -4342,6 +4343,15 @@
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/json-schema-to-zod": {
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-to-zod/-/json-schema-to-zod-2.6.0.tgz",
|
||||
"integrity": "sha512-6sFZqOzHZeON8g2ZW5HJ114Hb/FffNCjWh8dgulJaKFkUqKCEWZAzF4+g07SQpfBZF7HXemwedtdLypZzmnVpQ==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"json-schema-to-zod": "dist/cjs/cli.js"
|
||||
}
|
||||
},
|
||||
"node_modules/json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
|
||||
@ -39,6 +39,7 @@
|
||||
"emojilib": "4.0.1",
|
||||
"env-var": "7.5.0",
|
||||
"glob": "11.0.1",
|
||||
"json-schema-to-zod": "2.6.0",
|
||||
"marked": "14.1.4",
|
||||
"marked-terminal": "7.2.1",
|
||||
"mime-types": "2.1.35",
|
||||
|
||||
@ -188,8 +188,8 @@
|
||||
"description": "Dry run - only write out parameters without making API calls"
|
||||
},
|
||||
"format": {
|
||||
"default": null,
|
||||
"description": "Zod schema for structured outputs"
|
||||
"type": "string",
|
||||
"description": "Zod schema for structured outputs. Can be a Zod schema, a JSON schema string, or a path to a JSON file."
|
||||
}
|
||||
},
|
||||
"additionalProperties": true,
|
||||
|
||||
@ -127,8 +127,7 @@
|
||||
"ui:placeholder": false
|
||||
},
|
||||
"format": {
|
||||
"ui:description": "Zod schema for structured outputs",
|
||||
"ui:title": "Format",
|
||||
"ui:placeholder": null
|
||||
"ui:description": "Zod schema for structured outputs. Can be a Zod schema, a JSON schema string, or a path to a JSON file.",
|
||||
"ui:title": "Format"
|
||||
}
|
||||
}
|
||||
@ -11,7 +11,7 @@ import { logger } from '../index.js'
|
||||
import { dumpAsScript } from '../utils/script.js'
|
||||
import { applyFilters, Filter } from '../filters.js'
|
||||
import { variables } from '../variables.js'
|
||||
|
||||
import { ResponseFormatJSONSchema } from 'openai/resources/shared.js'
|
||||
|
||||
export const onCompletion = async (result: any = "", options: IKBotTask) => {
|
||||
result = applyFilters(result, options.filters as Filter[] || [])
|
||||
@ -44,6 +44,7 @@ export const runCompletion = async (client: OpenAI, params: any, options: IKBotT
|
||||
const completion = await client.chat.completions.create({
|
||||
model: options.model,
|
||||
messages: params.messages,
|
||||
response_format: options.format as any,
|
||||
})
|
||||
let result = completion.choices[0].message.content
|
||||
result = await onCompletion(result, options)
|
||||
|
||||
@ -5,6 +5,7 @@ import env from 'env-var'
|
||||
import { generate_interfaces, ZodMetaMap, resolve, write } from '@polymech/commons'
|
||||
import { sync as exists } from '@polymech/fs/exists'
|
||||
import { sync as writeFS } from '@polymech/fs/write'
|
||||
import { sync as readFS } from '@polymech/fs/read'
|
||||
import { isArray, isFunction, isString } from '@polymech/core/primitives'
|
||||
import { zodResponseFormat } from "openai/helpers/zod"
|
||||
|
||||
@ -13,7 +14,7 @@ import { API_PREFIX, LOGGING_DIRECTORY, PREFERENCES_FILE_NAME } from './constant
|
||||
export const get_var = (key: string = '') => env.get(key).asString() || env.get(key.replace(/-/g, '_')).asString() || env.get(key.replace(/_/g, '-')).asString()
|
||||
export const HOME = (sub = '') => path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'] || '', sub)
|
||||
export const PREFERENCES_DEFAULT = (key: string = 'KBOT_PREFERENCES') => get_var(key) || path.join(HOME(`.${API_PREFIX}`), PREFERENCES_FILE_NAME)
|
||||
|
||||
import { jsonSchemaToZod } from "json-schema-to-zod"
|
||||
import { Filters } from './filters.js'
|
||||
import { models_dist } from './models/index.js'
|
||||
import { defaultTemplate } from './tools.js'
|
||||
@ -227,11 +228,11 @@ export const OptionsSchema = (opts?: any): any => {
|
||||
It unwraps by default any code or data in Markdown.
|
||||
Choices:\n\t${Object.keys(Filters)}\n`)
|
||||
.transform((val) => {
|
||||
if(isArray(val) && val.length && isFunction(val[0])){
|
||||
if (isArray(val) && val.length && isFunction(val[0])) {
|
||||
return val
|
||||
}
|
||||
let filters = isString(val) ? val.split(',') : val
|
||||
filters = filters.map((f: any) => Filters[f]).filter(Boolean)
|
||||
filters = filters.map((f: any) => Filters[f]).filter(Boolean)
|
||||
return filters
|
||||
})
|
||||
)
|
||||
@ -247,11 +248,27 @@ export const OptionsSchema = (opts?: any): any => {
|
||||
)
|
||||
.add(
|
||||
'format',
|
||||
z.any()
|
||||
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);
|
||||
}
|
||||
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()
|
||||
.default(null)
|
||||
.describe('Zod schema for structured outputs')
|
||||
.transform((val) => val ? zodResponseFormat(val, "format") : null)
|
||||
.describe('Zod schema for structured outputs. Can be a Zod schema, a JSON schema string, or a path to a JSON file.')
|
||||
);
|
||||
return schemaMap.root()
|
||||
.passthrough()
|
||||
|
||||
@ -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 */
|
||||
format?: any;
|
||||
/** 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;
|
||||
}
|
||||
84
packages/kbot/tests/response-format/africa-countries.json
Normal file
84
packages/kbot/tests/response-format/africa-countries.json
Normal file
@ -0,0 +1,84 @@
|
||||
{
|
||||
"cities": [
|
||||
{
|
||||
"name": "Lagos",
|
||||
"country": "Nigeria",
|
||||
"population": 14779000
|
||||
},
|
||||
{
|
||||
"name": "Cairo",
|
||||
"country": "Egypt",
|
||||
"population": 20484965
|
||||
},
|
||||
{
|
||||
"name": "Kinshasa",
|
||||
"country": "Democratic Republic of the Congo",
|
||||
"population": 15075000
|
||||
},
|
||||
{
|
||||
"name": "Johannesburg",
|
||||
"country": "South Africa",
|
||||
"population": 9574417
|
||||
},
|
||||
{
|
||||
"name": "Nairobi",
|
||||
"country": "Kenya",
|
||||
"population": 5545000
|
||||
},
|
||||
{
|
||||
"name": "Luanda",
|
||||
"country": "Angola",
|
||||
"population": 8200000
|
||||
},
|
||||
{
|
||||
"name": "Addis Ababa",
|
||||
"country": "Ethiopia",
|
||||
"population": 4942826
|
||||
},
|
||||
{
|
||||
"name": "Khartoum",
|
||||
"country": "Sudan",
|
||||
"population": 6400000
|
||||
},
|
||||
{
|
||||
"name": "Dar es Salaam",
|
||||
"country": "Tanzania",
|
||||
"population": 6936403
|
||||
},
|
||||
{
|
||||
"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
|
||||
}
|
||||
]
|
||||
}
|
||||
66
packages/kbot/tests/response-format/africa-countries.md
Normal file
66
packages/kbot/tests/response-format/africa-countries.md
Normal file
@ -0,0 +1,66 @@
|
||||
# African Countries List
|
||||
|
||||
Here is a comprehensive list of African countries in alphabetical order:
|
||||
|
||||
1. Algeria
|
||||
2. Angola
|
||||
3. Benin
|
||||
4. Botswana
|
||||
5. Burkina Faso
|
||||
6. Burundi
|
||||
7. Cameroon
|
||||
8. Cape Verde
|
||||
9. Central African Republic
|
||||
10. Chad
|
||||
11. Comoros
|
||||
12. Congo
|
||||
13. Democratic Republic of the Congo
|
||||
14. Djibouti
|
||||
15. Egypt
|
||||
16. Equatorial Guinea
|
||||
17. Eritrea
|
||||
18. Ethiopia
|
||||
19. Gabon
|
||||
20. Gambia
|
||||
21. Ghana
|
||||
22. Guinea
|
||||
23. Guinea-Bissau
|
||||
24. Ivory Coast
|
||||
25. Kenya
|
||||
26. Lesotho
|
||||
27. Liberia
|
||||
28. Libya
|
||||
29. Madagascar
|
||||
30. Malawi
|
||||
31. Mali
|
||||
32. Mauritania
|
||||
33. Mauritius
|
||||
34. Morocco
|
||||
35. Mozambique
|
||||
36. Namibia
|
||||
37. Niger
|
||||
38. Nigeria
|
||||
39. Rwanda
|
||||
40. Sao Tome and Principe
|
||||
41. Senegal
|
||||
42. Seychelles
|
||||
43. Sierra Leone
|
||||
44. Somalia
|
||||
45. South Africa
|
||||
46. South Sudan
|
||||
47. Sudan
|
||||
48. Swaziland (Eswatini)
|
||||
49. Tanzania
|
||||
50. Togo
|
||||
51. Tunisia
|
||||
52. Uganda
|
||||
53. Zambia
|
||||
54. Zimbabwe
|
||||
|
||||
Source: [United Nations - Member States](https://www.un.org/en/about-us/member-states)
|
||||
|
||||
---
|
||||
Prompt: 'return a list of african countries'
|
||||
|
||||
Kind regards,
|
||||
Guenter
|
||||
31
packages/kbot/tests/response-format/countries.json
Normal file
31
packages/kbot/tests/response-format/countries.json
Normal file
@ -0,0 +1,31 @@
|
||||
{
|
||||
"$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).",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"cities": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "City name."
|
||||
},
|
||||
"country": {
|
||||
"type": "string",
|
||||
"description": "Country where the city is located."
|
||||
},
|
||||
"population": {
|
||||
"type": "integer",
|
||||
"description": "Total population of the city."
|
||||
}
|
||||
},
|
||||
"required": ["name", "country"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["cities"]
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user