Files
waggle-os/packages/agent/tests/smart-router.test.ts
Oleg Maslov 0c3e2ead3b
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled
moving
2026-09-02 10:10:29 +02:00

68 lines
2.4 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { routeMessage } from '../src/smart-router.js';
describe('routeMessage', () => {
const primary = 'claude-sonnet-4-6';
const budget = 'qwen/qwen3.6-plus:free';
it('routes simple short message to budget model', () => {
const result = routeMessage('What time is it?', primary, budget);
expect(result.model).toBe(budget);
expect(result.reason).toBe('simple_turn');
});
it('routes complex message to primary model', () => {
const result = routeMessage('Implement a REST API with JWT authentication and role-based access control', primary, budget);
expect(result.model).toBe(primary);
expect(result.reason).toBe('normal');
});
it('routes message with code blocks to primary', () => {
const result = routeMessage('Fix this:\n```\nconst x = 1;\n```', primary, budget);
expect(result.model).toBe(primary);
});
it('routes message with URL to primary', () => {
const result = routeMessage('Check https://example.com for errors', primary, budget);
expect(result.model).toBe(primary);
});
it('routes message with debug keywords to primary', () => {
const result = routeMessage('debug this error please', primary, budget);
expect(result.model).toBe(primary);
});
it('routes long message to primary', () => {
const result = routeMessage('word '.repeat(100), primary, budget);
expect(result.model).toBe(primary);
});
it('routes multi-line message to primary', () => {
const result = routeMessage('line one\nline two\nline three\nline four', primary, budget);
expect(result.model).toBe(primary);
});
it('returns primary when budget model is null', () => {
const result = routeMessage('Hello', primary, null);
expect(result.model).toBe(primary);
expect(result.reason).toBe('normal');
});
it('routes greeting to budget', () => {
const result = routeMessage('Hi there!', primary, budget);
expect(result.model).toBe(budget);
expect(result.reason).toBe('simple_turn');
});
it('routes translation request to budget', () => {
const result = routeMessage('Translate "hello" to Serbian', primary, budget);
expect(result.model).toBe(budget);
expect(result.reason).toBe('simple_turn');
});
it('routes message with backtick to primary', () => {
const result = routeMessage('What does `useState` do?', primary, budget);
expect(result.model).toBe(primary);
});
});