Files
genesis-2/notebooks/definitions-openai.ipynb
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

223 lines
6.5 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 14,
"id": "902bff53",
"metadata": {},
"outputs": [],
"source": [
"import { load } from \"jsr:@std/dotenv\";\n",
"import OpenAI from \"jsr:@openai/openai\";\n",
"\n",
"const env = await load({\n",
" export: true,\n",
"});\n",
"\n",
"const openai = new OpenAI();"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "68f89168",
"metadata": {},
"outputs": [],
"source": [
"const perishables = {\n",
" expiryDate: { type: \"string\", format: \"date\" },\n",
" batchNumber: {\n",
" type: \"string\",\n",
" maxLength: 20,\n",
" description: \"Puede ser inventado\",\n",
" },\n",
" storageTempC: {\n",
" type: \"number\",\n",
" minimum: -30,\n",
" maximum: 10,\n",
" description: \"Temperatura de almacenamiento en grados Celsius\",\n",
" },\n",
"};\n",
"\n",
"const origen = {\n",
" country: { type: \"string\", maxLength: 50 },\n",
" city: { type: \"string\", maxLength: 50 },\n",
"};\n",
"\n",
"// Transformar las definiciones: poner en properties, agregar required, y additionalProperties: false\n",
"\n",
"const perishablesWithMetadata = {\n",
" ...perishables,\n",
" type: \"object\",\n",
" required: Object.keys(perishables),\n",
" additionalProperties: false,\n",
"};\n",
"\n",
"const origenWithMetadata = {\n",
" ...origen,\n",
" type: \"object\",\n",
" required: Object.keys(origen),\n",
" additionalProperties: false,\n",
"};\n",
"\n",
"\n",
"\n",
"const combinedSchema = {\n",
" type: \"object\",\n",
" $defs: {\n",
" perishables: perishablesWithMetadata,\n",
" origen: origenWithMetadata,\n",
" },\n",
" properties: {\n",
" nombre: { type: \"string\", maxLength: 100 },\n",
" fabricante: { type: \"string\", maxLength: 100 },\n",
"\n",
" // Agregar campo del preset\n",
" perishables: { $ref: \"#/$defs/perishables\" },\n",
" origen: { $ref: \"#/$defs/origen\" },\n",
" },\n",
" required: [\"nombre\", \"fabricante\", \"perishables\", \"origen\"],\n",
" additionalProperties: false,\n",
"};\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1403c789",
"metadata": {},
"outputs": [],
"source": [
"import { title } from \"node:process\";\n",
"\n",
"const combinedSchema = {\n",
" type: \"object\",\n",
" $defs: {\n",
" perishables: {\n",
" type: \"object\",\n",
" properties: {\n",
" expiryDate: { type: \"string\", format: \"date\" },\n",
" batchNumber: {\n",
" type: \"string\",\n",
" maxLength: 20,\n",
" description: \"Puede ser inventado\",\n",
" },\n",
" storageTempC: {\n",
" type: \"number\",\n",
" minimum: -30,\n",
" maximum: 10,\n",
" description:\n",
" \"Temperatura de almacenamiento en grados Celsius\",\n",
" },\n",
" },\n",
" required: [\"expiryDate\", \"batchNumber\", \"storageTempC\"],\n",
" additionalProperties: false,\n",
" },\n",
" origen: {\n",
" type: \"object\",\n",
" properties: {\n",
" country: { type: \"string\", maxLength: 50 },\n",
" city: { type: \"string\", maxLength: 50 },\n",
" },\n",
" required: [\"country\", \"city\"],\n",
" additionalProperties: false,\n",
" },\n",
" },\n",
" properties: {\n",
" nombre: { type: \"string\", maxLength: 100 },\n",
" fabricante: { type: \"string\", maxLength: 100 },\n",
"\n",
" // Agregar campo del preset\n",
" perishables: {\n",
" $ref: \"#/$defs/perishables\",\n",
" \"x-column\": \"perishables\",\n",
" },\n",
"\n",
" origen: { $ref: \"#/$defs/origen\" },\n",
" },\n",
" required: [\"nombre\", \"fabricante\", \"perishables\", \"origen\", \"perecedero\"],\n",
" additionalProperties: false,\n",
"};\n"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "1fbda124",
"metadata": {},
"outputs": [],
"source": [
"const result = await openai.responses.create({\n",
" model: \"gpt-5-nano\",\n",
" input:\n",
" \"Genera un producto con el siguiente formato JSON, sin texto adicional:\",\n",
" text: {\n",
" format: {\n",
" type: \"json_schema\",\n",
" name: \"producto\",\n",
" schema: combinedSchema,\n",
" },\n",
" },\n",
"});\n"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "85e7967a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{\n",
" nombre: \u001b[32m\"Galletas de avena premium\"\u001b[39m,\n",
" fabricante: \u001b[32m\"Industrias Gourmet S.L.\"\u001b[39m,\n",
" perishables: {\n",
" expiryDate: \u001b[32m\"2026-12-31\"\u001b[39m,\n",
" batchNumber: \u001b[32m\"BATCH-00123\"\u001b[39m,\n",
" storageTempC: \u001b[33m4\u001b[39m\n",
" },\n",
" origen: { country: \u001b[32m\"España\"\u001b[39m, city: \u001b[32m\"Valencia\"\u001b[39m },\n",
" perecedero: \u001b[1mnull\u001b[22m\n",
"}"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"JSON.parse(result.output_text)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "dae842ad",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Deno",
"language": "typescript",
"name": "deno"
},
"language_info": {
"codemirror_mode": "typescript",
"file_extension": ".ts",
"mimetype": "text/x.typescript",
"name": "typescript",
"nbconvert_exporter": "script",
"pygments_lexer": "typescript",
"version": "5.9.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}