From cc60e8cc03b8add4e58eeebd92c5d54b8d25426d Mon Sep 17 00:00:00 2001 From: babayaga Date: Thu, 3 Apr 2025 19:38:03 +0200 Subject: [PATCH] cleanup | logger | prefs, local first :) --- packages/kbot/.vscode/launch.json | 2 +- packages/kbot/dist-in/collector.js | 5 +- .../kbot/dist-in/commands/run-completion.js | 7 +- packages/kbot/dist-in/commands/run-tools.js | 11 +- packages/kbot/dist-in/commands/run.js | 8 +- packages/kbot/dist-in/index.d.ts | 2 + packages/kbot/dist-in/index.js | 36 +- packages/kbot/dist-in/prompt.js | 8 +- packages/kbot/src/collector.ts | 3 +- packages/kbot/src/commands/log.ts | 5 - packages/kbot/src/commands/run-completion.ts | 6 +- packages/kbot/src/commands/run-each.ts | 30 - packages/kbot/src/commands/run-tools.ts | 9 +- packages/kbot/src/commands/run.ts | 11 +- packages/kbot/src/index.ts | 37 + packages/kbot/src/prompt.ts | 8 +- .../tests/response-format/tools-research.json | 57 +- packages/kbot/tests/unit/math.test.ts | 4 +- packages/kbot/tests/unit/reports/all.json | 849 +++++++++++++++++- packages/kbot/tests/unit/reports/basic.json | 161 +++- packages/kbot/tests/unit/reports/basic.md | 82 +- packages/kbot/tests/unit/reports/math.json | 690 +++++++++++++- packages/kbot/tests/unit/reports/math.md | 328 +++---- 23 files changed, 1941 insertions(+), 418 deletions(-) delete mode 100644 packages/kbot/src/commands/log.ts delete mode 100644 packages/kbot/src/commands/run-each.ts diff --git a/packages/kbot/.vscode/launch.json b/packages/kbot/.vscode/launch.json index 4d124ae8..86d989e1 100644 --- a/packages/kbot/.vscode/launch.json +++ b/packages/kbot/.vscode/launch.json @@ -275,7 +275,7 @@ ], "cwd": "${workspaceFolder}", "args": [ - "'send John the latest wheather report for Tarragona, as email'", + "'send me the latest wheather report for Tarragona, as email'", "--disable='npm,terminal'", "--include='tests/*.md'" ], diff --git a/packages/kbot/dist-in/collector.js b/packages/kbot/dist-in/collector.js index 804756cd..c1ae2769 100644 --- a/packages/kbot/dist-in/collector.js +++ b/packages/kbot/dist-in/collector.js @@ -1,8 +1,9 @@ import path from 'node:path'; import { resolve } from '@polymech/commons'; import { winstonLogger, } from '@polymech/ai-tools'; -import { logger as loggerIntern } from './index.js'; +import { getLogger } from './index.js'; export const collector = (options, client) => { + const loggerIntern = getLogger(options); return { //OpenAI onMessage: (message) => { @@ -67,4 +68,4 @@ export const collector = (options, client) => { } }; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbGxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFJNUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRzNDLE9BQU8sRUFBRSxhQUFhLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQTtBQUVuRCxPQUFPLEVBQUUsTUFBTSxJQUFJLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUluRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFxQixFQUFFLE1BQWMsRUFBYyxFQUFFO0lBQzNFLE9BQU87UUFDSCxRQUFRO1FBQ1IsU0FBUyxFQUFFLENBQUMsT0FBbUMsRUFBRSxFQUFFO1lBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQTtZQUNyRixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDNUQsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN4QixDQUFDO1FBQ0QsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUEyQyxFQUFFLEVBQUU7WUFDOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFBO1lBQ2hGLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUM3RCxJQUFJLENBQUM7Z0JBQ0QsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxTQUFT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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbGxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFJNUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRzNDLE9BQU8sRUFBRSxhQUFhLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQTtBQUVuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBSXRDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQXFCLEVBQUUsTUFBYyxFQUFjLEVBQUU7SUFDM0UsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZDLE9BQU87UUFDSCxRQUFRO1FBQ1IsU0FBUyxFQUFFLENBQUMsT0FBbUMsRUFBRSxFQUFFO1lBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQTtZQUNyRixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDNUQsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN4QixDQUFDO1FBQ0QsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUEyQyxFQUFFLEVBQUU7WUFDOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFBO1lBQ2hGLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUM3RCxJQUFJLENBQUM7Z0JBQ0QsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQTtnQkFDcEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNyQixDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDVCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3pCLENBQUM7UUFDTCxDQUFDO1FBQ0Qsb0JBQW9CLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRTtZQUN0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUE7WUFDdkYsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLGdDQUFnQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ3ZFLElBQUksQ0FBQztnQkFDRCxNQUFNLEdBQUcsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUE7Z0JBQzVDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDckIsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1QsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUN6QixDQUFDO1FBQ0wsQ0FBQztRQUNELGdCQUFnQixFQUFFLENBQUMsT0FBdUIsRUFBRSxFQUFFO1lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQTtZQUNqRixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDbkUsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN6QixDQUFDO1FBQ0QsU0FBUyxFQUFFLENBQUMsT0FBZSxFQUFFLEVBQUU7WUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQTtZQUM5RSxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDNUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN6QixDQUFDO1FBQ0QsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU07WUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQTtZQUMzRSxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDekQsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDbEQsQ0FBQztRQUNELFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBbUMsRUFBRSxJQUFTLEVBQUUsRUFBRTtZQUNuRSxJQUFHLENBQUM7Z0JBQ0EsWUFBWSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7WUFDbkQsQ0FBQztZQUFBLE9BQU0sQ0FBQyxFQUFDLENBQUM7Z0JBQ04sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN6QixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDO1FBQ0QsV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFtQyxFQUFFLElBQVMsRUFBRSxNQUFZLEVBQUUsRUFBRTtZQUNoRixJQUFJLENBQUM7Z0JBQ0QsWUFBWSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7WUFDbkQsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1QsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN6QixDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDcEIsQ0FBQztLQUNKLENBQUE7QUFDTCxDQUFDLENBQUEifQ== \ No newline at end of file diff --git a/packages/kbot/dist-in/commands/run-completion.js b/packages/kbot/dist-in/commands/run-completion.js index 5af94839..d5a66bb2 100644 --- a/packages/kbot/dist-in/commands/run-completion.js +++ b/packages/kbot/dist-in/commands/run-completion.js @@ -3,7 +3,6 @@ import { markedTerminal } from 'marked-terminal'; import * as path from 'node:path'; import { sync as write } from '@polymech/fs/write'; import { resolve } from '@polymech/commons'; -import { logger } from '../index.js'; import { dumpAsScript } from '../utils/script.js'; import { applyFilters } from '../filters.js'; import { variables } from '../variables.js'; @@ -17,7 +16,7 @@ export const onCompletion = async (result = "", options) => { ROUTER: options.router, })); write(dstPath, result); - logger.debug(`Wrote completion result to ${dstPath} : ${options.dst}`); + options.logger.debug(`Wrote completion result to ${dstPath} : ${options.dst}`); } else { marked.use(markedTerminal({ @@ -32,7 +31,7 @@ export const onCompletion = async (result = "", options) => { }; export const runCompletion = async (client, params, options) => { if (options.dry) { - logger.info('Dry run - skipping API call'); + options.logger.info('Dry run - skipping API call'); return false; } // await client.beta.chat.completions.parse @@ -45,4 +44,4 @@ export const runCompletion = async (client, params, options) => { result = await onCompletion(result, options); return result; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLWNvbXBsZXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvcnVuLWNvbXBsZXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEQsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUE7QUFDakMsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFJM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFHM0MsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxTQUFjLEVBQUUsRUFBRSxPQUFrQixFQUFFLEVBQUU7SUFDekUsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQW1CLElBQUksRUFBRSxDQUFDLENBQUE7SUFDaEUsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQy9CLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ3ZELEdBQUcsSUFBSTtZQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJO1lBQ3JDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtTQUN2QixDQUFDLENBQUMsQ0FBQTtRQUNILEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDdEIsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsT0FBTyxNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7WUFDeEIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUMsQ0FBQTtRQUNILE1BQU0sT0FBTyxHQUFXLE1BQU0sQ0FBQyxNQUFNLENBQVcsQ0FBQztRQUNqRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBQ0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JCLGtCQUFrQjtJQUNsQixPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQUUsTUFBYyxFQUFFLE1BQVcsRUFBRSxPQUFrQixFQUFFLEVBQUU7SUFDckYsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO1FBQzFDLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELDJDQUEyQztJQUMzQyxNQUFNLFVBQVUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUN0RCxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLGVBQWUsRUFBRSxPQUFPLENBQUMsTUFBYTtLQUN2QyxDQUFDLENBQUE7SUFDRixJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUE7SUFDbEQsTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUM1QyxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUMsQ0FBQSJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLWNvbXBsZXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvcnVuLWNvbXBsZXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEQsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUE7QUFDakMsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFHM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUE7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRzNDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsU0FBYyxFQUFFLEVBQUUsT0FBa0IsRUFBRSxFQUFFO0lBQ3pFLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFtQixJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMvQixJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUN2RCxHQUFHLElBQUk7WUFDUCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSTtZQUNyQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07U0FDdkIsQ0FBQyxDQUFDLENBQUE7UUFDSCxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3RCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhCQUE4QixPQUFPLE1BQU0sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDaEYsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztZQUN4QixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQyxDQUFBO1FBQ0gsTUFBTSxPQUFPLEdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBVyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFDRCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDckIsa0JBQWtCO0lBQ2xCLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEtBQUssRUFBRSxNQUFjLEVBQUUsTUFBVyxFQUFFLE9BQWtCLEVBQUUsRUFBRTtJQUNyRixJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO1FBQ2xELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELDJDQUEyQztJQUMzQyxNQUFNLFVBQVUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUN0RCxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLGVBQWUsRUFBRSxPQUFPLENBQUMsTUFBYTtLQUN2QyxDQUFDLENBQUE7SUFDRixJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUE7SUFDbEQsTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUM1QyxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUMsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/kbot/dist-in/commands/run-tools.js b/packages/kbot/dist-in/commands/run-tools.js index 9bd10157..809e05ea 100644 --- a/packages/kbot/dist-in/commands/run-tools.js +++ b/packages/kbot/dist-in/commands/run-tools.js @@ -1,5 +1,4 @@ import { content } from '../utils/content.js'; -import { logger } from '../index.js'; import { onCompletion } from './run-completion.js'; export const runTools = async (client, params, options) => { const sessionId = Date.now().toString(); @@ -10,7 +9,7 @@ export const runTools = async (client, params, options) => { messages: [] }; if (options.dry) { - logger.info('Dry run - skipping API call'); + options.logger.info('Dry run - skipping API call'); return { result: 'DRY RUN', sessionMessages, @@ -42,7 +41,7 @@ export const runTools = async (client, params, options) => { .on('content', options.collector.onContent); } catch (e) { - logger.trace(e); + options.logger.trace(e); } let result = content(runner); try { @@ -50,13 +49,13 @@ export const runTools = async (client, params, options) => { } catch (error) { if (error.message.includes("(reading 'map')")) { - logger.error('Failed to complete runner: credits :)', error.message, error.message, error); + options.logger.error('Failed to complete runner: credits :)', error.message, error.message, error); return; } - logger.error('Failed to complete runner:', error.message, error.issues); + options.logger.error('Failed to complete runner:', error.message, error.issues); return; } const ret = content(result); return await onCompletion(ret, options); }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLXRvb2xzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3J1bi10b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFbEQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxNQUFjLEVBQUUsTUFBVyxFQUFFLE9BQWtCLEVBQUUsRUFBRTtJQUNoRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDdkMsTUFBTSxlQUFlLEdBQUc7UUFDdEIsU0FBUztRQUNULE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtRQUN0QixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7UUFDbkMsUUFBUSxFQUFFLEVBQUU7S0FDYixDQUFBO0lBQ0QsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO1FBQzFDLE9BQU87WUFDTCxNQUFNLEVBQUUsU0FBUztZQUNqQixlQUFlO1lBQ2YsVUFBVSxFQUFFLEVBQUU7WUFDZCxTQUFTLEVBQUUsRUFBRTtTQUNkLENBQUE7SUFDSCxDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUFZLEVBQUUsU0FBaUIsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUM3RCxPQUFPO1lBQ0wsR0FBRyxPQUFPO1lBQ1YsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ25DLFNBQVM7WUFDVCxNQUFNO1NBQ1AsQ0FBQTtJQUNILENBQUMsQ0FBQTtJQUNELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQTtJQUNqQixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQTZDLENBQUM7YUFDaEcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQW1DLEVBQUUsRUFBRTtZQUNwRCxPQUFPLENBQUMsU0FBd0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDN0YsQ0FBQyxDQUFDO2FBQ0QsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQXdDLEVBQUUsRUFBRTtZQUMvRCxPQUFRLE9BQU8sQ0FBQyxTQUF3QixDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNsRyxDQUFDLENBQUM7YUFDRCxFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM3QixPQUFPLENBQUMsU0FBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMzRCxDQUFDLENBQUM7YUFDRCxFQUFFLENBQUMsZ0JBQWdCLEVBQUcsT0FBTyxDQUFDLFNBQXdCLENBQUMsZ0JBQWdCLENBQUM7YUFDeEUsRUFBRSxDQUFDLFNBQVMsRUFBRyxPQUFPLENBQUMsU0FBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakIsQ0FBQztJQUVELElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM1QixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtJQUM3QyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQzFGLE9BQU07UUFDUixDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN2RSxPQUFNO0lBQ1IsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMzQixPQUFPLE1BQU0sWUFBWSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUN6QyxDQUFDLENBQUEifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLXRvb2xzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3J1bi10b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRWxELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxLQUFLLEVBQUUsTUFBYyxFQUFFLE1BQVcsRUFBRSxPQUFrQixFQUFFLEVBQUU7SUFDaEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ3ZDLE1BQU0sZUFBZSxHQUFHO1FBQ3RCLFNBQVM7UUFDVCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDdEIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1FBQ25DLFFBQVEsRUFBRSxFQUFFO0tBQ2IsQ0FBQTtJQUNELElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUE7UUFDbEQsT0FBTztZQUNMLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLGVBQWU7WUFDZixVQUFVLEVBQUUsRUFBRTtZQUNkLFNBQVMsRUFBRSxFQUFFO1NBQ2QsQ0FBQTtJQUNILENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQVksRUFBRSxTQUFpQixFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQzdELE9BQU87WUFDTCxHQUFHLE9BQU87WUFDVixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDbkMsU0FBUztZQUNULE1BQU07U0FDUCxDQUFBO0lBQ0gsQ0FBQyxDQUFBO0lBQ0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFBO0lBQ2pCLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBNkMsQ0FBQzthQUNoRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBbUMsRUFBRSxFQUFFO1lBQ3BELE9BQU8sQ0FBQyxTQUF3QixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUM3RixDQUFDLENBQUM7YUFDRCxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBd0MsRUFBRSxFQUFFO1lBQy9ELE9BQVEsT0FBTyxDQUFDLFNBQXdCLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ2xHLENBQUMsQ0FBQzthQUNELEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxTQUF3QixDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNELENBQUMsQ0FBQzthQUNELEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRyxPQUFPLENBQUMsU0FBd0IsQ0FBQyxnQkFBZ0IsQ0FBQzthQUN4RSxFQUFFLENBQUMsU0FBUyxFQUFHLE9BQU8sQ0FBQyxTQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUVELElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM1QixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtJQUM3QyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNsRyxPQUFNO1FBQ1IsQ0FBQztRQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQy9FLE9BQU07SUFDUixDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzNCLE9BQU8sTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQ3pDLENBQUMsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/kbot/dist-in/commands/run.js b/packages/kbot/dist-in/commands/run.js index 6d732691..d3ae9774 100644 --- a/packages/kbot/dist-in/commands/run.js +++ b/packages/kbot/dist-in/commands/run.js @@ -21,11 +21,11 @@ import { runCompletion } from './run-completion.js'; import { runTools } from './run-tools.js'; import { runAssistant } from './run-assistant.js'; import { all } from '../models/index.js'; +import { getLogger } from '../index.js'; export const processRun = async (opts) => { let options = null; - const logger = new Logger({ - minLevel: opts.logLevel - }); + const logger = getLogger(opts); + opts.logger = logger; const target = path.resolve(opts.output || opts.path); if (!exists(target)) { dir(target); @@ -201,4 +201,4 @@ export const run = async (opts) => { } return ret; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3J1bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQy9CLE9BQU8sRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDOUMsT0FBTyxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzlFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFPN0QsT0FBTyxFQUFFLE1BQU0sRUFBVyxNQUFNLE9BQU8sQ0FBQTtBQUV2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDM0MsT0FBTyxFQUFFLElBQUksSUFBSSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbkQsT0FBTyxFQUFFLElBQUksSUFBSSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3J1bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQy9CLE9BQU8sRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDOUMsT0FBTyxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzlFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFLN0QsT0FBTyxFQUFFLE1BQU0sRUFBVyxNQUFNLE9BQU8sQ0FBQTtBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDM0MsT0FBTyxFQUFFLElBQUksSUFBSSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbkQsT0FBTyxFQUFFLElBQUksSUFBSSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFB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 \ No newline at end of file diff --git a/packages/kbot/dist-in/index.d.ts b/packages/kbot/dist-in/index.d.ts index 87b98e08..a758d85f 100644 --- a/packages/kbot/dist-in/index.d.ts +++ b/packages/kbot/dist-in/index.d.ts @@ -1,5 +1,7 @@ import { Logger, ILogObj } from 'tslog'; +import { IKBotTask } from '@polymech/ai-tools'; export declare const logger: Logger; +export declare const getLogger: (options: IKBotTask) => Logger; export { run } from './commands/run.js'; export declare const module_root: () => string; export declare const assistant_supported: Record; diff --git a/packages/kbot/dist-in/index.js b/packages/kbot/dist-in/index.js index d8bff1f6..d1e425c7 100644 --- a/packages/kbot/dist-in/index.js +++ b/packages/kbot/dist-in/index.js @@ -1,10 +1,44 @@ import { platform } from 'node:process'; import path from 'node:path'; +import { Logger } from 'tslog'; const isWindows = platform === 'win32'; import { get_var } from '@polymech/commons'; import { MODULE_NAME } from './constants.js'; import { createLogger } from '@polymech/log'; export const logger = createLogger('llm-tools'); +let _logger = logger; +export const getLogger = (options) => { + if (_logger) { + return _logger; + } + const logLevelMap = { + 'silly': 0, + 'trace': 1, + 'debug': 2, + 'info': 3, + 'warn': 4, + 'error': 5, + 'fatal': 6 + }; + let minLevel = logLevelMap['info']; + if (options.logLevel) { + if (typeof options.logLevel === 'string') { + const levelStr = options.logLevel; + minLevel = logLevelMap[levelStr.toLowerCase()] || logLevelMap['info']; + } + else { + minLevel = options.logLevel; + } + } + _logger = new Logger({ + name: MODULE_NAME, + minLevel, + hideLogPositionForProduction: true, + maskPlaceholder: '***', + prettyLogTemplate: "{{logLevelName}}\t[{{filePathWithLine}}{{name}}]\t", + }); + return _logger; +}; export { run } from './commands/run.js'; export const module_root = () => path.resolve(path.join(get_var(isWindows ? 'HOMEPATH' : 'HOME'), `.${MODULE_NAME}`)); export const assistant_supported = { @@ -36,4 +70,4 @@ export * from './zod_schema.js'; export { E_OPENAI_MODEL } from './models/cache/openai-models.js'; export { E_OPENROUTER_MODEL } from './models/cache/openrouter-models.js'; export { E_OPENROUTER_MODEL_FREE } from './models/cache/openrouter-models-free.js'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN2QyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFFNUIsTUFBTSxTQUFTLEdBQUcsUUFBUSxLQUFLLE9BQU8sQ0FBQTtBQUV0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRTVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDNUMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQStCLENBQUE7QUFDN0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUVySCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBMkI7SUFDekQsSUFBSSxFQUFFLFVBQVU7SUFDaEIsTUFBTSxFQUFFLFlBQVk7SUFDcEIsS0FBSyxFQUFFLGVBQWU7SUFDdEIsTUFBTSxFQUFFLFVBQVU7SUFDbEIsTUFBTSxFQUFFLG9CQUFvQjtJQUM1QixPQUFPLEVBQUUseUVBQXlFO0lBQ2xGLEtBQUssRUFBRSxlQUFlO0lBQ3RCLE9BQU8sRUFBRSxXQUFXO0lBQ3BCLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLEtBQUssRUFBRSxpQkFBaUI7SUFDeEIsT0FBTyxFQUFFLGtCQUFrQjtJQUMzQixLQUFLLEVBQUUsZUFBZTtJQUN0QixNQUFNLEVBQUUsaUJBQWlCO0lBQ3pCLE1BQU0sRUFBRSxZQUFZO0lBQ3BCLE9BQU8sRUFBRSwyRUFBMkU7SUFDcEYsS0FBSyxFQUFFLGVBQWU7SUFDdEIsS0FBSyxFQUFFLGFBQWE7SUFDcEIsS0FBSyxFQUFFLGtCQUFrQjtJQUN6QixNQUFNLEVBQUUsWUFBWTtJQUNwQixLQUFLLEVBQUUsd0JBQXdCO0lBQy9CLE1BQU0sRUFBRSxZQUFZO0NBQ3JCLENBQUE7QUFDRCxjQUFjLFlBQVksQ0FBQTtBQUMxQixjQUFjLGdCQUFnQixDQUFBO0FBQzlCLGNBQWMsaUJBQWlCLENBQUE7QUFFL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFBIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN2QyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBVyxNQUFNLE9BQU8sQ0FBQTtBQUN2QyxNQUFNLFNBQVMsR0FBRyxRQUFRLEtBQUssT0FBTyxDQUFBO0FBRXRDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM1QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBK0IsQ0FBQTtBQUU3RSxJQUFJLE9BQU8sR0FBb0IsTUFBTSxDQUFBO0FBRXJDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQWtCLEVBQW1CLEVBQUU7SUFDL0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBMkI7UUFDMUMsT0FBTyxFQUFFLENBQUM7UUFDVixPQUFPLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBRSxDQUFDO1FBQ1YsTUFBTSxFQUFFLENBQUM7UUFDVCxNQUFNLEVBQUUsQ0FBQztRQUNULE9BQU8sRUFBRSxDQUFDO1FBQ1YsT0FBTyxFQUFFLENBQUM7S0FDWCxDQUFBO0lBRUQsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JCLElBQUksT0FBTyxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFrQixDQUFBO1lBQzNDLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3ZFLENBQUM7YUFBTSxDQUFDO1lBQ04sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUE7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQVU7UUFDNUIsSUFBSSxFQUFFLFdBQVc7UUFDakIsUUFBUTtRQUNSLDRCQUE0QixFQUFFLElBQUk7UUFDbEMsZUFBZSxFQUFFLEtBQUs7UUFDdEIsaUJBQWlCLEVBQUUsb0RBQW9EO0tBQ3hFLENBQUMsQ0FBQTtJQUNGLE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMsQ0FBQTtBQUVELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUN2QyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFFckgsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQTJCO0lBQ3pELElBQUksRUFBRSxVQUFVO0lBQ2hCLE1BQU0sRUFBRSxZQUFZO0lBQ3BCLEtBQUssRUFBRSxlQUFlO0lBQ3RCLE1BQU0sRUFBRSxVQUFVO0lBQ2xCLE1BQU0sRUFBRSxvQkFBb0I7SUFDNUIsT0FBTyxFQUFFLHlFQUF5RTtJQUNsRixLQUFLLEVBQUUsZUFBZTtJQUN0QixPQUFPLEVBQUUsV0FBVztJQUNwQixPQUFPLEVBQUUsYUFBYTtJQUN0QixLQUFLLEVBQUUsaUJBQWlCO0lBQ3hCLE9BQU8sRUFBRSxrQkFBa0I7SUFDM0IsS0FBSyxFQUFFLGVBQWU7SUFDdEIsTUFBTSxFQUFFLGlCQUFpQjtJQUN6QixNQUFNLEVBQUUsWUFBWTtJQUNwQixPQUFPLEVBQUUsMkVBQTJFO0lBQ3BGLEtBQUssRUFBRSxlQUFlO0lBQ3RCLEtBQUssRUFBRSxhQUFhO0lBQ3BCLEtBQUssRUFBRSxrQkFBa0I7SUFDekIsTUFBTSxFQUFFLFlBQVk7SUFDcEIsS0FBSyxFQUFFLHdCQUF3QjtJQUMvQixNQUFNLEVBQUUsWUFBWTtDQUNyQixDQUFBO0FBQ0QsY0FBYyxZQUFZLENBQUE7QUFDMUIsY0FBYyxnQkFBZ0IsQ0FBQTtBQUM5QixjQUFjLGlCQUFpQixDQUFBO0FBRS9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/kbot/dist-in/prompt.js b/packages/kbot/dist-in/prompt.js index fc99c3ba..9622b6ce 100644 --- a/packages/kbot/dist-in/prompt.js +++ b/packages/kbot/dist-in/prompt.js @@ -13,9 +13,11 @@ export const prompt = async (opts) => { }; }; export const preferences = async (opts) => { - let preferencesPath = path.resolve(resolve(opts.preferences, false, env_vars())); + // First try local preferences + let preferencesPath = path.resolve(path.join(process.cwd(), PREFERENCES_FILE_NAME)); if (!exists(preferencesPath)) { - preferencesPath = path.resolve(path.join(process.cwd(), PREFERENCES_FILE_NAME)); + // Fall back to specified preferences path if local file doesn't exist + preferencesPath = path.resolve(resolve(opts.preferences, false, env_vars())); } const preferences = read(preferencesPath, 'string'); return { @@ -23,4 +25,4 @@ export const preferences = async (opts) => { content: `USER Preferences : ${preferences}` || '' }; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb21wdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBRWpDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFdEQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFBRSxJQUFlLEVBQW1ELEVBQUU7SUFDN0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdEMsT0FBTztRQUNILElBQUksRUFBRSxNQUFNO1FBQ1osT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFO0tBQ3ZCLENBQUE7QUFDTCxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLElBQWUsRUFBbUQsRUFBRTtJQUNsRyxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDaEYsSUFBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQzFCLGVBQWUsR0FBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQTtJQUNyRixDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQVcsQ0FBQTtJQUM3RCxPQUFPO1FBQ0gsSUFBSSxFQUFFLE1BQU07UUFDWixPQUFPLEVBQUUsc0JBQXNCLFdBQVcsRUFBRSxJQUFJLEVBQUU7S0FDckQsQ0FBQTtBQUNMLENBQUMsQ0FBQSJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb21wdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBRWpDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFdEQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFBRSxJQUFlLEVBQW1ELEVBQUU7SUFDN0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdEMsT0FBTztRQUNILElBQUksRUFBRSxNQUFNO1FBQ1osT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFO0tBQ3ZCLENBQUE7QUFDTCxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLElBQWUsRUFBbUQsRUFBRTtJQUNsRyw4QkFBOEI7SUFDOUIsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUE7SUFDbkYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQzNCLHNFQUFzRTtRQUN0RSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ2hGLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBVyxDQUFBO0lBQzdELE9BQU87UUFDSCxJQUFJLEVBQUUsTUFBTTtRQUNaLE9BQU8sRUFBRSxzQkFBc0IsV0FBVyxFQUFFLElBQUksRUFBRTtLQUNyRCxDQUFBO0FBQ0wsQ0FBQyxDQUFBIn0= \ No newline at end of file diff --git a/packages/kbot/src/collector.ts b/packages/kbot/src/collector.ts index 2048c701..c78bd273 100644 --- a/packages/kbot/src/collector.ts +++ b/packages/kbot/src/collector.ts @@ -7,11 +7,12 @@ import { RunnableFunctionWithParse } from 'openai/lib/RunnableFunction' import { winstonLogger, } from '@polymech/ai-tools' import { IKBotOptions } from './zod_types.js' -import { logger as loggerIntern } from './index.js' +import { getLogger } from './index.js' import { ChatCompletion, ChatCompletionMessage, ChatCompletionMessageParam } from 'openai/resources/index.mjs' export const collector = (options: IKBotOptions, client: OpenAI): ICollector => { + const loggerIntern = getLogger(options) return { //OpenAI onMessage: (message: ChatCompletionMessageParam) => { diff --git a/packages/kbot/src/commands/log.ts b/packages/kbot/src/commands/log.ts deleted file mode 100644 index 87079af7..00000000 --- a/packages/kbot/src/commands/log.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as path from 'node:path' -import { sync as read } from '@polymech/fs/read' -import { sync as exists } from '@polymech/fs/exists' -import { Logger } from 'tslog' -import { logger } from '../' diff --git a/packages/kbot/src/commands/run-completion.ts b/packages/kbot/src/commands/run-completion.ts index 13329d78..2e2c8b05 100644 --- a/packages/kbot/src/commands/run-completion.ts +++ b/packages/kbot/src/commands/run-completion.ts @@ -4,10 +4,8 @@ import { markedTerminal } from 'marked-terminal' import * as path from 'node:path' import { sync as write } from '@polymech/fs/write' import { resolve } from '@polymech/commons' - import { IKBotTask } from '@polymech/ai-tools' -import { logger } from '../index.js' import { dumpAsScript } from '../utils/script.js' import { applyFilters, Filter } from '../filters.js' import { variables } from '../variables.js' @@ -23,7 +21,7 @@ export const onCompletion = async (result: any = "", options: IKBotTask) => { ROUTER: options.router, })) write(dstPath, result) - logger.debug(`Wrote completion result to ${dstPath} : ${options.dst}`) + options.logger.debug(`Wrote completion result to ${dstPath} : ${options.dst}`) } else { marked.use(markedTerminal({ emoji: false, @@ -38,7 +36,7 @@ export const onCompletion = async (result: any = "", options: IKBotTask) => { export const runCompletion = async (client: OpenAI, params: any, options: IKBotTask) => { if (options.dry) { - logger.info('Dry run - skipping API call') + options.logger.info('Dry run - skipping API call') return false } // await client.beta.chat.completions.parse diff --git a/packages/kbot/src/commands/run-each.ts b/packages/kbot/src/commands/run-each.ts deleted file mode 100644 index e34ecdc4..00000000 --- a/packages/kbot/src/commands/run-each.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { globSync } from 'glob' -import * as path from 'node:path' -import { forward_slash } from '@polymech/commons' -import { logger } from '../' -import { IKBotTask } from '@polymech/ai-tools' - -export const runEach = async (opts: IKBotTask, processRun: (args: IKBotTask) => Promise) => { - const ret = [] - - if (opts.each) { - const matches = globSync(opts.each, { - cwd: path.resolve(opts.path), - absolute: false - }) - if(matches.length === 0) { - logger.warn(`No files matching pattern ${opts.each} found in ${opts.path}`) - return ret - } - logger.info(`Processing ${matches.length} files matching pattern ${opts.each}...`) - for (const file of matches) { - logger.info(`Processing ${file}...`) - const fileOpts = { ...opts } - fileOpts.include = [ forward_slash(file)] - ret.push(await processRun(fileOpts)) - } - } else { - ret.push(await processRun(opts)) - } - return ret -} diff --git a/packages/kbot/src/commands/run-tools.ts b/packages/kbot/src/commands/run-tools.ts index c2e90f06..3cc97d82 100644 --- a/packages/kbot/src/commands/run-tools.ts +++ b/packages/kbot/src/commands/run-tools.ts @@ -5,7 +5,6 @@ import { ChatCompletionToolRunnerParams } from 'openai/lib/ChatCompletionRunner' import { IKBotTask, ICollector } from '@polymech/ai-tools' import { content } from '../utils/content.js' -import { logger } from '../index.js' import { onCompletion } from './run-completion.js' export const runTools = async (client: OpenAI, params: any, options: IKBotTask) => { @@ -17,7 +16,7 @@ export const runTools = async (client: OpenAI, params: any, options: IKBotTask) messages: [] } if (options.dry) { - logger.info('Dry run - skipping API call') + options.logger.info('Dry run - skipping API call') return { result: 'DRY RUN', sessionMessages, @@ -48,7 +47,7 @@ export const runTools = async (client: OpenAI, params: any, options: IKBotTask) .on('chatCompletion', (options.collector as ICollector).onChatCompletion) .on('content', (options.collector as ICollector).onContent) } catch (e) { - logger.trace(e) + options.logger.trace(e) } let result = content(runner) @@ -56,10 +55,10 @@ export const runTools = async (client: OpenAI, params: any, options: IKBotTask) result = await runner.finalChatCompletion() } catch (error) { if (error.message.includes("(reading 'map')")) { - logger.error('Failed to complete runner: credits :)', error.message, error.message, error) + options.logger.error('Failed to complete runner: credits :)', error.message, error.message, error) return } - logger.error('Failed to complete runner:', error.message, error.issues) + options.logger.error('Failed to complete runner:', error.message, error.issues) return } const ret = content(result) diff --git a/packages/kbot/src/commands/run.ts b/packages/kbot/src/commands/run.ts index 14fb353f..6b5cbbd2 100644 --- a/packages/kbot/src/commands/run.ts +++ b/packages/kbot/src/commands/run.ts @@ -10,10 +10,7 @@ import { ChatCompletionToolRunnerParams } from 'openai/lib/ChatCompletionRunner' import { ChatCompletionMessageParam } from 'openai/resources/index.mjs' import { IKBotTask } from '@polymech/ai-tools' - -import { createLogger } from '@polymech/log' import { Logger, ILogObj } from 'tslog' - import { createClient } from '../client.js' import { OptionsSchema } from '../zod_schema.js' import { get } from '../source.js' @@ -29,12 +26,14 @@ import { runCompletion } from './run-completion.js' import { runTools } from './run-tools.js' import { runAssistant } from './run-assistant.js' import { all } from '../models/index.js' +import { getLogger } from '../index.js' export const processRun = async (opts: IKBotTask) => { + let options: IKBotTask = null - const logger = new Logger({ - minLevel: opts.logLevel - }) + const logger = getLogger(opts) + opts.logger = logger + const target = path.resolve(opts.output || opts.path) if (!exists(target)) { dir(target) diff --git a/packages/kbot/src/index.ts b/packages/kbot/src/index.ts index 4e08ce6d..c72f9052 100644 --- a/packages/kbot/src/index.ts +++ b/packages/kbot/src/index.ts @@ -5,9 +5,46 @@ const isWindows = platform === 'win32' import { get_var } from '@polymech/commons' import { MODULE_NAME } from './constants.js' +import { IKBotTask } from '@polymech/ai-tools' import { createLogger } from '@polymech/log' export const logger = createLogger('llm-tools') as unknown as Logger + +let _logger: Logger = logger + +export const getLogger = (options: IKBotTask): Logger => { + if (_logger) { + return _logger + } + const logLevelMap: Record = { + 'silly': 0, + 'trace': 1, + 'debug': 2, + 'info': 3, + 'warn': 4, + 'error': 5, + 'fatal': 6 + } + + let minLevel = logLevelMap['info'] + if (options.logLevel) { + if (typeof options.logLevel === 'string') { + const levelStr = options.logLevel as string + minLevel = logLevelMap[levelStr.toLowerCase()] || logLevelMap['info'] + } else { + minLevel = options.logLevel + } + } + _logger = new Logger({ + name: MODULE_NAME, + minLevel, + hideLogPositionForProduction: true, + maskPlaceholder: '***', + prettyLogTemplate: "{{logLevelName}}\t[{{filePathWithLine}}{{name}}]\t", + }) + return _logger +} + export { run } from './commands/run.js' export const module_root = () => path.resolve(path.join(get_var(isWindows ? 'HOMEPATH' : 'HOME'), `.${MODULE_NAME}`)) diff --git a/packages/kbot/src/prompt.ts b/packages/kbot/src/prompt.ts index 9e23f1a7..8fbab641 100644 --- a/packages/kbot/src/prompt.ts +++ b/packages/kbot/src/prompt.ts @@ -20,9 +20,11 @@ export const prompt = async (opts: IKBotTask): Promise => { - let preferencesPath = path.resolve(resolve(opts.preferences, false, env_vars())) - if(!exists(preferencesPath)) { - preferencesPath = path.resolve(path.join(process.cwd(), PREFERENCES_FILE_NAME)) + // First try local preferences + let preferencesPath = path.resolve(path.join(process.cwd(), PREFERENCES_FILE_NAME)) + if (!exists(preferencesPath)) { + // Fall back to specified preferences path if local file doesn't exist + preferencesPath = path.resolve(resolve(opts.preferences, false, env_vars())) } const preferences = read(preferencesPath, 'string') as string return { diff --git a/packages/kbot/tests/response-format/tools-research.json b/packages/kbot/tests/response-format/tools-research.json index 330ae1cd..c06f4df8 100644 --- a/packages/kbot/tests/response-format/tools-research.json +++ b/packages/kbot/tests/response-format/tools-research.json @@ -1,22 +1,45 @@ -Here's a comprehensive list of hardware/software resources for cutting HDPE sheets with X-Carve CNC, formatted to your preferences: +To cut HDPE sheets using an X-Carve CNC, you'll need the following hardware and software resources: -## Hardware Requirements -- **X-Carve CNC Machine** with vacuum table or clamps -- **1/8" (3.175 mm) flat flute cutting bit** - Ideal for plastic cutting[1] -- **CNC Clamps** - From X-Carve kit for material securing[1] -- **HDPE Sheet** - Measure thickness carefully (typical: 3-6mm) -- **Safety Equipment** - Goggles, hearing protection +--- -## Software Stack -- **Easel CAM Software** (Free) - X-Carve integration with HDPE material profile[1][2] -- **Inkscape** (Open-source) - Vector design creation/modification[2] -- **The Noun Project** - Source for ready-made SVG vectors ([nounproject.com][3]) +## **Hardware Resources** +1. **X-Carve CNC Machine** + - Core tool for milling/cutting operations, compatible with HDPE sheets [1][7]. + - Optional upgrades available for extended bed sizes (e.g., 1800mm rail extensions) [4]. -## Tutorial Resources -- [Complete Spanish video guide with subtitles](https://www.youtube.com/watch?v=4LrrFz802To) [1] -- [Alternative manual routing techniques](https://youtu.be/gxkcffQD3eQ) [4] +2. **CNC Clamping System** + - Secures HDPE sheets using X-Carve clamps to prevent movement during cutting [1][7]. -Addendum: Always verify machine calibration and perform test cuts on scrap material before final operation. +3. **1/8" Flat Flute Cutting Bits** + - Recommended for clean HDPE cuts (shank diameter: 3.175mm, cutting diameter: 3.175mm) [1][5][7]. + - Alternative options: Use manual routers/jigsaws with coarse-tooth blades for basic cuts [6]. -kind regards, -Guenter \ No newline at end of file +4. **HDPE Plastic Sheets** + - Ideal thickness depends on project requirements; ensure sheets are measured (height, width, thickness) before cutting [1][7]. + +5. **Post-Processing Tools** + - Sandpaper/files for smoothing edges after CNC cutting. + +--- + +## **Software Resources** +1. **Easel (CAM Software)** + - Free cloud-based tool for designing, simulating cuts, and generating toolpaths [1][2][7][8]. + - Key features: + - Built-in HDPE material profile [1][7] + - SVG/vector file imports [2][7] + - 3D machining and automated toolpath generation (with Easel Pro) [2][8] + +2. **Inkscape (Vector Design)** + - Open-source software for creating/editing SVG files [1][3][7]. + - Used with **Path > Trace Bitmap** to convert raster images into CNC-ready vectors [3]. + +3. **The Noun Project** + - Source for open-source SVG designs compatible with Easel [1][7]. + +--- + +## **Tutorial Resources** +- **Spanish Video Guide**: Step-by-step process with subtitles [YouTube](https://www.youtube.com/watch?v=4LrrFz802To) [1][7]. +- **Alternative Methods**: Manual cutting demo [YouTube](https://youtu.be/gxkcffQD3eQ) [1]. +- **Community Support**: Share results on [Precious Plastic forums](https://community.preciousplastic.com) [1][7]. \ No newline at end of file diff --git a/packages/kbot/tests/unit/math.test.ts b/packages/kbot/tests/unit/math.test.ts index daf38cf9..7cb7f306 100644 --- a/packages/kbot/tests/unit/math.test.ts +++ b/packages/kbot/tests/unit/math.test.ts @@ -24,13 +24,13 @@ describe('Math Operations', () => { it.each(models)('should solve quadratic equation with model %s', async (modelName) => { const result = await runTest( 'Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.', - '-3,-2', + '-2,-3', 'quadratic', modelName, TEST_LOG_PATH ) testResults.push(result) - expect(result.result[0]?.trim()?.toLowerCase()).toEqual('-3,-2') + expect(result.result[0]?.trim()?.toLowerCase()).toEqual('-2,-3') }, { timeout: TEST_TIMEOUT }) it.each(models)('should calculate factorial with model %s', async (modelName) => { diff --git a/packages/kbot/tests/unit/reports/all.json b/packages/kbot/tests/unit/reports/all.json index b93e3f42..6acb99f2 100644 --- a/packages/kbot/tests/unit/reports/all.json +++ b/packages/kbot/tests/unit/reports/all.json @@ -6403,6 +6403,779 @@ "passed": true, "duration": 760, "category": "basic" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "-2, -3" + ], + "expected": "-3,-2", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:08:37.779Z", + "passed": false, + "duration": 1244, + "reason": "Expected -3,-2, but got -2, -3", + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "The solutions to the quadratic equation x² + 5x + 6 = 0 are -2 and -3.\n\n\\boxed{-2}, \\boxed{-3}" + ], + "expected": "-3,-2", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:08:48.803Z", + "passed": false, + "duration": 11013, + "reason": "Expected -3,-2, but got the solutions to the quadratic equation x² + 5x + 6 = 0 are -2 and -3.\n\n\\boxed{-2}, \\boxed{-3}", + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "-2, -3" + ], + "expected": "-3,-2", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:08:50.291Z", + "passed": false, + "duration": 1482, + "reason": "Expected -3,-2, but got -2, -3", + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:08:51.033Z", + "passed": true, + "duration": 736, + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:08:55.877Z", + "passed": true, + "duration": 4838, + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:08:56.613Z", + "passed": true, + "duration": 730, + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:08:57.421Z", + "passed": true, + "duration": 802, + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "The 6th number in the Fibonacci sequence is 5. \n\n5" + ], + "expected": "8", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:09:04.449Z", + "passed": false, + "duration": 7023, + "reason": "Expected 8, but got the 6th number in the fibonacci sequence is 5. \n\n5", + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "5" + ], + "expected": "8", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:09:05.286Z", + "passed": false, + "duration": 831, + "reason": "Expected 8, but got 5", + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:09:06.233Z", + "passed": true, + "duration": 940, + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:09:08.662Z", + "passed": true, + "duration": 2423, + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:09:09.441Z", + "passed": true, + "duration": 773, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:09:10.298Z", + "passed": true, + "duration": 851, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:09:11.870Z", + "passed": true, + "duration": 1566, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:09:12.628Z", + "passed": true, + "duration": 753, + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "-2, -3" + ], + "expected": "-2,-3", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:11:07.251Z", + "passed": false, + "duration": 1329, + "reason": "Expected -2,-3, but got -2, -3", + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "-2, -3" + ], + "expected": "-2,-3", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:11:14.807Z", + "passed": false, + "duration": 7547, + "reason": "Expected -2,-3, but got -2, -3", + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "-2, -3" + ], + "expected": "-2,-3", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:11:15.551Z", + "passed": false, + "duration": 738, + "reason": "Expected -2,-3, but got -2, -3", + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:11:16.305Z", + "passed": true, + "duration": 749, + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:11:21.413Z", + "passed": true, + "duration": 5102, + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:11:22.690Z", + "passed": true, + "duration": 1271, + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:11:23.404Z", + "passed": true, + "duration": 707, + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "5" + ], + "expected": "8", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:11:32.032Z", + "passed": false, + "duration": 8621, + "reason": "Expected 8, but got 5", + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "5" + ], + "expected": "8", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:11:33.022Z", + "passed": false, + "duration": 983, + "reason": "Expected 8, but got 5", + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:11:33.875Z", + "passed": true, + "duration": 845, + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:11:37.488Z", + "passed": true, + "duration": 3608, + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:11:38.246Z", + "passed": true, + "duration": 753, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:11:39.169Z", + "passed": true, + "duration": 918, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:11:43.117Z", + "passed": true, + "duration": 3943, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:11:44.077Z", + "passed": true, + "duration": 954, + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "-3, -2" + ], + "expected": "-2,-3", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:09:38.709Z", + "passed": false, + "duration": 1685, + "reason": "Expected -2,-3, but got -3, -2", + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "The solutions to the quadratic equation x² + 5x + 6 = 0 are -2 and -3.\n\nSpecific steps:\n\n1. **Identify coefficients**: a = 1, b = 5, c = 6.\n2. **Calculate discriminant**: b² - 4ac = 25 - 24 = 1.\n3. **Apply quadratic formula**: x = (-5 ± √1)/2.\n4. **Compute solutions**: x = (-5 + 1)/2 = -2 and x = (-5 - 1)/2 = -3.\n\n-2, -3\n\nAnswer: -2,-3" + ], + "expected": "-2,-3", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:09:49.547Z", + "passed": false, + "duration": 10827, + "reason": "Expected -2,-3, but got the solutions to the quadratic equation x² + 5x + 6 = 0 are -2 and -3.\n\nspecific steps:\n\n1. **identify coefficients**: a = 1, b = 5, c = 6.\n2. **calculate discriminant**: b² - 4ac = 25 - 24 = 1.\n3. **apply quadratic formula**: x = (-5 ± √1)/2.\n4. **compute solutions**: x = (-5 + 1)/2 = -2 and x = (-5 - 1)/2 = -3.\n\n-2, -3\n\nanswer: -2,-3", + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "-2, -3" + ], + "expected": "-2,-3", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:09:50.489Z", + "passed": false, + "duration": 935, + "reason": "Expected -2,-3, but got -2, -3", + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:09:54.489Z", + "passed": true, + "duration": 3991, + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "5! = 120\n\nThe factorial of 5 is calculated as:\n\n5 × 4 × 3 × 2 × 1 = 120\n\n**Answer:** 120" + ], + "expected": "120", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:10:03.614Z", + "passed": false, + "duration": 9116, + "reason": "Expected 120, but got 5! = 120\n\nthe factorial of 5 is calculated as:\n\n5 × 4 × 3 × 2 × 1 = 120\n\n**answer:** 120", + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:10:04.483Z", + "passed": true, + "duration": 861, + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:10:05.284Z", + "passed": true, + "duration": 792, + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "5" + ], + "expected": "8", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:10:13.584Z", + "passed": false, + "duration": 8292, + "reason": "Expected 8, but got 5", + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "5" + ], + "expected": "8", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:10:14.350Z", + "passed": false, + "duration": 756, + "reason": "Expected 8, but got 5", + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:10:15.250Z", + "passed": true, + "duration": 892, + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:10:17.013Z", + "passed": true, + "duration": 1755, + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:10:17.849Z", + "passed": true, + "duration": 828, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:10:18.651Z", + "passed": true, + "duration": 795, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:10:25.922Z", + "passed": true, + "duration": 7263, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:10:26.895Z", + "passed": true, + "duration": 966, + "category": "math" + }, + { + "test": "addition", + "prompt": "add 5 and 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:14:04.393Z", + "passed": true, + "duration": 1484, + "category": "basic" + }, + { + "test": "addition", + "prompt": "add 5 and 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:14:12.861Z", + "passed": true, + "duration": 8460, + "category": "basic" + }, + { + "test": "addition", + "prompt": "add 5 and 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:14:13.779Z", + "passed": true, + "duration": 910, + "category": "basic" + }, + { + "test": "multiplication", + "prompt": "multiply 8 and 3. Return only the number, no explanation.", + "result": [ + "24" + ], + "expected": "24", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:14:14.740Z", + "passed": true, + "duration": 955, + "category": "basic" + }, + { + "test": "multiplication", + "prompt": "multiply 8 and 3. Return only the number, no explanation.", + "result": [ + "24" + ], + "expected": "24", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:14:22.399Z", + "passed": true, + "duration": 7653, + "category": "basic" + }, + { + "test": "multiplication", + "prompt": "multiply 8 and 3. Return only the number, no explanation.", + "result": [ + "24" + ], + "expected": "24", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:14:23.502Z", + "passed": true, + "duration": 1095, + "category": "basic" + }, + { + "test": "division", + "prompt": "divide 15 by 3. Return only the number, no explanation.", + "result": [ + "5" + ], + "expected": "5", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:14:24.325Z", + "passed": true, + "duration": 816, + "category": "basic" + }, + { + "test": "division", + "prompt": "divide 15 by 3. Return only the number, no explanation.", + "result": [ + "15 divided by 3 is 5. \n\nAnswer: 5" + ], + "expected": "5", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:14:40.987Z", + "passed": false, + "duration": 16655, + "reason": "Expected 5, but got 15 divided by 3 is 5. \n\nanswer: 5", + "category": "basic" + }, + { + "test": "division", + "prompt": "divide 15 by 3. Return only the number, no explanation.", + "result": [ + "5" + ], + "expected": "5", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:14:41.951Z", + "passed": true, + "duration": 954, + "category": "basic" } ], "highscores": [ @@ -6411,8 +7184,8 @@ "rankings": [ { "model": "openai/gpt-4o-mini", - "duration": 1295, - "duration_secs": 1.295 + "duration": 935, + "duration_secs": 0.935 }, { "model": "anthropic/claude-3.5-sonnet", @@ -6425,14 +7198,14 @@ "test": "factorial", "rankings": [ { - "model": "openai/gpt-3.5-turbo", - "duration": 785, - "duration_secs": 0.785 + "model": "openai/gpt-4o-mini", + "duration": 861, + "duration_secs": 0.861 }, { - "model": "openai/gpt-4o-mini", - "duration": 876, - "duration_secs": 0.876 + "model": "anthropic/claude-3.5-sonnet", + "duration": 1454, + "duration_secs": 1.454 } ] }, @@ -6440,14 +7213,14 @@ "test": "fibonacci", "rankings": [ { - "model": "openai/gpt-3.5-turbo", - "duration": 898, - "duration_secs": 0.898 + "model": "openai/gpt-4o-mini", + "duration": 756, + "duration_secs": 0.756 }, { - "model": "openai/gpt-4o-mini", - "duration": 1149, - "duration_secs": 1.149 + "model": "openai/gpt-3.5-turbo", + "duration": 792, + "duration_secs": 0.792 } ] }, @@ -6460,9 +7233,9 @@ "duration_secs": 0.819 }, { - "model": "qwen/qwq-32b", - "duration": 890, - "duration_secs": 0.89 + "model": "openai/gpt-4o-mini", + "duration": 828, + "duration_secs": 0.828 } ] }, @@ -6471,13 +7244,13 @@ "rankings": [ { "model": "openai/gpt-3.5-turbo", - "duration": 866, - "duration_secs": 0.866 + "duration": 795, + "duration_secs": 0.795 }, { "model": "openai/gpt-4o-mini", - "duration": 875, - "duration_secs": 0.875 + "duration": 966, + "duration_secs": 0.966 } ] }, @@ -6486,13 +7259,13 @@ "rankings": [ { "model": "openai/gpt-4o-mini", - "duration": 791, - "duration_secs": 0.791 + "duration": 910, + "duration_secs": 0.91 }, { - "model": "anthropic/claude-3.5-sonnet", - "duration": 1689, - "duration_secs": 1.689 + "model": "openai/gpt-3.5-turbo", + "duration": 1484, + "duration_secs": 1.484 } ] }, @@ -6500,14 +7273,14 @@ "test": "multiplication", "rankings": [ { - "model": "anthropic/claude-3.5-sonnet", - "duration": 1190, - "duration_secs": 1.19 + "model": "openai/gpt-3.5-turbo", + "duration": 955, + "duration_secs": 0.955 }, { "model": "openai/gpt-4o-mini", - "duration": 1206, - "duration_secs": 1.206 + "duration": 1095, + "duration_secs": 1.095 } ] }, @@ -6515,14 +7288,14 @@ "test": "division", "rankings": [ { - "model": "openai/gpt-4o-mini", - "duration": 760, - "duration_secs": 0.76 + "model": "openai/gpt-3.5-turbo", + "duration": 816, + "duration_secs": 0.816 }, { - "model": "openai/gpt-3.5-turbo", - "duration": 783, - "duration_secs": 0.783 + "model": "qwen/qwq-32b", + "duration": 917, + "duration_secs": 0.917 } ] }, @@ -6587,5 +7360,5 @@ ] } ], - "lastUpdated": "2025-04-02T22:06:51.780Z" + "lastUpdated": "2025-04-03T17:14:41.955Z" } \ No newline at end of file diff --git a/packages/kbot/tests/unit/reports/basic.json b/packages/kbot/tests/unit/reports/basic.json index 5bd79cfc..5992eb5a 100644 --- a/packages/kbot/tests/unit/reports/basic.json +++ b/packages/kbot/tests/unit/reports/basic.json @@ -1124,6 +1124,133 @@ "passed": true, "duration": 760, "category": "basic" + }, + { + "test": "addition", + "prompt": "add 5 and 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:14:04.393Z", + "passed": true, + "duration": 1484, + "category": "basic" + }, + { + "test": "addition", + "prompt": "add 5 and 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:14:12.861Z", + "passed": true, + "duration": 8460, + "category": "basic" + }, + { + "test": "addition", + "prompt": "add 5 and 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:14:13.779Z", + "passed": true, + "duration": 910, + "category": "basic" + }, + { + "test": "multiplication", + "prompt": "multiply 8 and 3. Return only the number, no explanation.", + "result": [ + "24" + ], + "expected": "24", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:14:14.740Z", + "passed": true, + "duration": 955, + "category": "basic" + }, + { + "test": "multiplication", + "prompt": "multiply 8 and 3. Return only the number, no explanation.", + "result": [ + "24" + ], + "expected": "24", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:14:22.399Z", + "passed": true, + "duration": 7653, + "category": "basic" + }, + { + "test": "multiplication", + "prompt": "multiply 8 and 3. Return only the number, no explanation.", + "result": [ + "24" + ], + "expected": "24", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:14:23.502Z", + "passed": true, + "duration": 1095, + "category": "basic" + }, + { + "test": "division", + "prompt": "divide 15 by 3. Return only the number, no explanation.", + "result": [ + "5" + ], + "expected": "5", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:14:24.325Z", + "passed": true, + "duration": 816, + "category": "basic" + }, + { + "test": "division", + "prompt": "divide 15 by 3. Return only the number, no explanation.", + "result": [ + "15 divided by 3 is 5. \n\nAnswer: 5" + ], + "expected": "5", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:14:40.987Z", + "passed": false, + "duration": 16655, + "reason": "Expected 5, but got 15 divided by 3 is 5. \n\nanswer: 5", + "category": "basic" + }, + { + "test": "division", + "prompt": "divide 15 by 3. Return only the number, no explanation.", + "result": [ + "5" + ], + "expected": "5", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:14:41.951Z", + "passed": true, + "duration": 954, + "category": "basic" } ], "highscores": [ @@ -1132,13 +1259,13 @@ "rankings": [ { "model": "openai/gpt-4o-mini", - "duration": 791, - "duration_secs": 0.791 + "duration": 910, + "duration_secs": 0.91 }, { - "model": "anthropic/claude-3.5-sonnet", - "duration": 1689, - "duration_secs": 1.689 + "model": "openai/gpt-3.5-turbo", + "duration": 1484, + "duration_secs": 1.484 } ] }, @@ -1146,14 +1273,14 @@ "test": "multiplication", "rankings": [ { - "model": "anthropic/claude-3.5-sonnet", - "duration": 1190, - "duration_secs": 1.19 + "model": "openai/gpt-3.5-turbo", + "duration": 955, + "duration_secs": 0.955 }, { "model": "openai/gpt-4o-mini", - "duration": 1206, - "duration_secs": 1.206 + "duration": 1095, + "duration_secs": 1.095 } ] }, @@ -1161,17 +1288,17 @@ "test": "division", "rankings": [ { - "model": "openai/gpt-4o-mini", - "duration": 760, - "duration_secs": 0.76 + "model": "openai/gpt-3.5-turbo", + "duration": 816, + "duration_secs": 0.816 }, { - "model": "openai/gpt-3.5-turbo", - "duration": 783, - "duration_secs": 0.783 + "model": "qwen/qwq-32b", + "duration": 917, + "duration_secs": 0.917 } ] } ], - "lastUpdated": "2025-04-02T22:06:51.777Z" + "lastUpdated": "2025-04-03T17:14:41.951Z" } \ No newline at end of file diff --git a/packages/kbot/tests/unit/reports/basic.md b/packages/kbot/tests/unit/reports/basic.md index 76c367ef..01c15e3b 100644 --- a/packages/kbot/tests/unit/reports/basic.md +++ b/packages/kbot/tests/unit/reports/basic.md @@ -6,15 +6,15 @@ | Test | Model | Duration (ms) | Duration (s) | |------|-------|--------------|--------------| -| addition | openai/gpt-4o-mini | 791 | 0.79 | -| addition | deepseek/deepseek-r1-distill-qwen-14b:free | 2228 | 2.23 | -| addition | openai/gpt-3.5-turbo | 2263 | 2.26 | -| multiplication | openai/gpt-4o-mini | 1206 | 1.21 | -| multiplication | openai/gpt-3.5-turbo | 1300 | 1.30 | -| multiplication | deepseek/deepseek-r1-distill-qwen-14b:free | 2782 | 2.78 | -| division | openai/gpt-4o-mini | 760 | 0.76 | -| division | openai/gpt-3.5-turbo | 783 | 0.78 | -| division | deepseek/deepseek-r1-distill-qwen-14b:free | 2982 | 2.98 | +| addition | openai/gpt-4o-mini | 910 | 0.91 | +| addition | openai/gpt-3.5-turbo | 1484 | 1.48 | +| addition | deepseek/deepseek-r1-distill-qwen-14b:free | 8460 | 8.46 | +| multiplication | openai/gpt-3.5-turbo | 955 | 0.95 | +| multiplication | openai/gpt-4o-mini | 1095 | 1.09 | +| multiplication | deepseek/deepseek-r1-distill-qwen-14b:free | 7653 | 7.65 | +| division | openai/gpt-3.5-turbo | 816 | 0.82 | +| division | openai/gpt-4o-mini | 954 | 0.95 | +| division | deepseek/deepseek-r1-distill-qwen-14b:free | 16655 | 16.66 | ## Summary @@ -22,18 +22,22 @@ - Passed: 8 - Failed: 1 - Success Rate: 88.89% -- Average Duration: 1677ms (1.68s) +- Average Duration: 4331ms (4.33s) ## Failed Tests -### multiplication - deepseek/deepseek-r1-distill-qwen-14b:free +### division - deepseek/deepseek-r1-distill-qwen-14b:free -- Prompt: `multiply 8 and 3. Return only the number, no explanation.` -- Expected: `24` -- Actual: `8 × 3 = 24` -- Duration: 2782ms (2.78s) -- Reason: Expected 24, but got 8 × 3 = 24 -- Timestamp: 4/3/2025, 12:06:46 AM +- Prompt: `divide 15 by 3. Return only the number, no explanation.` +- Expected: `5` +- Actual: `15 divided by 3 is 5. + +Answer: 5` +- Duration: 16655ms (16.66s) +- Reason: Expected 5, but got 15 divided by 3 is 5. + +answer: 5 +- Timestamp: 4/3/2025, 7:14:40 PM ## Passed Tests @@ -42,62 +46,62 @@ - Prompt: `add 5 and 3. Return only the number, no explanation.` - Expected: `8` - Actual: `8` -- Duration: 2263ms (2.26s) -- Timestamp: 4/3/2025, 12:06:38 AM +- Duration: 1484ms (1.48s) +- Timestamp: 4/3/2025, 7:14:04 PM ### addition - deepseek/deepseek-r1-distill-qwen-14b:free - Prompt: `add 5 and 3. Return only the number, no explanation.` - Expected: `8` - Actual: `8` -- Duration: 2228ms (2.23s) -- Timestamp: 4/3/2025, 12:06:41 AM +- Duration: 8460ms (8.46s) +- Timestamp: 4/3/2025, 7:14:12 PM ### addition - openai/gpt-4o-mini - Prompt: `add 5 and 3. Return only the number, no explanation.` - Expected: `8` - Actual: `8` -- Duration: 791ms (0.79s) -- Timestamp: 4/3/2025, 12:06:41 AM +- Duration: 910ms (0.91s) +- Timestamp: 4/3/2025, 7:14:13 PM ### multiplication - openai/gpt-3.5-turbo - Prompt: `multiply 8 and 3. Return only the number, no explanation.` - Expected: `24` - Actual: `24` -- Duration: 1300ms (1.30s) -- Timestamp: 4/3/2025, 12:06:43 AM +- Duration: 955ms (0.95s) +- Timestamp: 4/3/2025, 7:14:14 PM + +### multiplication - deepseek/deepseek-r1-distill-qwen-14b:free + +- Prompt: `multiply 8 and 3. Return only the number, no explanation.` +- Expected: `24` +- Actual: `24` +- Duration: 7653ms (7.65s) +- Timestamp: 4/3/2025, 7:14:22 PM ### multiplication - openai/gpt-4o-mini - Prompt: `multiply 8 and 3. Return only the number, no explanation.` - Expected: `24` - Actual: `24` -- Duration: 1206ms (1.21s) -- Timestamp: 4/3/2025, 12:06:47 AM +- Duration: 1095ms (1.09s) +- Timestamp: 4/3/2025, 7:14:23 PM ### division - openai/gpt-3.5-turbo - Prompt: `divide 15 by 3. Return only the number, no explanation.` - Expected: `5` - Actual: `5` -- Duration: 783ms (0.78s) -- Timestamp: 4/3/2025, 12:06:48 AM - -### division - deepseek/deepseek-r1-distill-qwen-14b:free - -- Prompt: `divide 15 by 3. Return only the number, no explanation.` -- Expected: `5` -- Actual: `5` -- Duration: 2982ms (2.98s) -- Timestamp: 4/3/2025, 12:06:51 AM +- Duration: 816ms (0.82s) +- Timestamp: 4/3/2025, 7:14:24 PM ### division - openai/gpt-4o-mini - Prompt: `divide 15 by 3. Return only the number, no explanation.` - Expected: `5` - Actual: `5` -- Duration: 760ms (0.76s) -- Timestamp: 4/3/2025, 12:06:51 AM +- Duration: 954ms (0.95s) +- Timestamp: 4/3/2025, 7:14:41 PM diff --git a/packages/kbot/tests/unit/reports/math.json b/packages/kbot/tests/unit/reports/math.json index b29ba364..dea69c08 100644 --- a/packages/kbot/tests/unit/reports/math.json +++ b/packages/kbot/tests/unit/reports/math.json @@ -2182,6 +2182,652 @@ "duration": 1478, "reason": "Expected -3,-2, but got -3, -2", "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "-2, -3" + ], + "expected": "-3,-2", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:08:37.779Z", + "passed": false, + "duration": 1244, + "reason": "Expected -3,-2, but got -2, -3", + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "The solutions to the quadratic equation x² + 5x + 6 = 0 are -2 and -3.\n\n\\boxed{-2}, \\boxed{-3}" + ], + "expected": "-3,-2", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:08:48.803Z", + "passed": false, + "duration": 11013, + "reason": "Expected -3,-2, but got the solutions to the quadratic equation x² + 5x + 6 = 0 are -2 and -3.\n\n\\boxed{-2}, \\boxed{-3}", + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "-2, -3" + ], + "expected": "-3,-2", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:08:50.291Z", + "passed": false, + "duration": 1482, + "reason": "Expected -3,-2, but got -2, -3", + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:08:51.033Z", + "passed": true, + "duration": 736, + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:08:55.877Z", + "passed": true, + "duration": 4838, + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:08:56.613Z", + "passed": true, + "duration": 730, + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:08:57.421Z", + "passed": true, + "duration": 802, + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "The 6th number in the Fibonacci sequence is 5. \n\n5" + ], + "expected": "8", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:09:04.449Z", + "passed": false, + "duration": 7023, + "reason": "Expected 8, but got the 6th number in the fibonacci sequence is 5. \n\n5", + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "5" + ], + "expected": "8", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:09:05.286Z", + "passed": false, + "duration": 831, + "reason": "Expected 8, but got 5", + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:09:06.233Z", + "passed": true, + "duration": 940, + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:09:08.662Z", + "passed": true, + "duration": 2423, + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:09:09.441Z", + "passed": true, + "duration": 773, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:09:10.298Z", + "passed": true, + "duration": 851, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:09:11.870Z", + "passed": true, + "duration": 1566, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:09:12.628Z", + "passed": true, + "duration": 753, + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "-2, -3" + ], + "expected": "-2,-3", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:11:07.251Z", + "passed": false, + "duration": 1329, + "reason": "Expected -2,-3, but got -2, -3", + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "-2, -3" + ], + "expected": "-2,-3", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:11:14.807Z", + "passed": false, + "duration": 7547, + "reason": "Expected -2,-3, but got -2, -3", + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "-2, -3" + ], + "expected": "-2,-3", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:11:15.551Z", + "passed": false, + "duration": 738, + "reason": "Expected -2,-3, but got -2, -3", + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:11:16.305Z", + "passed": true, + "duration": 749, + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:11:21.413Z", + "passed": true, + "duration": 5102, + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:11:22.690Z", + "passed": true, + "duration": 1271, + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:11:23.404Z", + "passed": true, + "duration": 707, + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "5" + ], + "expected": "8", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:11:32.032Z", + "passed": false, + "duration": 8621, + "reason": "Expected 8, but got 5", + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "5" + ], + "expected": "8", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:11:33.022Z", + "passed": false, + "duration": 983, + "reason": "Expected 8, but got 5", + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:11:33.875Z", + "passed": true, + "duration": 845, + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:11:37.488Z", + "passed": true, + "duration": 3608, + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:11:38.246Z", + "passed": true, + "duration": 753, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-02T22:11:39.169Z", + "passed": true, + "duration": 918, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-02T22:11:43.117Z", + "passed": true, + "duration": 3943, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-02T22:11:44.077Z", + "passed": true, + "duration": 954, + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "-3, -2" + ], + "expected": "-2,-3", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:09:38.709Z", + "passed": false, + "duration": 1685, + "reason": "Expected -2,-3, but got -3, -2", + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "The solutions to the quadratic equation x² + 5x + 6 = 0 are -2 and -3.\n\nSpecific steps:\n\n1. **Identify coefficients**: a = 1, b = 5, c = 6.\n2. **Calculate discriminant**: b² - 4ac = 25 - 24 = 1.\n3. **Apply quadratic formula**: x = (-5 ± √1)/2.\n4. **Compute solutions**: x = (-5 + 1)/2 = -2 and x = (-5 - 1)/2 = -3.\n\n-2, -3\n\nAnswer: -2,-3" + ], + "expected": "-2,-3", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:09:49.547Z", + "passed": false, + "duration": 10827, + "reason": "Expected -2,-3, but got the solutions to the quadratic equation x² + 5x + 6 = 0 are -2 and -3.\n\nspecific steps:\n\n1. **identify coefficients**: a = 1, b = 5, c = 6.\n2. **calculate discriminant**: b² - 4ac = 25 - 24 = 1.\n3. **apply quadratic formula**: x = (-5 ± √1)/2.\n4. **compute solutions**: x = (-5 + 1)/2 = -2 and x = (-5 - 1)/2 = -3.\n\n-2, -3\n\nanswer: -2,-3", + "category": "math" + }, + { + "test": "quadratic", + "prompt": "Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.", + "result": [ + "-2, -3" + ], + "expected": "-2,-3", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:09:50.489Z", + "passed": false, + "duration": 935, + "reason": "Expected -2,-3, but got -2, -3", + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:09:54.489Z", + "passed": true, + "duration": 3991, + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "5! = 120\n\nThe factorial of 5 is calculated as:\n\n5 × 4 × 3 × 2 × 1 = 120\n\n**Answer:** 120" + ], + "expected": "120", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:10:03.614Z", + "passed": false, + "duration": 9116, + "reason": "Expected 120, but got 5! = 120\n\nthe factorial of 5 is calculated as:\n\n5 × 4 × 3 × 2 × 1 = 120\n\n**answer:** 120", + "category": "math" + }, + { + "test": "factorial", + "prompt": "Calculate 5! (factorial of 5). Return only the number, no explanation.", + "result": [ + "120" + ], + "expected": "120", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:10:04.483Z", + "passed": true, + "duration": 861, + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:10:05.284Z", + "passed": true, + "duration": 792, + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "5" + ], + "expected": "8", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:10:13.584Z", + "passed": false, + "duration": 8292, + "reason": "Expected 8, but got 5", + "category": "math" + }, + { + "test": "fibonacci", + "prompt": "Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.", + "result": [ + "5" + ], + "expected": "8", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:10:14.350Z", + "passed": false, + "duration": 756, + "reason": "Expected 8, but got 5", + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:10:15.250Z", + "passed": true, + "duration": 892, + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:10:17.013Z", + "passed": true, + "duration": 1755, + "category": "math" + }, + { + "test": "square_root", + "prompt": "Calculate the square root of 16. Return only the number, no explanation.", + "result": [ + "4" + ], + "expected": "4", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:10:17.849Z", + "passed": true, + "duration": 828, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-3.5-turbo", + "router": "openai/gpt-3.5-turbo", + "timestamp": "2025-04-03T17:10:18.651Z", + "passed": true, + "duration": 795, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "deepseek/deepseek-r1-distill-qwen-14b:free", + "router": "deepseek/deepseek-r1-distill-qwen-14b:free", + "timestamp": "2025-04-03T17:10:25.922Z", + "passed": true, + "duration": 7263, + "category": "math" + }, + { + "test": "power", + "prompt": "Calculate 2 raised to the power of 3. Return only the number, no explanation.", + "result": [ + "8" + ], + "expected": "8", + "model": "openai/gpt-4o-mini", + "router": "openai/gpt-4o-mini", + "timestamp": "2025-04-03T17:10:26.895Z", + "passed": true, + "duration": 966, + "category": "math" } ], "highscores": [ @@ -2190,8 +2836,8 @@ "rankings": [ { "model": "openai/gpt-4o-mini", - "duration": 1295, - "duration_secs": 1.295 + "duration": 935, + "duration_secs": 0.935 }, { "model": "anthropic/claude-3.5-sonnet", @@ -2204,14 +2850,14 @@ "test": "factorial", "rankings": [ { - "model": "openai/gpt-3.5-turbo", - "duration": 785, - "duration_secs": 0.785 + "model": "openai/gpt-4o-mini", + "duration": 861, + "duration_secs": 0.861 }, { - "model": "openai/gpt-4o-mini", - "duration": 876, - "duration_secs": 0.876 + "model": "anthropic/claude-3.5-sonnet", + "duration": 1454, + "duration_secs": 1.454 } ] }, @@ -2219,14 +2865,14 @@ "test": "fibonacci", "rankings": [ { - "model": "openai/gpt-3.5-turbo", - "duration": 898, - "duration_secs": 0.898 + "model": "openai/gpt-4o-mini", + "duration": 756, + "duration_secs": 0.756 }, { - "model": "openai/gpt-4o-mini", - "duration": 1149, - "duration_secs": 1.149 + "model": "openai/gpt-3.5-turbo", + "duration": 792, + "duration_secs": 0.792 } ] }, @@ -2239,9 +2885,9 @@ "duration_secs": 0.819 }, { - "model": "qwen/qwq-32b", - "duration": 890, - "duration_secs": 0.89 + "model": "openai/gpt-4o-mini", + "duration": 828, + "duration_secs": 0.828 } ] }, @@ -2250,16 +2896,16 @@ "rankings": [ { "model": "openai/gpt-3.5-turbo", - "duration": 866, - "duration_secs": 0.866 + "duration": 795, + "duration_secs": 0.795 }, { "model": "openai/gpt-4o-mini", - "duration": 875, - "duration_secs": 0.875 + "duration": 966, + "duration_secs": 0.966 } ] } ], - "lastUpdated": "2025-04-02T13:43:41.958Z" + "lastUpdated": "2025-04-03T17:10:26.897Z" } \ No newline at end of file diff --git a/packages/kbot/tests/unit/reports/math.md b/packages/kbot/tests/unit/reports/math.md index 4c0b19f2..b9097b9d 100644 --- a/packages/kbot/tests/unit/reports/math.md +++ b/packages/kbot/tests/unit/reports/math.md @@ -2,283 +2,195 @@ ## Highscores +### Performance Rankings (Duration) + | Test | Model | Duration (ms) | Duration (s) | |------|-------|--------------|--------------| -| factorial | openai/gpt-3.5-turbo | 827 | 0.83 | -| factorial | openai/gpt-4o-mini | 956 | 0.96 | -| square_root | openai/gpt-4o-mini | 964 | 0.96 | -| square_root | openai/gpt-3.5-turbo | 1080 | 1.08 | -| power | anthropic/claude-3.5-sonnet | 1136 | 1.14 | -| power | openai/gpt-4o-mini | 1259 | 1.26 | -| power | openai/gpt-3.5-turbo | 1498 | 1.50 | -| fibonacci | openai/gpt-3.5-turbo | 1543 | 1.54 | -| fibonacci | openai/gpt-4o-mini | 1673 | 1.67 | -| factorial | anthropic/claude-3.5-sonnet | 1853 | 1.85 | -| fibonacci | anthropic/claude-3.5-sonnet | 2004 | 2.00 | -| square_root | anthropic/claude-3.5-sonnet | 2012 | 2.01 | -| factorial | deepseek/deepseek-r1-distill-qwen-14b:free | 4814 | 4.81 | -| power | deepseek/deepseek-r1 | 5414 | 5.41 | -| square_root | qwen/qwq-32b | 5888 | 5.89 | -| square_root | deepseek/deepseek-r1-distill-qwen-14b:free | 6114 | 6.11 | -| quadratic | qwen/qwq-32b | 6795 | 6.79 | -| factorial | qwen/qwq-32b | 6892 | 6.89 | -| power | qwen/qwq-32b | 7572 | 7.57 | -| power | deepseek/deepseek-r1-distill-qwen-14b:free | 9891 | 9.89 | -| square_root | deepseek/deepseek-r1 | 10309 | 10.31 | -| factorial | deepseek/deepseek-r1 | 11193 | 11.19 | +| quadratic | openai/gpt-4o-mini | 935 | 0.94 | +| quadratic | openai/gpt-3.5-turbo | 1685 | 1.69 | +| quadratic | deepseek/deepseek-r1-distill-qwen-14b:free | 10827 | 10.83 | +| factorial | openai/gpt-4o-mini | 861 | 0.86 | +| factorial | openai/gpt-3.5-turbo | 3991 | 3.99 | +| factorial | deepseek/deepseek-r1-distill-qwen-14b:free | 9116 | 9.12 | +| fibonacci | openai/gpt-4o-mini | 756 | 0.76 | +| fibonacci | openai/gpt-3.5-turbo | 792 | 0.79 | +| fibonacci | deepseek/deepseek-r1-distill-qwen-14b:free | 8292 | 8.29 | +| square_root | openai/gpt-4o-mini | 828 | 0.83 | +| square_root | openai/gpt-3.5-turbo | 892 | 0.89 | +| square_root | deepseek/deepseek-r1-distill-qwen-14b:free | 1755 | 1.75 | +| power | openai/gpt-3.5-turbo | 795 | 0.80 | +| power | openai/gpt-4o-mini | 966 | 0.97 | +| power | deepseek/deepseek-r1-distill-qwen-14b:free | 7263 | 7.26 | ## Summary -- Total Tests: 29 -- Passed: 22 -- Failed: 7 -- Success Rate: 75.86% -- Average Duration: 4745ms (4.75s) +- Total Tests: 15 +- Passed: 9 +- Failed: 6 +- Success Rate: 60.00% +- Average Duration: 3317ms (3.32s) ## Failed Tests -### quadratic - anthropic/claude-3.5-sonnet - -- Prompt: `Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.` -- Expected: `-3,-2` -- Actual: `-2,-3` -- Duration: 1892ms (1892.00s) -- Reason: Expected -3,-2, but got -2,-3 -- Timestamp: 4/2/2025, 3:32:51 PM - -### quadratic - openai/gpt-4o-mini - -- Prompt: `Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.` -- Expected: `-3,-2` -- Actual: `-2, -3` -- Duration: 853ms (853.00s) -- Reason: Expected -3,-2, but got -2, -3 -- Timestamp: 4/2/2025, 3:32:59 PM - ### quadratic - openai/gpt-3.5-turbo - Prompt: `Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.` -- Expected: `-3,-2` -- Actual: `-2, -3` -- Duration: 832ms (832.00s) -- Reason: Expected -3,-2, but got -2, -3 -- Timestamp: 4/2/2025, 3:32:59 PM - -### quadratic - deepseek/deepseek-r1 - -- Prompt: `Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.` -- Expected: `-3,-2` -- Actual: `-2, -3` -- Duration: 19850ms (19850.00s) -- Reason: Expected -3,-2, but got -2, -3 -- Timestamp: 4/2/2025, 3:33:19 PM +- Expected: `-2,-3` +- Actual: `-3, -2` +- Duration: 1685ms (1.69s) +- Reason: Expected -2,-3, but got -3, -2 +- Timestamp: 4/3/2025, 7:09:38 PM ### quadratic - deepseek/deepseek-r1-distill-qwen-14b:free - Prompt: `Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.` -- Expected: `-3,-2` -- Actual: `The solutions to the quadratic equation x² + 5x + 6 = 0 are x = -2 and x = -3. +- Expected: `-2,-3` +- Actual: `The solutions to the quadratic equation x² + 5x + 6 = 0 are -2 and -3. --2,-3` -- Duration: 15811ms (15811.00s) -- Reason: Expected -3,-2, but got the solutions to the quadratic equation x² + 5x + 6 = 0 are x = -2 and x = -3. +Specific steps: --2,-3 -- Timestamp: 4/2/2025, 3:33:35 PM +1. **Identify coefficients**: a = 1, b = 5, c = 6. +2. **Calculate discriminant**: b² - 4ac = 25 - 24 = 1. +3. **Apply quadratic formula**: x = (-5 ± √1)/2. +4. **Compute solutions**: x = (-5 + 1)/2 = -2 and x = (-5 - 1)/2 = -3. -### fibonacci - qwen/qwq-32b +-2, -3 -- Prompt: `Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.` -- Expected: `8` -- Actual: `5` -- Duration: 1509ms (1509.00s) -- Reason: Expected 8, but got 5 -- Timestamp: 4/2/2025, 3:34:05 PM +Answer: -2,-3` +- Duration: 10827ms (10.83s) +- Reason: Expected -2,-3, but got the solutions to the quadratic equation x² + 5x + 6 = 0 are -2 and -3. + +specific steps: + +1. **identify coefficients**: a = 1, b = 5, c = 6. +2. **calculate discriminant**: b² - 4ac = 25 - 24 = 1. +3. **apply quadratic formula**: x = (-5 ± √1)/2. +4. **compute solutions**: x = (-5 + 1)/2 = -2 and x = (-5 - 1)/2 = -3. + +-2, -3 + +answer: -2,-3 +- Timestamp: 4/3/2025, 7:09:49 PM + +### quadratic - openai/gpt-4o-mini + +- Prompt: `Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.` +- Expected: `-2,-3` +- Actual: `-2, -3` +- Duration: 935ms (0.94s) +- Reason: Expected -2,-3, but got -2, -3 +- Timestamp: 4/3/2025, 7:09:50 PM + +### factorial - deepseek/deepseek-r1-distill-qwen-14b:free + +- Prompt: `Calculate 5! (factorial of 5). Return only the number, no explanation.` +- Expected: `120` +- Actual: `5! = 120 + +The factorial of 5 is calculated as: + +5 × 4 × 3 × 2 × 1 = 120 + +**Answer:** 120` +- Duration: 9116ms (9.12s) +- Reason: Expected 120, but got 5! = 120 + +the factorial of 5 is calculated as: + +5 × 4 × 3 × 2 × 1 = 120 + +**answer:** 120 +- Timestamp: 4/3/2025, 7:10:03 PM ### fibonacci - deepseek/deepseek-r1-distill-qwen-14b:free - Prompt: `Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.` - Expected: `8` - Actual: `5` -- Duration: 5171ms (5171.00s) +- Duration: 8292ms (8.29s) - Reason: Expected 8, but got 5 -- Timestamp: 4/2/2025, 3:34:44 PM +- Timestamp: 4/3/2025, 7:10:13 PM + +### fibonacci - openai/gpt-4o-mini + +- Prompt: `Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.` +- Expected: `8` +- Actual: `5` +- Duration: 756ms (0.76s) +- Reason: Expected 8, but got 5 +- Timestamp: 4/3/2025, 7:10:14 PM ## Passed Tests -### quadratic - qwen/qwq-32b - -- Prompt: `Solve the quadratic equation x² + 5x + 6 = 0. Return only the solutions as comma-separated numbers, no explanation.` -- Expected: `-3,-2` -- Actual: `-3,-2` -- Duration: 6795ms (6795.00s) -- Timestamp: 4/2/2025, 3:32:58 PM - -### factorial - anthropic/claude-3.5-sonnet - -- Prompt: `Calculate 5! (factorial of 5). Return only the number, no explanation.` -- Expected: `120` -- Actual: `120` -- Duration: 1853ms (1853.00s) -- Timestamp: 4/2/2025, 3:33:37 PM - -### factorial - qwen/qwq-32b - -- Prompt: `Calculate 5! (factorial of 5). Return only the number, no explanation.` -- Expected: `120` -- Actual: `120` -- Duration: 6892ms (6892.00s) -- Timestamp: 4/2/2025, 3:33:44 PM - -### factorial - openai/gpt-4o-mini - -- Prompt: `Calculate 5! (factorial of 5). Return only the number, no explanation.` -- Expected: `120` -- Actual: `120` -- Duration: 956ms (956.00s) -- Timestamp: 4/2/2025, 3:33:45 PM - ### factorial - openai/gpt-3.5-turbo - Prompt: `Calculate 5! (factorial of 5). Return only the number, no explanation.` - Expected: `120` - Actual: `120` -- Duration: 827ms (827.00s) -- Timestamp: 4/2/2025, 3:33:46 PM +- Duration: 3991ms (3.99s) +- Timestamp: 4/3/2025, 7:09:54 PM -### factorial - deepseek/deepseek-r1 +### factorial - openai/gpt-4o-mini - Prompt: `Calculate 5! (factorial of 5). Return only the number, no explanation.` - Expected: `120` - Actual: `120` -- Duration: 11193ms (11193.00s) -- Timestamp: 4/2/2025, 3:33:57 PM - -### factorial - deepseek/deepseek-r1-distill-qwen-14b:free - -- Prompt: `Calculate 5! (factorial of 5). Return only the number, no explanation.` -- Expected: `120` -- Actual: `120` -- Duration: 4814ms (4814.00s) -- Timestamp: 4/2/2025, 3:34:02 PM - -### fibonacci - anthropic/claude-3.5-sonnet - -- Prompt: `Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.` -- Expected: `8` -- Actual: `8` -- Duration: 2004ms (2004.00s) -- Timestamp: 4/2/2025, 3:34:04 PM - -### fibonacci - openai/gpt-4o-mini - -- Prompt: `Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.` -- Expected: `8` -- Actual: `8` -- Duration: 1673ms (1673.00s) -- Timestamp: 4/2/2025, 3:34:07 PM +- Duration: 861ms (0.86s) +- Timestamp: 4/3/2025, 7:10:04 PM ### fibonacci - openai/gpt-3.5-turbo - Prompt: `Calculate the 6th number in the Fibonacci sequence. Return only the number, no explanation.` - Expected: `8` - Actual: `8` -- Duration: 1543ms (1543.00s) -- Timestamp: 4/2/2025, 3:34:08 PM - -### square_root - anthropic/claude-3.5-sonnet - -- Prompt: `Calculate the square root of 16. Return only the number, no explanation.` -- Expected: `4` -- Actual: `4` -- Duration: 2012ms (2012.00s) -- Timestamp: 4/2/2025, 3:34:46 PM - -### square_root - qwen/qwq-32b - -- Prompt: `Calculate the square root of 16. Return only the number, no explanation.` -- Expected: `4` -- Actual: `4` -- Duration: 5888ms (5888.00s) -- Timestamp: 4/2/2025, 3:34:52 PM - -### square_root - openai/gpt-4o-mini - -- Prompt: `Calculate the square root of 16. Return only the number, no explanation.` -- Expected: `4` -- Actual: `4` -- Duration: 964ms (964.00s) -- Timestamp: 4/2/2025, 3:34:52 PM +- Duration: 792ms (0.79s) +- Timestamp: 4/3/2025, 7:10:05 PM ### square_root - openai/gpt-3.5-turbo - Prompt: `Calculate the square root of 16. Return only the number, no explanation.` - Expected: `4` - Actual: `4` -- Duration: 1080ms (1080.00s) -- Timestamp: 4/2/2025, 3:34:54 PM - -### square_root - deepseek/deepseek-r1 - -- Prompt: `Calculate the square root of 16. Return only the number, no explanation.` -- Expected: `4` -- Actual: `4` -- Duration: 10309ms (10309.00s) -- Timestamp: 4/2/2025, 3:35:04 PM +- Duration: 892ms (0.89s) +- Timestamp: 4/3/2025, 7:10:15 PM ### square_root - deepseek/deepseek-r1-distill-qwen-14b:free - Prompt: `Calculate the square root of 16. Return only the number, no explanation.` - Expected: `4` - Actual: `4` -- Duration: 6114ms (6114.00s) -- Timestamp: 4/2/2025, 3:35:10 PM +- Duration: 1755ms (1.75s) +- Timestamp: 4/3/2025, 7:10:17 PM -### power - anthropic/claude-3.5-sonnet +### square_root - openai/gpt-4o-mini -- Prompt: `Calculate 2 raised to the power of 3. Return only the number, no explanation.` -- Expected: `8` -- Actual: `8` -- Duration: 1136ms (1136.00s) -- Timestamp: 4/2/2025, 3:35:11 PM - -### power - qwen/qwq-32b - -- Prompt: `Calculate 2 raised to the power of 3. Return only the number, no explanation.` -- Expected: `8` -- Actual: `8` -- Duration: 7572ms (7572.00s) -- Timestamp: 4/2/2025, 3:35:19 PM - -### power - openai/gpt-4o-mini - -- Prompt: `Calculate 2 raised to the power of 3. Return only the number, no explanation.` -- Expected: `8` -- Actual: `8` -- Duration: 1259ms (1259.00s) -- Timestamp: 4/2/2025, 3:35:20 PM +- Prompt: `Calculate the square root of 16. Return only the number, no explanation.` +- Expected: `4` +- Actual: `4` +- Duration: 828ms (0.83s) +- Timestamp: 4/3/2025, 7:10:17 PM ### power - openai/gpt-3.5-turbo - Prompt: `Calculate 2 raised to the power of 3. Return only the number, no explanation.` - Expected: `8` - Actual: `8` -- Duration: 1498ms (1498.00s) -- Timestamp: 4/2/2025, 3:35:21 PM - -### power - deepseek/deepseek-r1 - -- Prompt: `Calculate 2 raised to the power of 3. Return only the number, no explanation.` -- Expected: `8` -- Actual: `8` -- Duration: 5414ms (5414.00s) -- Timestamp: 4/2/2025, 3:35:27 PM +- Duration: 795ms (0.80s) +- Timestamp: 4/3/2025, 7:10:18 PM ### power - deepseek/deepseek-r1-distill-qwen-14b:free - Prompt: `Calculate 2 raised to the power of 3. Return only the number, no explanation.` - Expected: `8` - Actual: `8` -- Duration: 9891ms (9891.00s) -- Timestamp: 4/2/2025, 3:35:37 PM +- Duration: 7263ms (7.26s) +- Timestamp: 4/3/2025, 7:10:25 PM + +### power - openai/gpt-4o-mini + +- Prompt: `Calculate 2 raised to the power of 3. Return only the number, no explanation.` +- Expected: `8` +- Actual: `8` +- Duration: 966ms (0.97s) +- Timestamp: 4/3/2025, 7:10:26 PM