Volver a la wiki

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:

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

# 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

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

Subir