|
|
import fs from 'fs'; |
|
|
import path from 'path'; |
|
|
|
|
|
const API_URL = 'http://localhost:8045/v1/chat/completions'; |
|
|
const API_KEY = 'sk-text'; |
|
|
|
|
|
async function testImageGeneration(stream = true) { |
|
|
console.log(`测试生图模型 (${stream ? '流式' : '非流式'})...\n`); |
|
|
|
|
|
const response = await fetch(API_URL, { |
|
|
method: 'POST', |
|
|
headers: { |
|
|
'Content-Type': 'application/json', |
|
|
'Authorization': `Bearer ${API_KEY}` |
|
|
}, |
|
|
body: JSON.stringify({ |
|
|
model: 'gemini-2.5-flash-image', |
|
|
messages: [{ role: 'user', content: '画一个二次元美少女' }], |
|
|
stream |
|
|
}) |
|
|
}); |
|
|
|
|
|
let fullContent = ''; |
|
|
|
|
|
if (stream) { |
|
|
let buffer = ''; |
|
|
const reader = response.body.getReader(); |
|
|
const decoder = new TextDecoder(); |
|
|
|
|
|
while (true) { |
|
|
const { done, value } = await reader.read(); |
|
|
if (done) break; |
|
|
|
|
|
buffer += decoder.decode(value, { stream: true }); |
|
|
const lines = buffer.split('\n'); |
|
|
buffer = lines.pop(); |
|
|
|
|
|
for (const line of lines) { |
|
|
if (!line.startsWith('data: ') || line.includes('[DONE]')) continue; |
|
|
try { |
|
|
const data = JSON.parse(line.slice(6)); |
|
|
const content = data.choices[0]?.delta?.content; |
|
|
if (content) fullContent = content; |
|
|
} catch (e) {} |
|
|
} |
|
|
} |
|
|
} else { |
|
|
const data = await response.json(); |
|
|
fullContent = data.choices[0]?.message?.content || ''; |
|
|
} |
|
|
|
|
|
console.log('响应内容:\n', fullContent.substring(0, 200), '...\n'); |
|
|
|
|
|
|
|
|
const imageRegex = /!\[.*?\]\((data:image\/(.*?);base64,([^)]+))\)/g; |
|
|
let match; |
|
|
let imageCount = 0; |
|
|
|
|
|
while ((match = imageRegex.exec(fullContent)) !== null) { |
|
|
imageCount++; |
|
|
const base64Data = match[3]; |
|
|
const ext = match[2]; |
|
|
const filename = `generated_${Date.now()}_${imageCount}.${ext}`; |
|
|
const filepath = path.join('test', filename); |
|
|
|
|
|
fs.writeFileSync(filepath, Buffer.from(base64Data, 'base64')); |
|
|
console.log(`✓ 图片已保存: ${filepath}`); |
|
|
} |
|
|
|
|
|
if (imageCount === 0) { |
|
|
console.log('✗ 未找到图片'); |
|
|
} else { |
|
|
console.log(`\n✓ 共保存 ${imageCount} 张图片`); |
|
|
} |
|
|
} |
|
|
|
|
|
(async () => { |
|
|
|
|
|
|
|
|
await testImageGeneration(false); |
|
|
})().catch(console.error); |
|
|
|