Files
BaiLongma/scripts/test-mimo.mjs

78 lines
2.9 KiB
JavaScript

#!/usr/bin/env node
// 用法: node scripts/test-mimo.mjs <API_KEY> [model]
// 默认模型: mimo-v2.5
// 不会把 key 写入任何文件,只在内存里用一次。
const apiKey = process.argv[2]
const model = process.argv[3] || 'mimo-v2.5'
if (!apiKey) {
console.error('用法: node scripts/test-mimo.mjs <API_KEY> [model]')
process.exit(2)
}
const BASE = 'https://api.xiaomimimo.com/v1'
const ENDPOINT = `${BASE}/chat/completions`
const body = {
model,
messages: [{ role: 'user', content: 'Reply with exactly: hello' }],
max_tokens: 16,
temperature: 0,
stream: false,
}
async function tryRequest(label, headers) {
console.log(`\n── [${label}] ${ENDPOINT}`)
console.log(' headers:', Object.keys(headers).join(', '))
console.log(' body:', JSON.stringify(body))
const t0 = Date.now()
try {
const res = await fetch(ENDPOINT, {
method: 'POST',
headers: { 'Content-Type': 'application/json', ...headers },
body: JSON.stringify(body),
})
const ms = Date.now() - t0
const text = await res.text()
console.log(` status: ${res.status} ${res.statusText} (${ms}ms)`)
// 截断超长响应,但保留前 1500 字符以便看 reason
const trimmed = text.length > 1500 ? text.slice(0, 1500) + '\n…(truncated)' : text
console.log(' body:', trimmed)
return { ok: res.ok, status: res.status }
} catch (err) {
const ms = Date.now() - t0
console.log(` network error (${ms}ms):`, err.message)
if (err.cause) console.log(' cause:', err.cause)
return { ok: false, error: err.message }
}
}
// 平台文档明确支持两种鉴权头:Authorization: Bearer 和 api-key
const results = []
results.push(await tryRequest('Authorization Bearer', { Authorization: `Bearer ${apiKey}` }))
results.push(await tryRequest('api-key header', { 'api-key': apiKey }))
// 顺便用 OpenAI SDK 走一遍(模拟 bailongma 实际调用路径)
console.log('\n── [OpenAI SDK] 模拟 bailongma 调用')
try {
const { default: OpenAI } = await import('openai')
const client = new OpenAI({ apiKey, baseURL: BASE, timeout: 12000 })
const t0 = Date.now()
const resp = await client.chat.completions.create(body)
const ms = Date.now() - t0
console.log(` ok (${ms}ms):`, JSON.stringify(resp).slice(0, 500))
results.push({ ok: true })
} catch (err) {
console.log(' error:', err.message)
if (err.status) console.log(' status:', err.status)
if (err.response?.data) console.log(' response.data:', JSON.stringify(err.response.data).slice(0, 500))
if (err.cause) console.log(' cause:', err.cause)
results.push({ ok: false, error: err.message })
}
console.log('\n── 汇总')
console.log(' Authorization Bearer:', results[0].ok ? 'OK' : `FAIL (${results[0].status || results[0].error})`)
console.log(' api-key header :', results[1].ok ? 'OK' : `FAIL (${results[1].status || results[1].error})`)
console.log(' OpenAI SDK :', results[2].ok ? 'OK' : `FAIL (${results[2].error})`)