UNPKG

sysrot-hub

Version:

CLI de nueva generación para proyectos Next.js 14+ con IA multi-modelo, Web3 integration, internacionalización completa y roadmap realista 2025-2026

94 lines (78 loc) 3.03 kB
import { NextApiRequest, NextApiResponse } from "next"; import OpenAI from "openai"; import { GoogleGenerativeAI } from "@google/generative-ai"; import Anthropic from "@anthropic-ai/sdk"; // Necesitarás instalar DeepSeek SDK cuando esté disponible públicamente // import { DeepSeekAI } from "deepseek-ai"; // Inicializar clientes de IA const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY, }); const gemini = process.env.GOOGLE_API_KEY ? new GoogleGenerativeAI(process.env.GOOGLE_API_KEY) : null; const anthropic = process.env.ANTHROPIC_API_KEY ? new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY }) : null; // DeepSeek initialization would go here export default async function handler(req: NextApiRequest, res: NextApiResponse) { if (req.method !== "POST") { return res.status(405).json({ error: "Método no permitido" }); } try { const { prompt, model = "gpt-4o" } = req.body; if (!prompt) { return res.status(400).json({ error: "Se requiere un prompt" }); } let response = null; // Seleccionar el modelo apropiado if (model.startsWith("gpt")) { if (!process.env.OPENAI_API_KEY) { return res.status(500).json({ error: "API key de OpenAI no configurada" }); } const completion = await openai.chat.completions.create({ messages: [{ role: "user", content: prompt }], model: model, }); response = { text: completion.choices[0].message.content, usage: completion.usage, provider: "openai" }; } else if (model === "gemini-flash-pro") { if (!gemini) { return res.status(500).json({ error: "API key de Google no configurada" }); } const genModel = gemini.getGenerativeModel({ model: "gemini-pro" }); const result = await genModel.generateContent(prompt); const text = result.response.text(); response = { text, provider: "gemini" }; } else if (model === "claude-3.5") { if (!anthropic) { return res.status(500).json({ error: "API key de Anthropic no configurada" }); } const message = await anthropic.messages.create({ model: "claude-3-5-sonnet-20240620", max_tokens: 1000, messages: [{ role: "user", content: prompt }] }); response = { text: message.content[0].text, provider: "anthropic" }; } else if (model === "deepseekr1") { // Implementación pendiente hasta tener acceso a la API oficial return res.status(501).json({ error: "Soporte para DeepSeek R1 en desarrollo" }); } else { return res.status(400).json({ error: "Modelo no soportado" }); } return res.status(200).json(response); } catch (error) { console.error("Error en la API de IA:", error); return res.status(500).json({ error: "Error al procesar la solicitud" }); } }