/** * Local API smoke test. Usage: * node scripts/test-api.mjs [baseUrl] * Default baseUrl: http://127.0.0.1:8788 */ const base = process.argv[2] ?? "http://127.0.0.1:8788"; const apiKey = process.env.API_KEY ?? "sk-shumengya666"; const headers = { authorization: `Bearer ${apiKey}`, "content-type": "application/json", }; async function main() { console.log("=== GET /v1/models ==="); const modelsRes = await fetch(`${base}/v1/models`, { headers }); console.log("status:", modelsRes.status); const modelsText = await modelsRes.text(); if (!modelsRes.ok) { console.log(modelsText.slice(0, 500)); process.exit(1); } const models = JSON.parse(modelsText); const ids = (models.data ?? []).map((m) => m.id); console.log("count:", ids.length); console.log("sample:", ids.slice(0, 15).join(", ")); const testModels = [ ids.find((id) => id.includes("gpt-4o")) ?? ids[0], ids.find((id) => id.includes("claude")) ?? ids[1], ].filter(Boolean); for (const model of [...new Set(testModels)].slice(0, 2)) { console.log(`\n=== POST /v1/chat/completions (${model}) ===`); const chatRes = await fetch(`${base}/v1/chat/completions`, { method: "POST", headers, body: JSON.stringify({ model, max_tokens: 32, messages: [{ role: "user", content: "Reply with exactly: ok" }], }), }); console.log("status:", chatRes.status); const chatBody = await chatRes.text(); if (!chatRes.ok) { console.log(chatBody.slice(0, 400)); continue; } const chat = JSON.parse(chatBody); console.log("reply:", chat.choices?.[0]?.message?.content?.slice(0, 120)); } } main().catch((e) => { console.error(e); process.exit(1); });