Volver a la wiki

Map Editor y Auto-Plan AI

Map Editor y Auto-Plan AI

Qué es

El Map Editor es el canvas interactivo donde los usuarios colocan racks sobre un plano, definen conexiones de cable y añaden anotaciones visuales (paredes, textos, símbolos). Cada plano es un Blueprint que contiene múltiples BlueprintPlacement (posición x/y, rotación, estilo) y MapAnnotation (líneas, textos, símbolos, conexiones de cable tipo grafo).

Auto-Plan AI es la función de digitalización automática: el usuario sube foto o imagen de un plano físico y un LLM multimodal extrae posición de racks, conexiones y elementos decorativos, generando atómicamente todos los objetos de BD sin intervención manual.

Por qué existe

Los data centers suelen documentarse en planos en papel o PDFs escaneados. Recrear ese mapa manualmente implica posicionar decenas de racks uno a uno. Auto-Plan elimina la fricción: en una llamada a la API se digitalizan racks, cables y zonas, reduciendo el tiempo de incorporación de horas a segundos.

Componentes

BlueprintService (blueprints/services/blueprints.py): servicio de dominio con CRUD sobre Blueprint y BlueprintPlacement. Métodos clave:

AutoPlanService (blueprints/services/autoplan.py, 606 LOC): servicio que orquesta digitalización IA. 3 proveedores via AUTOPLAN_PROVIDER:

ProviderSDK / ModeloNotas
google_genai (default)google-genai + gemma-4-26b-a4b-it (GEMMA4_GENAI_MODEL)Google AI Studio · modelo primario único (Regla 8) · retry 503/504
ollamaOpenAI client localOLLAMA_BASE_URL, timeout 5min, ctx 32768, modelos como gemma4 (solo desarrollo self-host)

(deepseek retirado el 16-05-2026, PR #36; gemini como primario sustituido por Gemma 4 en google_genai. Actualizado 10-09-2026 contra config/settings/base.py:305.)

Los 3 comparten preprocesado: resize a 2048px máx lado mayor, conversión RGB, compresión JPEG.

Constante GRID_SNAP = 15 (px) es el paso de cuadrícula. snap(val, step) redondea coordenadas al múltiplo más cercano para alineación IA ↔ canvas.

Flujos

Crear mapa manual:

  1. POST /api/blueprints/ → BlueprintService.create_blueprint.
  2. Usuario arrastra racks desde panel; frontend llama POST /{bp_id}/rack (rack + placement atómico).
  3. Movimientos → PUT /{bp_id}/placements/{rack_id} → update_placement.
  4. Múltiples elementos soltados → POST /{bp_id}/update_positions → bulk_update_placements.

Digitalizar con IA:

  1. POST /api/blueprints/autoplan/import recibe imagen + nombre.
  2. Endpoint guarda imagen en MEDIA_ROOT/uploads/blueprints/, calcula factores de escala (scale_x, scale_y) respecto a cuadrícula 1000×1000 lógica.
  3. Lee prompt desde prompts/blueprint_analyst.md y delega en AutoPlanService.analyze_blueprint_image con provider configurado.
  4. Con JSON IA, AutoPlanService.create_blueprint_entities ejecuta @transaction.atomic:
    • Crea Rack por cada elemento con coordenadas snap-grid.
    • Racks NODAL reciben style_props dinámicos (ancho proporcional a conectividad, color #ff9900).
    • Crea MapAnnotation de tipo rack_connection para cada cable, evitando duplicados A↔B con set ordenado.
    • Crea anotaciones drawing_line, drawing_text, symbol para paredes, textos, símbolos.
  5. Devuelve 201 con id del nuevo blueprint y nº de racks importados.

bulk_update_placements sincroniza parent_rack en Rack al dibujar/eliminar cables en el editor, manteniendo topología coherente.

Véase también

Subir