- 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.
6.5 KiB
6.5 KiB
import { load } from "jsr:@std/dotenv";
import OpenAI from "jsr:@openai/openai";
const env = await load({
export: true,
});
const openai = new OpenAI();
const perishables = {
expiryDate: { type: "string", format: "date" },
batchNumber: {
type: "string",
maxLength: 20,
description: "Puede ser inventado",
},
storageTempC: {
type: "number",
minimum: -30,
maximum: 10,
description: "Temperatura de almacenamiento en grados Celsius",
},
};
const origen = {
country: { type: "string", maxLength: 50 },
city: { type: "string", maxLength: 50 },
};
// Transformar las definiciones: poner en properties, agregar required, y additionalProperties: false
const perishablesWithMetadata = {
...perishables,
type: "object",
required: Object.keys(perishables),
additionalProperties: false,
};
const origenWithMetadata = {
...origen,
type: "object",
required: Object.keys(origen),
additionalProperties: false,
};
const combinedSchema = {
type: "object",
$defs: {
perishables: perishablesWithMetadata,
origen: origenWithMetadata,
},
properties: {
nombre: { type: "string", maxLength: 100 },
fabricante: { type: "string", maxLength: 100 },
// Agregar campo del preset
perishables: { $ref: "#/$defs/perishables" },
origen: { $ref: "#/$defs/origen" },
},
required: ["nombre", "fabricante", "perishables", "origen"],
additionalProperties: false,
};
import { title } from "node:process";
const combinedSchema = {
type: "object",
$defs: {
perishables: {
type: "object",
properties: {
expiryDate: { type: "string", format: "date" },
batchNumber: {
type: "string",
maxLength: 20,
description: "Puede ser inventado",
},
storageTempC: {
type: "number",
minimum: -30,
maximum: 10,
description:
"Temperatura de almacenamiento en grados Celsius",
},
},
required: ["expiryDate", "batchNumber", "storageTempC"],
additionalProperties: false,
},
origen: {
type: "object",
properties: {
country: { type: "string", maxLength: 50 },
city: { type: "string", maxLength: 50 },
},
required: ["country", "city"],
additionalProperties: false,
},
},
properties: {
nombre: { type: "string", maxLength: 100 },
fabricante: { type: "string", maxLength: 100 },
// Agregar campo del preset
perishables: {
$ref: "#/$defs/perishables",
"x-column": "perishables",
},
origen: { $ref: "#/$defs/origen" },
},
required: ["nombre", "fabricante", "perishables", "origen", "perecedero"],
additionalProperties: false,
};
const result = await openai.responses.create({
model: "gpt-5-nano",
input:
"Genera un producto con el siguiente formato JSON, sin texto adicional:",
text: {
format: {
type: "json_schema",
name: "producto",
schema: combinedSchema,
},
},
});
JSON.parse(result.output_text)