Función de ai-structured simplificada + tipado de la entrada

This commit is contained in:
2026-01-20 11:46:50 -06:00
parent 7a29f1a87d
commit 1727b09bfb
4 changed files with 146 additions and 825 deletions
+15 -13
View File
@@ -9,6 +9,7 @@ import { createClient } from "npm:@supabase/supabase-js@2";
import type { AIGeneratePlanInput } from "./types.ts";
import { z } from "zod";
import { systemPrompt } from "./prompts.ts";
import { strict } from "node:assert";
Deno.serve(async (req) => {
if (req.method === "OPTIONS") {
@@ -136,24 +137,25 @@ Deno.serve(async (req) => {
- Descripción del enfoque: ${payload.iaConfig.descripcionEnfoque}
- Notas adicionales: ${payload.iaConfig.notasAdicionales ?? "Ninguna"}`;
const aiStructuredPayload = {
response: {
input: [
{ role: "system", content: systemPrompt },
{ role: "user", content: userPrompt },
],
model: "gpt-5-nano",
input: [
{ role: "system", content: systemPrompt },
{ role: "user", content: userPrompt },
],
text: {
format: {
type: "json_schema",
name: `${estructuraPlan?.nombre}`,
schema: estructuraPlan?.definicion,
strict: true,
},
},
structured: estructuraPlan.definicion,
references: {
openaiFileIds: payload.iaConfig.archivosReferencia,
vectorStoreIds: payload.iaConfig.repositoriosIds,
},
usarMCP: Boolean(payload.iaConfig?.usarMCP),
};
const aiStructuredFormData = new FormData();
aiStructuredFormData.append("payload", JSON.stringify(aiStructuredPayload));
aiStructuredFormData.append("options", JSON.stringify(aiStructuredPayload));
for (const file of payload.archivosAdjuntos ?? []) {
aiStructuredFormData.append("archivos", file);
aiStructuredFormData.append("files", file);
}
const { data: aiJson, error } = await supabaseService.functions.invoke(