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
text/typescript
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" });
}
}