Resumen
Cierre del Hito F del Plan Hardening post-Máster (sesión s101, 2026-06-01). Refactor de Auto-Plan para retirar el provider Gemini legacy hardcodeado que violaba la Regla 8 (modelo único Gemma 4) + investigación completa de qué sustenta la calidad “100%” del servicio.
Alcance: solo Auto-Plan. El provider gemini en otros módulos (monitoring/) se mantiene sin cambios.
Cambios
Refactor: eliminación de provider Gemini legacy
Archivos modificados: 4
| Archivo | Acción | LOC |
|---|---|---|
blueprints/services/autoplan.py | Eliminar método _analyze_with_gemini + imports google.genai | −153 |
blueprints/api/autoplan.py | Eliminar rama elif provider == "gemini" del dispatcher | −4 |
config/settings/base.py | Actualizar docstring de AUTOPLAN_PROVIDER | ~2 |
context/AI_CONFIG.md | Actualizar matriz de env vars | ~1 |
Modelo retirado: gemini-3.1-flash-lite-preview (hardcodeado, no configurable).
Nuevo estado de AUTOPLAN_PROVIDER: solo 2 valores válidos:
google_genai(default) → Gemma 4 directo vía Google AI Studio Paid Tierollama(self-host dev) → LLM local
Investigación: ¿Qué sostiene la calidad “100%” de Auto-Plan?
Análisis detallado en sesión s101 (ver ADR decision--20260601--retirada-provider-gemini-autoplan):
Hallazgos principales:
- Constrained decoding es el pilar: la opción
response_mime_type="application/json"de Gemma 4 fuerza salidas JSON válidas a nivel sintáctico - El prompt sustenta la semántica: redacción cuidada para minimizar alucinaciones en detección de racks/conexiones/anotaciones
- Validador duro es contraproducente: análisis de rechazo mostró que esquemas estrictos rechazaban salidas válidas (p.ej. campos opcionales ausentes); sin beneficio en detección de errores
Decisión consensuada: NO añadir validador automático de resultado post-generación. La calidad se garantiza con:
- Mantenimiento y versionado del prompt (
AIPromptmodel) - Constrained decoding de Gemma 4
- Pruebas de regresión en
scripts/test_autoplan_quality.py
Documentado: seción “Validación de salidas AI” en context/AI_CONFIG.md.
Impacto runtime
- Cero: PROD ya usaba
google_genaidesde s49. Este refactor es limpieza interna. - Verificación local: imports OK, linting (ruff) limpio.
Cierre del footgun
- Footgun #22 del GAPS: “Auto-Plan tenía provider heredado reactivable, saltando Regla 8”
- Status: ✅ CERRADO
Hito F en contexto
Último de los 6 GAPS de severidad ALTA del Plan Hardening post-Máster:
| Hito | Descripción | Status |
|---|---|---|
| A | Alerting de PROD | ✅ s95 (PR #50) |
| B | Honestidad Signage | ✅ s96 (PR #52) |
| C | Portero global API | ✅ s99 (PR #53) |
| D | RLS de escritura | ✅ s101 (PR #54) |
| F | Auto-Plan: retirada Gemini + investigación calidad | ✅ s101 (PR #55) |
| E | Cifrado datos sensibles | ⬜ (próximo) |
Referencias
- Sesión: s101
- PR: #55
- Autor: @Esquembri (con Claude Code)
- Plan maestro:
TASK.md(sección “Plan Hardening post-Máster”) - ADR asociado: [[decision—20260601—retirada-provider-gemini-autoplan]]
- Regla 8:
CLAUDE.md— modelo único Gemma 4
Véase también
- [[decision—20260601—retirada-provider-gemini-autoplan]]
- [[concept—blueprints—autoplan]]
- [[entity—blueprints—service—autoplan]]
- [[entity—blueprints—endpoint—autoplan-import]]
- [[entity—blueprints—model—aiprompt]]