feat(ai): Google-genai SDK directo propagado a CNS, Network Tutor y MIB Assistant
Resumen
PR #21 (edu/google-genai-cns-tutor-mib) introduce el SDK oficial google-genai como provider de primera clase para tres subsistemas de IA de CreaRack Pro:
| Subsistema | Archivo | Cambio |
|---|---|---|
| CreaRack Network Sentinel (CNS) | monitoring/services/ai_providers/google_genai.py | Nuevo GoogleGenaiProvider (259 LOC) |
| Network Tutor | monitoring/services/tutor_service.py | Nueva rama _ask_google_genai |
| MIB Assistant | network/services/mib_assistant.py | _call_ai ahora soporta google_genai además de openrouter |
Motivación: coherencia arquitectónica con Auto-Plan (ganador sprint 49), eliminación del intermediario OpenRouter para billing directo en Google AI Studio Paid Tier (cuenta Edu), y uso del sampling oficial validado de Gemma 4.
Contexto: Sprint 49 (s49)
El driver blueprints/services/google_genai_driver.py para Auto-Plan fue validado en s49 como ganador de calidad. Este PR es la propagación natural de ese stack al resto de módulos AI de la plataforma:
Auto-Plan (s49, ganador) → CNS + Tutor + MIB (PR#21)
Mismo SDK (google-genai), mismo modelo (gemma-4-26b-a4b-it), mismo sampling (temp 1.0 / top-p 0.95 / top-k 64), mismo flag response_mime_type="application/json".
Cambios por archivo
monitoring/services/ai_providers/google_genai.py (nuevo, 259 LOC)
Nuevo módulo con:
- Clase
GoogleGenaiProvider(AIProvider)para CNS - Helper async
acall_google_genai()para Tutor - Helper sync
call_google_genai()para MIB Assistant - Exponential backoff (3 reintentos, delay inicial 2 s, máx 30 s)
- Reparación automática de JSON truncado
Ver [[entity—monitoring—service—google-genai-provider]] para referencia completa.
monitoring/services/ai_providers/__init__.py
# Antes
providers = {"openrouter": ..., "gemini": ..., "claude": ..., ...}
# Después
providers = {"openrouter": ..., "google_genai": GoogleGenaiProvider, "gemini": ..., ...}
monitoring/services/tutor_service.py
- Validación de provider actualizada: añade
"google_genai"a la lista de providers válidos. - Nueva función
_ask_google_genai(messages)que llama aacall_google_genaicon sampling oficial Gemma 4. - Rama
elif provider_name == "google_genai":en el dispatcher.
# Sampling usado en Tutor:
temperature=1.0, top_p=0.95, top_k=64, max_tokens=1024
network/services/mib_assistant.py
La función _call_ai(prompt) ahora lee settings.EDGE_AI_PROVIDER y bifurca:
if provider == "google_genai":
# SDK directo, temperatura 0.1 (JSON estricto para clasificación OID)
text = call_google_genai(prompt, temperature=0.1, max_tokens=8192, response_json=True)
else:
# Fallback: OpenRouter (créditos OR)
text = call_openrouter(prompt, temperature=0.1, max_tokens=8192, response_json=True)
Nota: MIB usa
temperature=0.1(no el 1.0 de Tutor/CNS) porque necesita JSON estricto para clasificación de OIDs.
config/settings/base.py
Nueva variable de settings:
EDGE_AI_GOOGLE_GENAI_MODEL = os.getenv("EDGE_AI_GOOGLE_GENAI_MODEL", "gemma-4-26b-a4b-it")
El comentario del bloque CNS se actualiza para reflejar que ahora cubre también Tutor y MIB Assistant.
compose.yml / compose.prod.yml
EDGE_AI_GOOGLE_GENAI_MODEL añadida como variable de entorno con default vacío (:-) en los servicios web y celery_worker.
Decisiones técnicas destacadas
Por qué response_mime_type="application/json" es crítico
Sin este flag la calidad de respuesta de Gemma 4 cae al ~75%. Confirmado empíricamente en s49 con Auto-Plan. Activado en CNS y MIB (siempre necesitan JSON); opcional en Tutor (respuesta libre).
Por qué no safety_settings
Gemma 4 es un modelo open-weights. Incluir safety_settings devuelve 400 INVALID_ARGUMENT. A diferencia de Gemini, no tiene filtros de seguridad configurables vía API.
Billing directo vs OpenRouter
google_genai: billing directo a Google AI Studio Paid Tier. Sin comisión OR. Recomendado para producción con volumen.openrouter(fallback): créditos OpenRouter. Válido para desarrollo o si no hayGEMINI_API_KEY.
Temperatura diferenciada por subsistema
| Subsistema | Temperature | Razón |
|---|---|---|
| CNS (análisis incidentes) | 1.0 | Sampling oficial Gemma 4, exploración de diagnósticos |
| Tutor (conversación) | 1.0 | Sampling oficial Gemma 4, respuestas naturales |
| MIB Assistant (clasificación OID) | 0.1 | JSON estricto, determinismo en clasificación |
Activación
Para activar google_genai como provider:
# .env o compose override
EDGE_AI_PROVIDER=google_genai
GEMINI_API_KEY=<tu_key_google_ai_studio>
EDGE_AI_GOOGLE_GENAI_MODEL=gemma-4-26b-a4b-it # opcional, es el default
Para forzar un modelo distinto (ej. Gemma 4 9B):
EDGE_AI_GOOGLE_GENAI_MODEL=gemma-4-9b-a4b-it
Véase también
- [[entity—monitoring—service—google-genai-provider]]
- [[entity—monitoring—service—gemini-provider]]
- [[entity—monitoring—service—openrouter-provider]]
- [[entity—monitoring—service—tutor-service]]
- [[entity—network—service—mib-assistant]]