|
|
|
@@ -16,26 +16,30 @@ export type DataAsignaturaSugerida = {
|
|
|
|
|
creditos: Tables<"asignaturas">["creditos"] | null;
|
|
|
|
|
horasAcademicas?: number | null;
|
|
|
|
|
horasIndependientes?: number | null;
|
|
|
|
|
descripcion?: string;
|
|
|
|
|
descripcion: string;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const AsignaturaSugeridaItemSchema: z.ZodType<DataAsignaturaSugerida> = z
|
|
|
|
|
.object({
|
|
|
|
|
nombre: z.string().describe("Nombre de la asignatura a crear"),
|
|
|
|
|
codigo: z.string().optional().describe(
|
|
|
|
|
codigo: z.string().optional().nullable().describe(
|
|
|
|
|
"Código o clave de la asignatura. Un string único que la identifique, como 'MAT101' o 'FIS202'. Opcional, pero recomendado para evitar confusiones.",
|
|
|
|
|
),
|
|
|
|
|
tipo: z.enum(["TRONCAL", "OBLIGATORIA", "OPTATIVA", "OTRA"]).nullable(),
|
|
|
|
|
creditos: z.number().nullable(),
|
|
|
|
|
horasAcademicas: z.number().optional().nullable(),
|
|
|
|
|
horasIndependientes: z.number().optional().nullable(),
|
|
|
|
|
descripcion: z.string().optional(),
|
|
|
|
|
descripcion: z.string(),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const AsignaturaSugeridaSchema = z
|
|
|
|
|
.object({
|
|
|
|
|
sugerencias: z
|
|
|
|
|
.array(AsignaturaSugeridaItemSchema)
|
|
|
|
|
.length(6)
|
|
|
|
|
.describe("Arreglo de 6 sugerencias de asignatura");
|
|
|
|
|
.describe("Arreglo de 6 sugerencias de asignatura"),
|
|
|
|
|
})
|
|
|
|
|
.describe("Respuesta estructurada con 6 sugerencias de asignatura");
|
|
|
|
|
|
|
|
|
|
Deno.serve(async (req: Request): Promise<Response> => {
|
|
|
|
|
const url = new URL(req.url);
|
|
|
|
@@ -81,7 +85,7 @@ Deno.serve(async (req: Request): Promise<Response> => {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const options: StructuredResponseOptions = {
|
|
|
|
|
model: "gpt-4o-mini",
|
|
|
|
|
model: "gpt-5-mini",
|
|
|
|
|
input: [
|
|
|
|
|
{
|
|
|
|
|
role: "user",
|
|
|
|
@@ -149,7 +153,12 @@ Deno.serve(async (req: Request): Promise<Response> => {
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return sendSuccess(parsed.data);
|
|
|
|
|
console.log(
|
|
|
|
|
`[${
|
|
|
|
|
new Date().toISOString()
|
|
|
|
|
}][${functionName}]: Request processed successfully`,
|
|
|
|
|
);
|
|
|
|
|
return sendSuccess(parsed.data.sugerencias);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
if (error instanceof HttpError) {
|
|
|
|
|
console.error(
|
|
|
|
|