Incidente: Gemma 4 bucle degenerativo (Help Widget + Oráculo)
Resumen
A partir de 2026-06-04 (reportado por Edu, s109):
- Help Widget: pregunta
¿cómo se pueden añadir nuevos dispositivos wifi?→ respuesta con muro de texto repetido (“…la continuación de un proceso de automatización automático o la de…” ×40), ~2837 caracteres de ruido. - Oráculo: frecuentes HTTP 500 (
AI Studio timeout). El modelo no respondía a tiempo, causando abortes sistemáticos.
Ambos síntomas tenían raíz común: Gemma 4 26B-A4B en AI Studio degenera ocasionalmente en bucles periódicos cuando el grounding es flojo o tangencial.
Causa raíz
Gemma 4 entra en un estado estocástico donde genera un segmento de N palabras repetidamente hasta agotar maxOutputTokens (2048 fijo en ese momento). La degeneración ocurre dentro del string answer del responseSchema (constrained decoding no lo evita).
Síntomas observados:
- Latencia extrema: 40+ segundos para completar token-loop → supera timeout del Oráculo (40s) → HTTP 500.
- Output inútil: muro de texto periódico que no contiene información útil.
- Estocástico: con el mismo input, a veces responde bien, a veces degenera.
Impacto
- Help Widget (user-facing): usuarios ven respuestas degeneradas en vez de ayuda útil.
- Oráculo (interno): 500s frecuentes afectan a queries de staff y automatización.
- Tutor: heredaba el mismo problema (timeout ocasional).
Resolución
PR #94 implementa defensas de software sin tocar infraestructura:
clampRepetition()— función determinista que detecta patrones periódicos sostenidos (≥3 repeticiones) y trunca dejando una instancia +[…]. Valida contra el muro real: 2837→200 caracteres.maxOutputTokensdinámico — Help 768, Oracle/Tutor 1024 (antes 2048 fijo). Acota latencia máxima y daño por bucle.HELP_RELEVANCE_FLOOR0.4 — en Help Widget (user_facing), rechaza grounding < 0.4 con respuesta honesta (“No tengo información…”) en vez de intentar sintetizar sobre irrelevancia (donde Gemma 4 tiende a divagar).
Testing
clampRepetition()validado contra el caso real (2837→200 chars, output sano intacto).maxOutputTokensdinámico reduce ventana máxima de degeneración.- Floor de relevancia reduce triggers de síntesis sobre grounding marginal.
Estado post-fix
Después de PR #94:
- Help Widget responde correctamente a wifi y otras consultas tangenciales.
- Oráculo sin timeouts sistemáticos (latencia < 5s para queries normales).
- Tutor estable.
Véase también
- [[feature—biblioteca—anti-degeneracion-gemma-4]]
- [[entity—biblioteca—function—clamp-repetition]]
- [[concept—biblioteca—synthesis-safeguards]]
- [[entity—biblioteca—service—bib-ask]]
- [[entity—biblioteca—endpoint—oracle]]