Volver a la wiki

Incidente: bucle de Gemma por subcadena + JSON sin cerrar en el chat del Correo

Cuándo

11-09-2026. Visto por Edu en el chat del Correo (el asistente de bandeja de Zoho integrado en el workspace).

Síntomas visibles

La respuesta del chat mostró al usuario el JSON crudo del modelo, sin parsear, con una subcadena repetida cientos de veces:

{"action":"responder","answer":"...resak-resak-resak-resak-..."}

El texto no llegó a ningún punto de corte porque el JSON nunca se cerró — el modelo agotó los tokens de salida en mitad del bucle, dentro del valor de "answer".

Causa raíz

Dos fallos distintos, uno en cada capa:

  1. La defensa por palabras no ve una subcadena repetida sin espacios. clampRepetition() — ver [[entity—biblioteca—function—clamp-repetition]] — trocea el texto por espacios; una racha como "resak-resak-resak-..." es UN solo token para esa función, así que no dispara el corte. La defensa por carácter del Oráculo tampoco lo cazaba porque solo comparaba un carácter contra el anterior, no un patrón de varios caracteres.
  2. callGemma() en el chat del Correo devolvía el texto crudo si el JSON no parseaba. Cuando el modelo entra en bucle dentro del valor de "answer" y agota maxOutputTokens antes de cerrar las comillas y la llave de cierre, JSON.parse() falla. El código anterior cortaba los primeros 2000 caracteres del texto tal cual llegó del modelo — incluyendo el envoltorio {"action":"responder","answer":" — y se lo mandaba al usuario como si fuera la respuesta.

Fix aplicado

Commit bcd9b95f5f06ff3f626f78be32ef36b8e403170c (PR #177):

Lecciones

Preventivos futuros

Véase también

Subir