Spaces:
Build error
Build error
| 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 } | |
| ); | |
| } | |
| } | |