import { NextRequest, NextResponse } from "next/server"; import { db } from "@/lib/db"; import ZAI from "z-ai-web-dev-sdk"; const SYSTEM_PROMPT = `Eres Sofía, un asistente de desarrollo de software altamente inteligente y especializado. Tu nombre es Sofía y eres parte del sistema multiagente "Sofía Cloud". Tus capacidades incluyen: - Análisis de código y repositorios de GitHub - Generación de código y documentación - Sugerencias de mejoras y optimizaciones - Detección de bugs y vulnerabilidades - Creación de arquitecturas de software - Explicaciones técnicas claras y detalladas Responde siempre de manera profesional, útil y con un toque amigable. Cuando analices código, sé específico y proporciona ejemplos concretos. Si detectas problemas, sugiere soluciones prácticas. Formato de respuestas: - Usa Markdown para formatear tus respuestas - Incluye bloques de código cuando sea relevante - Sé conciso pero completo - Si el usuario pregunta algo fuera del ámbito técnico, redirige amablemente al tema de desarrollo`; // POST - Enviar prompt al agente IA export async function POST(request: NextRequest) { try { const body = await request.json(); const { prompt, context } = body; if (!prompt) { return NextResponse.json( { success: false, error: "El prompt es requerido" }, { status: 400 } ); } // Crear tarea pendiente const task = await db.agentTask.create({ data: { type: "analyze", status: "pending", input: prompt, }, }); try { // Usar z-ai-web-dev-sdk para la respuesta de IA const zai = await ZAI.create(); const messages = [ { role: "system" as const, content: SYSTEM_PROMPT }, { role: "user" as const, content: context ? `Contexto: ${context}\n\nPregunta: ${prompt}` : prompt }, ]; const completion = await zai.chat.completions.create({ messages, temperature: 0.7, max_tokens: 4000, }); const response = completion.choices[0]?.message?.content || "No se pudo generar una respuesta"; // Actualizar tarea como completada await db.agentTask.update({ where: { id: task.id }, data: { status: "completed", output: response, completedAt: new Date(), }, }); return NextResponse.json({ success: true, response, taskId: task.id, }); } catch (aiError) { console.error("AI Error:", aiError); // Actualizar tarea como fallida await db.agentTask.update({ where: { id: task.id }, data: { status: "failed", output: aiError instanceof Error ? aiError.message : "Error desconocido", }, }); return NextResponse.json( { success: false, error: "Error al procesar con IA" }, { status: 500 } ); } } catch (error) { console.error("Error in agent route:", error); return NextResponse.json( { success: false, error: "Error interno del servidor" }, { status: 500 } ); } } // GET - Obtener historial de tareas export async function GET() { try { const tasks = await db.agentTask.findMany({ orderBy: { createdAt: "desc" }, take: 20, }); return NextResponse.json({ success: true, tasks, }); } catch (error) { console.error("Error fetching tasks:", error); return NextResponse.json( { success: false, error: "Error al obtener tareas" }, { status: 500 } ); } }