import test from 'node:test'; import assert from 'node:assert/strict'; import { createRequire } from 'node:module'; import { profile } from '../daemon/model-profiles.js'; const require = createRequire(import.meta.url); const catalog = require('../vendor/agent-harness/lib/catalog.js'); const toolParse = require('../vendor/agent-harness/lib/tool-parse.js'); test('Qwen3.5 0.8B and 2B use the qwen35 tool dialect and compact-tool reminder', () => { assert.equal(profile('laptop-4gb-mm').model, 'qwen3.5-0.8b'); assert.equal(profile('laptop-8gb-mm').model, 'qwen3.5-2b'); for (const id of ['qwen3.5-0.8b', 'qwen3.5-2b']) { assert.equal(catalog.toolDialectFor(id), 'qwen35'); assert.equal(catalog.findCatalogEntry(id).tools, true); assert.equal(catalog.isCompactToolModel(id), true); } assert.match(toolParse.FORMAT_REMINDER, //); const tiny = catalog.filterToolsForModel( [{ name: 'web_search' }, { name: 'qvac_capability' }, { name: 'cu_drag' }], 'qwen3.5-0.8b', ); assert.deepEqual(tiny.map((t) => t.name), ['web_search']); }); test('Qwen3.5 compact models recover tool calls nested in think tags', () => { const tools = [{ name: 'web_search' }, { name: 'web_fetch' }]; const thinking = ` Need a current answer. Ubuntu 26.04 release `; const recovered = toolParse.recover({ thinking, text: '', tools }); assert.equal(recovered.calls.length, 1); assert.equal(recovered.calls[0].name, 'web_search'); assert.equal(recovered.calls[0].arguments.query, 'Ubuntu 26.04 release'); });