Resolver env vars vacías en settings de IA con helper `_env_str`
Contexto
En sesión 115 (2026-06-09), PROD sufrió dos crashes encadenados en Auto-Plan (“Magic Import”):
GEMMA4_GENAI_JPEG_QUALITYvacío →int("")→ValueError→ 400 en toda importación- Tras arreglar 1, salió
GEMMA4_GENAI_MODELvacío →ValueError: model is requireden driver google-genai → 400 nuevamente
Causa raíz: Dokploy declara env vars en el compose como ${VAR:-} (sin valor). Cuando una var SIN valor está declarada así, llega al contenedor como cadena vacía "", no como ausente. El 2º argumento de os.getenv(name, default) solo protege contra ausencia, no contra valor vacío:
os.getenv("GEMMA4_GENAI_JPEG_QUALITY") # → "" (vacío pisa el default)
os.getenv("GEMMA4_GENAI_JPEG_QUALITY", "95") # → "" (aún así, porque "está declarada")
Esto rompía drivers de IA que esperaban un modelo nombre (Google GenAI) o un entero válido (JPEG quality, dimensión).
Decisión
Introducir un helper _env_str(name: str, default: str) -> str en config/settings/base.py:
def _env_str(name: str, default: str) -> str:
return os.getenv(name) or default
Aplicación: TODAS las settings string de IA que tengan un default legítimo deben usar _env_str en lugar de os.getenv(name, default):
- Providers:
AUTOPLAN_PROVIDER,EDGE_AI_PROVIDER - Modelos Gemma 4:
GEMMA4_GENAI_MODEL - Modelos Edge AI (CNS/Tutor/MIB):
EDGE_AI_GOOGLE_GENAI_MODEL - Modelos Anthropic:
ANTHROPIC_HAIKU_MODEL,ANTHROPIC_SONNET_MODEL - Ollama:
OLLAMA_BASE_URL,OLLAMA_MODEL - Dimensión/Calidad Gemma 4:
GEMMA4_GENAI_MAX_IMAGE_DIMENSION,GEMMA4_GENAI_JPEG_QUALITY
Exclusión: Las API keys (que tienen default None) se dejan con os.getenv crudo — el código ya trata "" como “no key autenticada”.
Impacto
- ✅ Trata env vacío == env ausente → ambos caen al default
- ✅ No cambia ningún valor default (Regla 8)
- ✅ Blinda la resolución contra footguns de Dokploy
- ✅ Tests de regresión:
tests/test_autoplan_settings.pyampliado con 5 aserciones nuevas (env vacío + valores explícitos)
Véase también
- [[entity—blueprints—service—autoplan]]
- [[entity—blueprints—endpoint—magic-import]]
- [[incident—20260609—autoplan-prod-crashes]]
- [[concept—core—environment-config]]