CreaRack-SL

Edge AI: propagación de google-genai SDK a CNS, Network Tutor y MIB Assistant

Resumen

PR #21 replica el «patrón ganador Auto-Plan s49» — conexión directa a Google AI Studio Paid Tier vía SDK oficial google-genai sin intermediario OpenRouter — en las 3 funciones de IA restantes del producto:

FunciónArchivo afectadoIntegración
CNS Edge Intelligencemonitoring/services/ai_providers/google_genai.pyGoogleGenaiProvider.analyze_incident
Network Tutormonitoring/services/tutor_service.py_ask_google_genai → acall_google_genai
MIB Assistantnetwork/services/mib_assistant.py_call_ai → call_google_genai

El modelo elegido es Gemma 4 26B A4B (gemma-4-26b-a4b-it) — coherencia arquitectónica con Auto-Plan + constraint SaaS comercial cumplido (billing real va a cuenta Google AI Studio Paid Tier de Edu).


Motivación

  • Auto-Plan s49 probó que el SDK google-genai directo supera a OpenRouter como intermediario en calidad, latencia y coste (billing directo a cuenta Edu sin markup OR).
  • Las 3 funciones restantes (CNS, Tutor, MIB) seguían usando OpenRouter o gemini.py con modelo Flash-Lite.
  • Esta PR unifica la capa de IA de Edge bajo un mismo stack, reduciendo deuda técnica y simplificando el troubleshooting en producción.

Archivos cambiados

ArchivoTipoDescripción
monitoring/services/ai_providers/google_genai.pyNUEVO (~259 LOC)GoogleGenaiProvider + helpers async/sync
monitoring/services/ai_providers/__init__.pymodificadoRegistra google_genai en factory
monitoring/services/tutor_service.pymodificadoAñade rama google_genai en ask_tutor
network/services/mib_assistant.pymodificado_call_ai lee EDGE_AI_PROVIDER y despacha
config/settings/base.pymodificadoNueva setting EDGE_AI_GOOGLE_GENAI_MODEL
compose.ymlmodificadoExpone EDGE_AI_GOOGLE_GENAI_MODEL en web
compose.prod.ymlmodificadoExpone EDGE_AI_GOOGLE_GENAI_MODEL en web + worker

Configuración en producción

Variables de entorno

VariableDescripciónValor recomendado
EDGE_AI_PROVIDERSelector de provider activogoogle_genai
EDGE_AI_GOOGLE_GENAI_MODELModelo a usargemma-4-26b-a4b-it (default)
GEMINI_API_KEYAPI key Google AI Studio (reutilizada)ya configurada

Activación off-sesión (Dokploy)

  1. Panel Dokploy PROD + STAGE → servicio web y worker
  2. Añadir / editar: EDGE_AI_PROVIDER=google_genai
  3. Restart ambos servicios

Reversión rápida (~30 s)

EDGE_AI_PROVIDER=openrouter
# restart web + worker

El default del sistema sigue siendo openrouter — la feature es opt-in.


Decisiones técnicas clave

1. Sampling oficial Gemma 4 (no negociable)

temperature=1.0 / top_p=0.95 / top_k=64

Validado en s49. Cambiar sin evidencia empírica degrada calidad.

2. response_mime_type="application/json" obligatorio

Sin este parámetro la calidad de salida JSON baja notablemente (confirmado s49). Aplicado en: analyze_incident (CNS), _call_ai de MIB (cuando response_json=True).

3. Sin safety_settings

Gemma es un modelo open-weights; pasar safety_settings devuelve 400 INVALID_ARGUMENT. A diferencia de GeminiProvider, este provider no los pasa.

4. Backoff 429 en CNS (async)

GoogleGenaiProvider._call_genai implementa exponential backoff (3 reintentos, 2 s → 30 s). Los helpers de Tutor y MIB no incluyen backoff propio — confían en el retry de nivel superior si aplica.

5. MIB usa temperatura 0.1 para JSON estricto

Aunque el sampling oficial Gemma 4 es 1.0, MIB Assistant sobreescribe temperature=0.1 para obtener JSON de clasificación de OIDs más determinista.

6. Reutilización de GEMINI_API_KEY

No se requiere nueva variable de API key. Google AI Studio usa la misma key tanto para modelos Gemini como Gemma.


Patrón de despacho en mib_assistant._call_ai

provider = getattr(settings, "EDGE_AI_PROVIDER", "openrouter")
if provider == "google_genai":
    from monitoring.services.ai_providers.google_genai import call_google_genai
    text = call_google_genai(prompt, temperature=0.1, max_tokens=8192, response_json=True)
else:
    from core.services.ai_providers.openrouter import call_openrouter
    text = call_openrouter(prompt, temperature=0.1, max_tokens=8192, response_json=True)

El fallback openrouter se preserva explícitamente.


Test plan (post-merge)

  • CI verde (modo B)
  • Edu activa EDGE_AI_PROVIDER=google_genai en Dokploy panel
  • Prueba CNS: anomaly insight en dispositivo real
  • Prueba Tutor: chat de networking
  • Prueba MIB Assistant: upload de archivo MIB
  • Feedback recogido off-sesión

Véase también

  • [[entity—monitoring—service—google-genai-provider]]
  • [[entity—monitoring—model—aiinsight]]
  • [[entity—monitoring—service—tutor-service]]
  • [[entity—network—service—mib-assistant]]
  • [[concept—monitoring—cns-edge-intelligence]]