41 lines
1.6 KiB
JavaScript
41 lines
1.6 KiB
JavaScript
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, /<function=TOOL_NAME>/);
|
|
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 = `<think>
|
|
Need a current answer.
|
|
<tool_call>
|
|
<function=web_search>
|
|
<parameter=query>Ubuntu 26.04 release</parameter>
|
|
</function>
|
|
</tool_call>
|
|
</think>`;
|
|
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');
|
|
});
|