76 lines
2.1 KiB
JavaScript
76 lines
2.1 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')
|
|
}
|
|
}
|
|
|
|
main().catch((error) => {
|
|
console.error(error instanceof Error ? error.message : String(error))
|
|
process.exitCode = 1
|
|
})
|