sofia-cloud / src /app /api /agent /route.ts
Gmagl
Add Sofia Cloud complete files
333c51a
Raw
History Blame
3.57 kB
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 }
);
}
}