CreaRack-SL

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:

SubsistemaArchivoCambio
CreaRack Network Sentinel (CNS)monitoring/services/ai_providers/google_genai.pyNuevo GoogleGenaiProvider (259 LOC)
Network Tutormonitoring/services/tutor_service.pyNueva rama _ask_google_genai
MIB Assistantnetwork/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 a acall_google_genai con 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 hay GEMINI_API_KEY.

Temperatura diferenciada por subsistema

SubsistemaTemperatureRazón
CNS (análisis incidentes)1.0Sampling oficial Gemma 4, exploración de diagnósticos
Tutor (conversación)1.0Sampling oficial Gemma 4, respuestas naturales
MIB Assistant (clasificación OID)0.1JSON 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]]