Bonsai-Chat-WebGPU / src /lib /tool-routing.test.ts
Valeriy Selitskiy
Use 4096-token release defaults
36a170e
Raw
History Blame Contribute Delete
2.26 kB
import { describe, expect, it } from 'vitest';
import { HTML_ARTIFACT_MIN_TOKENS, planClientTools, requestsHtmlArtifact } from './tool-routing';
describe('HTML artifact intent routing', () => {
it.each([
'Create an HTML app for tracking expenses',
'Write HTML and CSS for a compact dashboard',
'Build a web page with a pricing table',
'Напиши HTML-приложение для списка задач',
'Сделай веб-приложение с красивым календарём',
'Сверстай лендинг для кофейни',
])('recognizes an explicit creation request: %s', (prompt) => {
expect(requestsHtmlArtifact(prompt)).toBe(true);
});
it.each([
'Explain what an HTML application is',
'Review this HTML for accessibility',
'Что такое веб-приложение?',
'Напиши кратко о стандарте HTML',
'Сделай вычисление 2 + 2',
])('does not force an artifact for discussion or unrelated work: %s', (prompt) => {
expect(requestsHtmlArtifact(prompt)).toBe(false);
});
it('requires only html_artifact on the first matching round', () => {
const plan = planClientTools('Напиши HTML-приложение для заметок', true, 0);
expect(plan.toolChoice).toBe('required');
expect(plan.tools?.map((tool) => tool.function.name)).toEqual(['html_artifact']);
expect(plan.requiredToolName).toBe('html_artifact');
expect(plan.minimumMaxTokens).toBe(HTML_ARTIFACT_MIN_TOKENS);
expect(plan.minimumMaxTokens).toBe(4_096);
expect(plan.systemInstruction).toContain('compact enough to finish');
expect(plan.systemInstruction).toContain('Do not answer with a Markdown code block');
});
it('ends the tool loop after the artifact result', () => {
expect(planClientTools('Create an HTML app', true, 1)).toEqual({
toolChoice: 'none',
minimumMaxTokens: 0,
});
});
it('keeps ordinary tool use on auto and honors the off switch', () => {
expect(planClientTools('Calculate 17 * 9', true, 0).toolChoice).toBe('auto');
expect(planClientTools('Create an HTML app', false, 0)).toEqual({
toolChoice: 'none',
minimumMaxTokens: 0,
});
});
});