CreaRack-SL

Driver google-genai para Auto-Plan (Gemma 4 directo, Google AI Studio)

Descripción

blueprints/services/google_genai_driver.py es el driver que conecta Auto-Plan con Gemma 4 directo via el SDK oficial google-genai y Google AI Studio Paid Tier. Introducido en PR#14 (s49) como alternativa al driver OpenRouter ya existente (openrouter_driver.py).

Implementa el mismo contrato que openrouter_driver.py: función pública analyze_blueprint(api_key, file_path, prompt) -> dict, devolviendo el JSON canónico de Auto-Plan con claves racks, connections, walls, texts, symbols.

Punto de entrada

# blueprints/services/google_genai_driver.py
def analyze_blueprint(api_key: str, file_path: str, prompt: str) -> dict[str, Any]:
    ...

Invocado desde AutoPlanService._analyze_with_gemma4() en blueprints/services/autoplan.py, que a su vez es llamado por el dispatcher central analyze_blueprint_image() cuando provider == "google_genai".

Configuración (env vars)

VariableDefaultDescripción
GEMMA4_GENAI_MODELgemma-4-26b-a4b-itModelo a usar. Alternativa: gemma-4-31b-it (Dense, plan B s49)
GEMMA4_GENAI_SEED(no set)Seed para reproducibilidad disparo a disparo (igual que OPENROUTER_SEED)
GEMMA4_GENAI_MAX_IMAGE_DIMENSION2048Máxima dimensión de imagen antes de resize
GEMMA4_GENAI_JPEG_QUALITY95Calidad JPEG al recodificar la imagen
GEMINI_API_KEY—Obligatoria. Google AI Studio acepta la misma key para Gemini y Gemma 4 (billing Paid Tier vinculado)

Todas las vars están registradas en config/settings/base.py.

Sampling (Gemma 4 oficial)

Los parámetros de sampling están fijados a los valores oficiales de Gemma 4 y no son sobreescribibles por env:

temperature       = 1.0
top_p             = 0.95
top_k             = 64
max_output_tokens = 16384
response_mime_type = "application/json"

⚠️ safety_settings NO se envían. Gemma open-weights rechaza la llamada si se incluyen.

Pipeline de imagen

  1. Abrir imagen con Pillow.
  2. Resize si max(w, h) > GEMMA4_GENAI_MAX_IMAGE_DIMENSION (ratio preservado, LANCZOS).
  3. Convertir a RGB (aplana transparencias con fondo blanco).
  4. Recodificar a JPEG con GEMMA4_GENAI_JPEG_QUALITY.
  5. Enviar como types.Part.from_bytes(mime_type="image/jpeg").

Retry logic

Reintentos automáticos (máx 3) con backoff lineal (10s × intento) ante:

  • HTTP 503 / 504
  • deadline / timeout
  • overload / unavailable

json.JSONDecodeError no se reintenta — se relanza inmediatamente con contexto de posición para diagnóstico.

Activación

El driver no se activa por defecto. Requiere:

AUTOPLAN_PROVIDER=google_genai   # en .env / Dokploy
GEMINI_API_KEY=<tu-key>

El default de AUTOPLAN_PROVIDER sigue siendo openrouter (Regla 8 de CLAUDE.md).

Historial de sesiones

  • s49 — Primer test A/B: baseline s48 con OpenRouter (100% calidad, 68/68, 2:09 min, $0). Pendiente comparar resultados directos.
  • Modelo plan B documentado: gemma-4-31b-it Dense si gemma-4-26b-a4b-it falla.

Véase también

  • [[feature—autoplan—provider-google-genai]] — Feature completa del proveedor google_genai en Auto-Plan (activación, test plan, decisión pendiente)
  • [[entity—blueprints—model—blueprint]] — Modelo Blueprint al que pertenecen los planos procesados
  • [[entity—blueprints—model—aiprompt]] — Modelo AIPrompt que gestiona los prompts enviados al driver