- Updated deno.lock and package.json to include @toon-format/toon@^2.1.0. - Modified background-openai.ipynb to handle error responses and adjust execution counts. - Enhanced definitions-openai.ipynb to include additional metadata for perishables and origen schemas. - Refactored embeddings-openai.ipynb to improve error handling and output formatting. - Updated create-chat-conversation function to append messages and responses to conversations. - Added SQL functions for appending conversation data to the database.
18 KiB
18 KiB
import { load } from "jsr:@std/dotenv";
import OpenAI from "jsr:@openai/openai";
const env = await load({
export: true,
});
const openai = new OpenAI();
import { createClient } from "@supabase/supabase-js";
const supabaseUrl = Deno.env.get("SUPABASE_URL") || env.SUPABASE_URL;
const supabaseKey = Deno.env.get("SUPABASE_ANON_KEY") || env.SUPABASE_ANON_KEY;
const supabase = createClient(supabaseUrl, supabaseKey);
// plan Crear un plan en la base (sin datos) estado generando
const { data: plan, error } = await supabase.from("planes_estudio").insert({
"carrera_id": "8208da08-d549-4359-8865-9d806bc54f19",
"estructura_id": "69fb2b77-5a95-47e0-bf1f-389d384200e4",
"estado_actual_id": "18f49b67-8077-4371-be6e-2019a3be3562",
"nombre": "Ingeniearía en Cifbernética y Ciberseguridad (2025)",
"nivel": "Doctorado",
"tipo_ciclo": "Semestre",
"numero_ciclos": 8,
"activo": true,
"tipo_origen": "IA",
"creado_por": "11111111-1111-1111-1111-111111111111",
"actualizado_por": "11111111-1111-1111-1111-111111111111",
}).select("*").single();
error
let response = await openai.responses.create({
model: "gpt-5-mini",
input: "Hola mundo",
metadata: {
tabla: "planes_estudio",
id: '2',
},
text: {
format: {
type: "json_schema",
name: "response_schema",
schema: {
type: "object",
properties: {
"ai-message": {
type: "string",
description:
"Un mensaje de texto que la IA generará para el usuario final. Este mensaje debe ser claro y directo, proporcionando la información solicitada por el usuario o indicando que no se puede procesar la solicitud si no está relacionada con planes de estudio o asignaturas.",
},
"suggested-topic": {
type: "string",
description:
"Un tema de investigación sugerido por la IA que sea relevante para el plan de estudio o asignatura mencionada en la solicitud del usuario. Este tema debe ser específico y relacionado con el área de estudio correspondiente.",
},
},
required: ["ai-message", "suggested-topic"],
additionalProperties: false,
},
},
},
background: true,
});
response;
while (response.status === "queued" || response.status === "in_progress") {
console.log("Current status: " + response.status);
await new Promise((resolve) => setTimeout(resolve, 2000)); // wait 2 seconds
response = await openai.responses.retrieve(response.id);
}
response;
response.metadata
await supabase.from(response.metadata.tabla).update({
datos: JSON.parse(response.output_text),
}).eq("id", response.metadata.id).select("*").single();