99 lines
3.5 KiB
JavaScript
99 lines
3.5 KiB
JavaScript
import test from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
|
|
import {
|
|
buildChatCompletionResponse,
|
|
buildSmokeEnv,
|
|
} from './fake_deepseek_server.mjs'
|
|
|
|
test('buildChatCompletionResponse returns Baidu tool calls for the first round', () => {
|
|
const response = buildChatCompletionResponse({
|
|
messages: [
|
|
{role: 'system', content: 'You are sgClaw'},
|
|
{role: 'user', content: '打开百度搜索天气'},
|
|
],
|
|
})
|
|
|
|
const message = response.choices[0].message
|
|
assert.equal(message.content, '')
|
|
assert.equal(message.tool_calls.length, 3)
|
|
assert.equal(message.tool_calls[0].function.name, 'browser_action')
|
|
assert.match(message.tool_calls[0].function.arguments, /"action":"navigate"/)
|
|
assert.match(message.tool_calls[1].function.arguments, /"action":"type"/)
|
|
assert.match(message.tool_calls[2].function.arguments, /"action":"click"/)
|
|
})
|
|
|
|
test('buildChatCompletionResponse returns Zhihu navigate tool call for the first round', () => {
|
|
const response = buildChatCompletionResponse({
|
|
messages: [
|
|
{role: 'system', content: 'You are sgClaw'},
|
|
{role: 'user', content: '打开知乎搜索天气'},
|
|
],
|
|
})
|
|
|
|
const message = response.choices[0].message
|
|
assert.equal(message.content, '')
|
|
assert.equal(message.tool_calls.length, 1)
|
|
assert.match(
|
|
message.tool_calls[0].function.arguments,
|
|
/https:\/\/www\.zhihu\.com\/search\?type=content&q=%E5%A4%A9%E6%B0%94/,
|
|
)
|
|
})
|
|
|
|
test('buildChatCompletionResponse returns final summaries expected by the existing smoke script', () => {
|
|
const baiduResponse = buildChatCompletionResponse({
|
|
messages: [
|
|
{role: 'system', content: 'You are sgClaw'},
|
|
{role: 'user', content: '打开百度搜索天气'},
|
|
{role: 'assistant', content: '', tool_calls: [{id: 'call_baidu_1'}]},
|
|
{role: 'tool', tool_call_id: 'call_baidu_1', content: '{"ok":true}'},
|
|
],
|
|
})
|
|
assert.equal(baiduResponse.choices[0].message.content, '已在百度搜索天气')
|
|
|
|
const zhihuResponse = buildChatCompletionResponse({
|
|
messages: [
|
|
{role: 'system', content: 'You are sgClaw'},
|
|
{role: 'user', content: '打开知乎搜索天气'},
|
|
{role: 'assistant', content: '', tool_calls: [{id: 'call_zhihu_1'}]},
|
|
{role: 'tool', tool_call_id: 'call_zhihu_1', content: '{"ok":true}'},
|
|
],
|
|
})
|
|
assert.equal(zhihuResponse.choices[0].message.content, '已在知乎搜索天气')
|
|
})
|
|
|
|
test('buildChatCompletionResponse rejects unsupported instructions clearly', () => {
|
|
assert.throws(
|
|
() =>
|
|
buildChatCompletionResponse({
|
|
messages: [{role: 'user', content: '打开豆瓣搜索天气'}],
|
|
}),
|
|
/unsupported smoke instruction: 打开豆瓣搜索天气/,
|
|
)
|
|
})
|
|
|
|
test('buildChatCompletionResponse accepts ZeroClaw timestamp-prefixed instructions', () => {
|
|
const response = buildChatCompletionResponse({
|
|
messages: [
|
|
{role: 'user', content: '[2026-03-26 16:11:26 +08:00] 打开百度搜索天气'},
|
|
],
|
|
})
|
|
|
|
const message = response.choices[0].message
|
|
assert.equal(message.tool_calls.length, 3)
|
|
assert.match(message.tool_calls[0].function.arguments, /https:\/\/www\.baidu\.com/)
|
|
})
|
|
|
|
test('buildSmokeEnv injects DeepSeek environment variables for the local fake server', () => {
|
|
const env = buildSmokeEnv('http://127.0.0.1:32123', {
|
|
PATH: '/usr/bin',
|
|
HOME: '/tmp/home',
|
|
})
|
|
|
|
assert.equal(env.PATH, '/usr/bin')
|
|
assert.equal(env.HOME, '/tmp/home')
|
|
assert.equal(env.DEEPSEEK_API_KEY, 'sgclaw-smoke-test-key')
|
|
assert.equal(env.DEEPSEEK_BASE_URL, 'http://127.0.0.1:32123')
|
|
assert.equal(env.DEEPSEEK_MODEL, 'deepseek-chat')
|
|
})
|