Files
claw/tools/browser_smoke/run_deepseek_browser_smoke.mjs

99 lines
3.0 KiB
JavaScript

#!/usr/bin/env node
import {spawn} from 'node:child_process'
import process from 'node:process'
import {
buildSmokeEnv,
normalizeSmokeInstruction,
startFakeDeepSeekServer,
} from './fake_deepseek_server.mjs'
const SUPER_RPA_SMOKE_SCRIPT =
'/home/zyl/projects/superRpa/src/chrome/browser/superrpa/sgclaw/sgclaw_chat_smoke.mjs'
async function main() {
const server = await startFakeDeepSeekServer()
console.log(`Started fake DeepSeek server at ${server.baseUrl}`)
try {
await runSmoke(server.baseUrl)
assertCompatRuntimeTraffic(server.requests)
console.log(`Verified DeepSeek compat runtime via ${server.requests.length} provider requests.`)
} finally {
await server.close()
console.log('Stopped fake DeepSeek server.')
}
}
function runSmoke(baseUrl) {
return new Promise((resolve, reject) => {
const child = spawn('node', [SUPER_RPA_SMOKE_SCRIPT], {
stdio: 'inherit',
env: buildSmokeEnv(baseUrl),
})
child.once('error', reject)
child.once('exit', (code, signal) => {
if (code === 0) {
resolve()
return
}
if (signal) {
reject(new Error(`browser smoke exited via signal: ${signal}`))
return
}
reject(new Error(`browser smoke exited with code: ${code}`))
})
})
}
function assertCompatRuntimeTraffic(requests) {
if (requests.length < 4) {
throw new Error(`expected at least 4 provider requests, got ${requests.length}`)
}
const instructions = requests
.flatMap((entry) => entry.body?.messages ?? [])
.filter((message) => message?.role === 'user')
.map((message) => normalizeSmokeInstruction(message.content))
if (!instructions.includes('打开百度搜索天气')) {
throw new Error('fake DeepSeek server did not receive the Baidu smoke instruction')
}
if (!instructions.includes('打开知乎搜索天气')) {
throw new Error('fake DeepSeek server did not receive the Zhihu smoke instruction')
}
const zhihuRequest = requests.find((entry) => {
return (entry.body?.messages ?? []).some((message) =>
message?.role === 'user' &&
normalizeSmokeInstruction(message.content) === '打开知乎搜索天气')
})
if (!zhihuRequest) {
throw new Error('fake DeepSeek server did not receive the Zhihu follow-up turn')
}
const zhihuMessages = zhihuRequest.body?.messages ?? []
const hasPriorUserTurn = zhihuMessages.some((message) =>
message?.role === 'user' &&
normalizeSmokeInstruction(message.content) === '打开百度搜索天气')
const hasPriorAssistantTurn = zhihuMessages.some((message) =>
message?.role === 'assistant' &&
typeof message.content === 'string' &&
message.content.includes('已在百度搜索天气'))
if (!hasPriorUserTurn || !hasPriorAssistantTurn) {
throw new Error('DeepSeek follow-up turn is missing prior browser conversation history')
}
}
main().catch((error) => {
console.error(error instanceof Error ? error.message : String(error))
process.exitCode = 1
})