Volver a la wiki

Agente · dev-map-editor

Agente · dev-map-editor

Propósito

Desarrollo y mantenimiento del Map Editor y el sistema Auto-Plan AI de CreaRack-Pro. Cubre la app blueprints/, los 8 módulos JS del editor de mapas y el pipeline de digitalización de planos.


Módulos JS (blueprints/)

static/js/blueprints/
├── map_editor.js          # Coordinador principal — punto de entrada
├── MapRender.js           # Rendering Konva.js de todos los elementos
├── MapInteraction.js      # Interacciones usuario + handler de import Auto-Plan
├── MapCables.js           # Dibujo de cables bezier entre racks
├── MapRacks.js            # Posicionamiento y gestión de racks en el mapa
├── MapHistoryAdapter.js   # Undo/Redo para el editor de mapas
├── pathfinder.js          # Cálculo de rutas para cables
└── AutoPlansAdapter.js    # Integración Auto-Plan AI → importación al canvas

App Django: blueprints/

blueprints/
├── api.py                 # Endpoints /api/blueprints/ y /autoplan/*
├── models.py              # Blueprint, BlueprintPlacement, MapAnnotation
└── services/
    ├── autoplan.py        # AutoPlanService — lógica principal IA
    └── blueprints.py      # BlueprintService

Modelos de datos clave

Blueprint

Plano de infraestructura. Contiene la imagen origen y los metadatos.

BlueprintPlacement

Posicionamiento de un rack dentro de un blueprint (relación Blueprint ↔ Rack).

MapAnnotation

Anotaciones sobre el mapa. Tipo JSONField para datos variables.

TipoUsoFormato data
rack_connectionCable entre racks{from: rack_id, to: rack_id}
drawing_lineLínea / pared{points: [x1,y1,x2,y2], stroke, strokeWidth}
drawing_textTexto libre{x, y, text, fill, fontSize}
symbolSímbolo de red{x, y, symbol_type, color}

⚠ Las conexiones entre racks usan MapAnnotation tipo rack_connection (muchos-a-muchos). NO usar el campo parent_rack (sistema antiguo v1.x, eliminado en v2.0).


Auto-Plan AI · Pipeline completo

Flujo

Imagen entrada (PNG/JPG)
    ↓
Preprocesamiento (Pillow)
  · MAX_DIMENSION: 3072px
  · Formato salida: PNG
  · Modo color: RGB
    ↓
POST /api/blueprints/autoplan/analyze
    ↓
AutoPlanService.analyze_blueprint_image()
  · Proveedor principal: Gemini Flash (gemini-3-flash-preview) — NO CAMBIAR
  · Fallback: DeepSeek V3 (API OpenAI-compatible)
  · Temperatura: 0.1 (resultados deterministas)
  · max_output_tokens: 16384
  · Reintentos: 3 (backoff incremental para 503/timeout)
    ↓
Prompt: prompts/blueprint_analyst.md
  · Sistema de coordenadas 0-1000 (origen top-left)
  · Respuesta JSON estructurada
    ↓
AutoPlanService.create_blueprint_entities()
  · Escala: img_width/1000 · img_height/1000
  · Crea: BlueprintPlacement (racks) + MapAnnotation (conexiones, paredes, textos)
    ↓
Frontend: AutoPlansAdapter.js → MapInteraction.js
  · Renderizado en canvas Konva.js

Entidades detectadas

EntidadSchemaDescripción
racks{label, type, zone, pos_x, pos_y}Tipo: RACK (verde/gris) o NODAL (naranja)
connections{from, to}Cables entre racks
walls{x1, y1, x2, y2, color, style}Líneas estructurales
texts{text, x, y, color}Etiquetas
symbols{type, x, y}Iconos de red

Sistema de coordenadas del prompt

Origen (0,0) ──────────────── X (1000)
      │
      │   TOP-LEFT  = (0, 0)
      │   TOP-RIGHT = (1000, 0)
      │
      ▼
    Y (1000)

Endpoints API

MétodoURLPropósito
POST/api/blueprints/autoplan/analyzeAnalizar imagen con IA
POST/api/blueprints/autoplan/importImportar datos al blueprint
GET/POST/PUT/DELETE/api/blueprints/CRUD blueprints (38 endpoints total)

Archivos del prompt

prompts/
└── blueprint_analyst.md    # Prompt principal para Gemini

Principios para modificar el prompt:


Patrones y convenciones


Logging y debug

# Ver logs Auto-Plan en tiempo real
docker compose logs -f web | Select-String "AutoPlan"

Ejemplo de salida correcta:

[INFO] [AutoPlan] Using Gemini 3 Flash Preview for blueprint analysis
[INFO] [AutoPlan] Detection summary: 68 racks, 67 connections, 12 walls, 45 texts
[INFO] [AutoPlan] Successfully created 67 cable connections.

Troubleshooting frecuente

ProblemaCausaSolución
Error 503 / Model OverloadedImagen grande o Gemini saturadoRetry automático (3 intentos) — esperar
Conexiones no se guardanUso del campo antiguo parent_rackUsar MapAnnotation tipo rack_connection
Baja precisión de detecciónImagen de baja calidadMínimo 1024px, buen contraste, poco ruido
Líneas mal orientadasCoordenadas incorrectas del modeloEl prompt v2.0 incluye sistema de coordenadas explícito

Restricciones críticas

Véase también

Subir