shitton of the ai changes

This commit is contained in:
2026-05-01 04:54:11 +03:00
parent d95c37a322
commit 8cff086a8e
194 changed files with 29409 additions and 8841 deletions
+154
View File
@@ -0,0 +1,154 @@
import test from "node:test";
import assert from "node:assert/strict";
const {
buildToolRankerSystemPrompt,
getToolRankerAvailableToolInfos,
sanitizeToolRankerResult,
} = await import("../dist/ai/tool-ranker-metadata.js");
function toolInfos(...toolTypes) {
return getToolRankerAvailableToolInfos(toolTypes.map(type => ({type})));
}
function promptFor(...toolTypes) {
return buildToolRankerSystemPrompt({
availableTools: toolInfos(...toolTypes),
includeExamples: true,
maxExamplesPerTool: 1,
compact: true,
});
}
test("prompt contains only available tools", () => {
const prompt = promptFor("no_tool", "get_datetime", "image_generation", "code_interpreter", "file_search");
assert.ok(prompt.includes("no_tool"));
assert.ok(prompt.includes("get_datetime"));
assert.ok(prompt.includes("image_generation"));
assert.ok(prompt.includes("code_interpreter"));
assert.ok(prompt.includes("file_search"));
assert.ok(!prompt.includes("get_weather"));
assert.ok(!prompt.includes("python_interpreter"));
});
test("prompt does not contain disabled tools", () => {
const prompt = promptFor("no_tool", "read_file", "search_files");
assert.ok(prompt.includes("read_file"));
assert.ok(prompt.includes("search_files"));
assert.ok(!prompt.includes("get_weather"));
assert.ok(!prompt.includes("shell_execute"));
assert.ok(!prompt.includes("python_interpreter"));
});
test("examples are filtered when tools are unavailable", () => {
const prompt = promptFor("no_tool", "read_file", "search_files");
assert.ok(prompt.includes("прочитай src/index.ts"));
assert.ok(prompt.includes("найди где используется sendMessage"));
assert.ok(!prompt.includes("погода завтра"));
assert.ok(!prompt.includes("выполни этот python код"));
});
test("prompt includes image generation routing example", () => {
const prompt = promptFor("no_tool", "image_generation");
assert.ok(prompt.includes("сделай его лысым"));
assert.ok(prompt.includes(JSON.stringify({toolNames: ["image_generation"]})));
});
test("prompt includes weather routing example", () => {
const prompt = promptFor("no_tool", "get_weather");
assert.ok(prompt.includes("погода завтра"));
assert.ok(prompt.includes(JSON.stringify({toolNames: ["get_weather"]})));
});
test("prompt includes web search routing example for current information", () => {
const prompt = promptFor("no_tool", "web_search");
assert.ok(prompt.includes("найди актуальную документацию OpenAI API"));
assert.ok(prompt.includes(JSON.stringify({toolNames: ["web_search"]})));
});
test("prompt includes read file routing example for known file paths", () => {
const prompt = promptFor("no_tool", "read_file");
assert.ok(prompt.includes("прочитай src/index.ts"));
assert.ok(prompt.includes(JSON.stringify({toolNames: ["read_file"]})));
});
test("prompt includes search files routing example for usage search", () => {
const prompt = promptFor("no_tool", "search_files");
assert.ok(prompt.includes("найди где используется sendMessage"));
assert.ok(prompt.includes(JSON.stringify({toolNames: ["search_files"]})));
});
test("prompt includes edit file patch routing example for targeted edits", () => {
const prompt = promptFor("no_tool", "edit_file_patch");
assert.ok(prompt.includes("исправь этот баг патчем"));
assert.ok(prompt.includes(JSON.stringify({toolNames: ["edit_file_patch"]})));
});
test("prompt includes update file routing example for full overwrite", () => {
const prompt = promptFor("no_tool", "update_file");
assert.ok(prompt.includes("полностью перезапиши config.json"));
assert.ok(prompt.includes(JSON.stringify({toolNames: ["update_file"]})));
});
test("prompt includes delete path caution for explicit deletion only", () => {
const prompt = promptFor("no_tool", "delete_path");
assert.ok(prompt.includes("delete_path only when the user clearly asks to delete or remove something."));
assert.ok(prompt.includes("удали папку dist"));
assert.ok(prompt.includes(JSON.stringify({toolNames: ["delete_path"]})));
});
test("sanitizer returns no_tool for normal explanation", () => {
const result = sanitizeToolRankerResult({
raw: "объясни docker volumes",
availableToolNames: ["read_file", "search_files"],
});
assert.deepEqual(result, ["no_tool"]);
});
test("sanitizer removes unavailable tools", () => {
const result = sanitizeToolRankerResult({
raw: JSON.stringify({toolNames: ["read_file", "missing_tool"]}),
availableToolNames: ["read_file"],
});
assert.deepEqual(result, ["read_file"]);
});
test("sanitizer deduplicates tools", () => {
const result = sanitizeToolRankerResult({
raw: JSON.stringify({toolNames: ["read_file", "read_file", "search_files"]}),
availableToolNames: ["read_file", "search_files"],
});
assert.deepEqual(result, ["read_file", "search_files"]);
});
test("sanitizer handles malformed output", () => {
const result = sanitizeToolRankerResult({
raw: "```json\nnot json\n```",
availableToolNames: ["read_file"],
});
assert.deepEqual(result, ["no_tool"]);
});
test("sanitizer removes no_tool when mixed with real tools", () => {
const result = sanitizeToolRankerResult({
raw: JSON.stringify({toolNames: ["no_tool", "read_file"]}),
availableToolNames: ["read_file"],
});
assert.deepEqual(result, ["read_file"]);
});