Volver a la wiki

Auto-Plan Performance Optimization

Auto-Plan Performance Optimization

Fecha: 29-01-2026 Versión: v6.0.9 Archivo principal: blueprints/services/autoplan.py

Resumen

Optimizaciones aplicadas al sistema Auto-Plan para reducir la latencia de análisis de blueprints con Gemini AI.

Problema Original

MétricaValor Original
Tiempo total~76 segundos
Tamaño imagen enviada1.47 MB (PNG)
Dimensión máxima3072 px
FormatoPNG

Optimizaciones Aplicadas

1. Reducción de MAX_DIMENSION (3072 → 2048)

# Antes
MAX_DIMENSION = 3072

# Después
MAX_DIMENSION = 2048

Impacto: Imagen 2953x2125 se redimensiona a 2048x1473 (~50% menos píxeles)

2. Cambio de formato PNG → JPEG

# Antes
img.save(img_bytes, format='PNG')

# Después
img.save(img_bytes, format='JPEG', quality=90, optimize=True)

Impacto: Reducción de ~75% en tamaño de archivo (1.47MB → 368KB)

3. Timing Logs para Debugging

import time as _time
t_start = _time.time()
# ... procesamiento ...
t_prep = _time.time() - t_start
logger.info(f"[AutoPlan] Processed image: {img.size}, format=JPEG, size={img_size_kb:.1f}KB (prep: {t_prep:.2f}s)")

# ... llamada API ...
t_api_start = _time.time()
response = client.models.generate_content(...)
t_api = _time.time() - t_api_start
logger.info(f"[AutoPlan] Gemini API completed in {t_api:.2f}s ({len(text_response)} chars)")

Resultados

MétricaAntesDespuésMejora
Tamaño imagen1.47 MB368 KB-75%
Dimensiones2953x21252048x1473-50% píxeles
Tiempo preparaciónN/A0.48sMedible
Tiempo API GeminiN/A67.31sMedible
Tiempo total76s68s-10%

Distribución del Tiempo (Post-Optimización)

Total: 68.02s
├── Preparación imagen: 0.48s (0.7%)
├── Gemini API: 67.31s (98.9%)
└── Procesamiento DB: ~0.23s (0.4%)

Conclusión: El 99% del tiempo es la API de Gemini. Las optimizaciones de imagen reducen la latencia de transmisión pero el procesamiento de IA es el factor dominante.

Configuración Actual

# blueprints/services/autoplan.py

MAX_DIMENSION = 2048  # Máximo px en cualquier dimensión
FORMAT = 'JPEG'       # Formato de salida
QUALITY = 90          # Calidad JPEG (0-100)

# Gemini API Config
generation_config = types.GenerateContentConfig(
    temperature=0.1,      # Baja para resultados determinísticos
    top_p=0.95,
    top_k=40,
    max_output_tokens=16384,  # 16K tokens (respuesta típica ~3K)
)

Posibles Mejoras Futuras

Baja prioridad (impacto mínimo)

MejoraImpacto EsperadoRiesgo
Reducir max_output_tokens a 8192Mínimo (~0%)Bajo
Reducir JPEG quality a 85~10% menos tamañoPosible pérdida detalle
Reducir MAX_DIMENSION a 1536~20% menos tiempo APIPérdida de precisión

Media prioridad (requiere testing)

MejoraImpacto EsperadoRiesgo
Caché de análisis por hash de imagen100% en repetidosComplejidad
Modelo más rápido (gemini-2.0-flash)DesconocidoPérdida precisión
Prompt simplificado~10-20% menos tiempoMenos detalle en análisis

Alta prioridad (si se necesita <30s)

MejoraImpacto EsperadoRiesgo
Procesamiento en background (async)UX inmediataComplejidad UI
Pre-análisis con modelo ligeroFiltrar imágenes simplesDoble costo API

Logs de Referencia

[AutoPlan] Using Gemini 3 Flash Preview for blueprint analysis
[AutoPlan] Input file: /app/static/uploads/blueprints/mapa1_1769701085.PNG
[AutoPlan] Original image size: (2953, 2125), mode: RGBA
[AutoPlan] Resized image from (2953, 2125) to (2048, 1473)
[AutoPlan] Converted image from RGBA/P to RGB
[AutoPlan] Processed image: (2048, 1473), format=JPEG, size=368.2KB (prep: 0.48s)
[AutoPlan] Sending to Gemini (attempt 1/3)...
[AutoPlan] Config: temperature=0.1, max_tokens=16384
[AutoPlan] Gemini API completed in 67.31s (11739 chars)
[AutoPlan] Detection summary: 68 racks, 67 connections, 16 walls, 18 texts, 2 symbols

Variables de Entorno

# .env
GEMINI_API_KEY=tu_api_key_aqui

# compose.yml
- GEMINI_API_KEY=${GEMINI_API_KEY:-}

Comandos de Debug

# Ver logs de Auto-Plan en tiempo real
docker compose logs -f web | grep AutoPlan

# Ver últimos análisis
docker compose logs web --tail=100 | grep -E "AutoPlan|autoplan"

Última actualización: 29-01-2026 Autor: Claude Code Assistant

Véase también

Subir