From 3a1eaf6e5b5e5ec049edf2d7ad3e8b41360b47f1 Mon Sep 17 00:00:00 2001 From: urieljareth Date: Tue, 28 Jul 2026 21:25:20 -0600 Subject: [PATCH] Propuesta IA: aflojar las restricciones que peleaban con una respuesta honesta Medicion de 3 vueltas mas contra datos reales. El aplanado del commit anterior NO redujo los reintentos: subieron de 3 a 10. Se mantiene porque quitar ese nivel es correcto de todos modos, pero no cumplio su proposito. Lo que si salio de esa medicion son dos restricciones mias que provocaban el rechazo: - min(5) en los textos de materiales, decisiones, menciones y red flags. Con una transcripcion pobre no hay nada que listar, asi que el modelo mete "N/A" o un guion para rellenar y falla. Ocurrio 4 veces SEGUIDAS en una vuelta. Baja a min(3), y el prompt ahora dice explicitamente que devolver el array vacio es la respuesta correcta y que no rellene. - beneficios.etiqueta.max(40) se pasaba en 2 de 3 vueltas. Sube a 70. Es el mismo patron que el tope de 40 partidas: el schema peleandose con la realidad, no el modelo fallando. Co-Authored-By: Claude Opus 5 (1M context) --- src/lib/propuesta/prompts.ts | 2 ++ src/lib/propuesta/schemas.ts | 11 ++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/lib/propuesta/prompts.ts b/src/lib/propuesta/prompts.ts index e58b197..db4e258 100644 --- a/src/lib/propuesta/prompts.ts +++ b/src/lib/propuesta/prompts.ts @@ -158,6 +158,8 @@ Reglas de este paso: ser "por_validar". - En quienLoDijo usa el ROL ("el socio", "quien atiende el WhatsApp"), no el nombre propio, salvo que sea el interlocutor comercial. +- Si de alguna de estas listas no hay NADA que decir, devuelvela VACIA. Un array vacio + es la respuesta correcta; no metas "N/A", "ninguno" ni un guion para rellenar. - En redFlags anota lo que deberia preocuparle al asesor: que pidan descuento antes de entender el alcance, que no este presente quien decide, que no haya ninguna cifra del problema, o un "hagan todo y luego vemos".`; diff --git a/src/lib/propuesta/schemas.ts b/src/lib/propuesta/schemas.ts index bbe9321..9c7d383 100644 --- a/src/lib/propuesta/schemas.ts +++ b/src/lib/propuesta/schemas.ts @@ -47,14 +47,14 @@ export const hechosSchema = z ) .max(40), materialesPendientes: z - .array(z.object({ texto: z.string().min(5), bloqueaEntrega: z.boolean() })) + .array(z.object({ texto: z.string().min(3), bloqueaEntrega: z.boolean() })) .max(15), decisionesPendientes: z - .array(z.object({ texto: z.string().min(5), quienDecide: z.string() })) + .array(z.object({ texto: z.string().min(3), quienDecide: z.string() })) .max(15), - mencionesFueraDeAlcance: z.array(z.string().min(5)).max(15), + mencionesFueraDeAlcance: z.array(z.string().min(3)).max(15), redFlags: z - .array(z.object({ senal: z.string().min(5), severidad: z.enum(["baja", "media", "alta"]) })) + .array(z.object({ senal: z.string().min(3), severidad: z.enum(["baja", "media", "alta"]) })) .max(10), }) .strict(); @@ -172,7 +172,8 @@ export const redaccionSchema = z beneficios: z .array( z.object({ - etiqueta: z.string().min(3).max(40), + // 70 y no 40: se pasaba en 2 de 3 vueltas contra datos reales. + etiqueta: z.string().min(3).max(70), texto: z.string().min(20), hallazgoId: z .string()