Files
genesis-2/notebooks/definitions-openai.ipynb
T
alexrg 7ee9944ab5 feat: add @toon-format/toon dependency and integrate into OpenAI notebooks
- 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.
2026-02-24 15:20:19 -06:00

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)
{
  nombre: "Galletas de avena premium",
  fabricante: "Industrias Gourmet S.L.",
  perishables: {
    expiryDate: "2026-12-31",
    batchNumber: "BATCH-00123",
    storageTempC: 4
  },
  origen: { country: "España", city: "Valencia" },
  perecedero: null
}