"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const router_1 = __importDefault(require("@koa/router")); const axios_1 = __importDefault(require("axios")); const config_1 = require("../../config"); const router = new router_1.default(); // 获取可用文本模型列表 function getAvailableModels() { return config_1.config.models.getModelsByType('text').filter((m) => m.enabled !== false); } // 随机选择模型 function getRandomModel() { const models = getAvailableModels(); if (models.length === 0) { throw new Error('没有可用的文本模型'); } return models[Math.floor(Math.random() * models.length)].id; } // AI 生成文本 router.post('/generate', async (ctx) => { const { prompt, model } = ctx.request.body; if (!prompt || prompt.trim().length === 0) { ctx.status = 400; ctx.body = { code: 400, message: '请输入提示词' }; return; } try { // 获取模型配置 const modelId = model || getRandomModel(); const modelConfig = config_1.config.models.getModel(modelId); if (!modelConfig) { ctx.status = 400; ctx.body = { code: 400, message: `模型 ${modelId} 不存在` }; return; } const { apiKey, baseUrl } = modelConfig; if (!apiKey || !baseUrl) { ctx.status = 500; ctx.body = { code: 500, message: `模型 ${modelId} 缺少 API 配置` }; return; } console.log(`🤖 使用模型: ${modelId}, baseUrl: ${baseUrl}`); // 调用 OpenAI-compatible API const response = await axios_1.default.post(`${baseUrl}/chat/completions`, { model: modelId, messages: [{ role: 'user', content: prompt }], }, { headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json', }, timeout: 120000, }); const data = response.data; // 提取生成的文本 const generatedText = data.choices?.[0]?.message?.content || ''; ctx.body = { code: 0, message: 'success', data: { text: generatedText, model: modelId, }, }; } catch (error) { console.error('❌ AI 生成失败:', error.response?.data || error.message); ctx.status = 500; ctx.body = { code: 500, message: error.message || 'AI 生成失败,请稍后重试', }; } }); // 获取可用模型列表 router.get('/models', async (ctx) => { const models = getAvailableModels(); ctx.body = { code: 0, message: 'success', data: { models: models.map((m) => ({ id: m.id, name: m.name })), default: config_1.config.models.textGeneration.defaultModel, }, }; }); exports.default = router;