File size: 3,573 Bytes
333c51a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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 }
    );
  }
}