xiaobo ren
Update Gemini models to use available models (2.5-pro, 2.5-flash, 2.0-flash) and expand API test coverage
58d2e5a | /** | |
| * 测试所有 API 连接 | |
| * 运行: node test-apis.js | |
| */ | |
| import { buildApiRequest, parseApiResponse, getApiConfigForModel } from './server/apiConfig.js'; | |
| import fetch from 'node-fetch'; | |
| const testModels = [ | |
| // OpenAI Models | |
| { name: 'gpt-5.1', provider: 'OpenAI GPT-5.1' }, | |
| { name: 'gpt-5-mini', provider: 'OpenAI GPT-5 Mini' }, | |
| { name: 'gpt-4.1', provider: 'OpenAI GPT-4.1' }, | |
| { name: 'gpt-4o', provider: 'OpenAI GPT-4o' }, | |
| { name: 'gpt-4o-mini', provider: 'OpenAI GPT-4o Mini' }, | |
| { name: 'gpt-4-turbo', provider: 'OpenAI GPT-4 Turbo' }, | |
| // Grok Models (xAI) | |
| { name: 'grok-4-0709', provider: 'Grok 4 (xAI)' }, | |
| { name: 'grok-4-1-fast-reasoning', provider: 'Grok 4.1 Fast Reasoning (xAI)' }, | |
| { name: 'grok-4-1-fast-non-reasoning', provider: 'Grok 4.1 Fast Non-Reasoning (xAI)' }, | |
| { name: 'grok-4-fast-reasoning', provider: 'Grok 4 Fast Reasoning (xAI)' }, | |
| // Claude Models (Anthropic) | |
| { name: 'claude-opus-4-5', provider: 'Claude Opus 4.5 (Anthropic)' }, | |
| { name: 'claude-sonnet-4-5', provider: 'Claude Sonnet 4.5 (Anthropic)' }, | |
| { name: 'claude-3-5-haiku-20241022', provider: 'Claude Haiku 3.5 (Anthropic)' }, | |
| // Gemini Models (Google) | |
| { name: 'gemini-2.5-pro', provider: 'Gemini 2.5 Pro (Google)' }, | |
| { name: 'gemini-2.5-flash', provider: 'Gemini 2.5 Flash (Google)' }, | |
| { name: 'gemini-2.0-flash', provider: 'Gemini 2.0 Flash (Google)' }, | |
| ]; | |
| async function testAllApis() { | |
| console.log('开始测试所有 API 连接...\n'); | |
| const results = []; | |
| for (const { name, provider } of testModels) { | |
| try { | |
| console.log(`测试 ${provider} (${name})...`); | |
| const config = getApiConfigForModel(name); | |
| console.log(` API URL: ${config.baseUrl}`); | |
| console.log(` 格式: ${config.format}`); | |
| const testPrompt = 'Say "Hello" in one word.'; | |
| const apiRequest = buildApiRequest(name, 'You are a helpful assistant.', testPrompt, 0.7); | |
| console.log(` 请求 URL: ${apiRequest.url.substring(0, 80)}...`); | |
| const startTime = Date.now(); | |
| const response = await fetch(apiRequest.url, { | |
| method: 'POST', | |
| headers: apiRequest.headers, | |
| body: JSON.stringify(apiRequest.body), | |
| }); | |
| const elapsed = ((Date.now() - startTime) / 1000).toFixed(2); | |
| if (!response.ok) { | |
| const errorText = await response.text(); | |
| console.log(` ❌ 失败: HTTP ${response.status}`); | |
| console.log(` 错误: ${errorText.substring(0, 150)}`); | |
| results.push({ | |
| provider, | |
| model: name, | |
| status: 'FAILED', | |
| statusCode: response.status, | |
| error: errorText.substring(0, 200), | |
| elapsed, | |
| }); | |
| console.log(''); | |
| continue; | |
| } | |
| const data = await response.json(); | |
| const content = parseApiResponse(data, name); | |
| console.log(` ✅ 成功: ${content?.substring(0, 50) || 'Empty response'}`); | |
| console.log(` 响应时间: ${elapsed}s\n`); | |
| results.push({ | |
| provider, | |
| model: name, | |
| status: 'SUCCESS', | |
| statusCode: response.status, | |
| response: content?.substring(0, 100) || 'Empty response', | |
| elapsed, | |
| }); | |
| } catch (error) { | |
| console.log(` ❌ 异常: ${error.message}\n`); | |
| results.push({ | |
| provider, | |
| model: name, | |
| status: 'ERROR', | |
| error: error.message, | |
| }); | |
| } | |
| } | |
| console.log('\n=== 测试结果汇总 ==='); | |
| const successCount = results.filter(r => r.status === 'SUCCESS').length; | |
| const failCount = results.filter(r => r.status !== 'SUCCESS').length; | |
| console.log(`成功: ${successCount}/${testModels.length}`); | |
| console.log(`失败: ${failCount}/${testModels.length}\n`); | |
| results.forEach(r => { | |
| const icon = r.status === 'SUCCESS' ? '✅' : '❌'; | |
| console.log(`${icon} ${r.provider} (${r.model}): ${r.status}`); | |
| if (r.status === 'SUCCESS') { | |
| console.log(` 响应: ${r.response}`); | |
| console.log(` 时间: ${r.elapsed}s`); | |
| } else if (r.error) { | |
| console.log(` 错误: ${r.error.substring(0, 100)}`); | |
| } | |
| console.log(''); | |
| }); | |
| return results; | |
| } | |
| testAllApis().catch(console.error); | |