Spaces:
Runtime error
Runtime error
Commit History
-
feat(fase-11-12): explorador de datos y visor de telemetría en UI
Fase 11: Pestaña Explorador de Datos con GET /api/data/{table} y POST /api/data/query (solo SELECT, máx 1000 filas). Fase 12: Endpoint GET /api/events/all para eventos persistidos, modal de telemetría con fallback a buffer en memoria, y status dinámico (verde/ámbar/rojo) según credenciales disponibles vía /api/credentials/status.50b8a66 -
feat: add data explorer tab, enforce BYOK in production, detect env
df71cfc -
feat(telemetria): endpoint /api/events, ring buffer y tabla events (Fase 9)
cf2d03b -
feat(ui): click en parcela vuela a su polígono + dibuja parcelas en el mapa
- /api/fields incluye geojson (ST_AsGeoJSON) por parcela. - Mapa de Creación de Parcelas dibuja los polígonos guardados (capa verde) y hace fitBounds al cargar; click en un item de la lista -> flyToBounds del polígono. - Verificado con Playwright (click en 'Lote NDVI' vuela a su polígono; 0 errores).d17e4f4 -
fix(ui): sidebar responsive robusto + mapa (satélite/relieve) + parcela demo + botón .env
- Sidebar: estado por CSS propio (is-open móvil / is-collapsed desktop) porque Tailwind v4 usa la propiedad 'translate' y el transform inline no la cancelaba; plegar/reabrir en desktop, drawer + backdrop en móvil (backdrop md:hidden para no interceptar en desktop). - Mapa de parcelas: capas Satélite (Esri) / Normal (OSM) / Relieve (OpenTopoMap), centrado en Lomas de Lachay; botón 'Cargar parcela demo (Lomas de Lachay)'. - Credenciales: botón 'Revisar .env del servidor' + endpoint GET /api/credentials/status (solo presencia, sin valores) para usar las llaves del .env sin reescribirlas. - Verificado con Playwright (desktop plegado, móvil drawer, satélite, .env detectado).ef1afea
-
feat(ui): plataforma Shiny de 6 módulos + soporte backend para la UI (Fase 6)
- frontend/app.py: 6 nav_panel (Resumen, Creación de Parcelas con ipyleaflet+DrawControl, Teledetección con Plotly NDVI 5 años/clima + heatmap, Conteo EN DESARROLLO, Asistente RAG, Credenciales efímeras). Consume el gateway con cabeceras X-User-* efímeras. - backend: repositories.get_field(+centroide)/get_field_geojson; /api/fields devuelve lon/lat; /api/ndvi/raster acepta field_id. - Deps UI: shinywidgets, ipyleaflet, plotly. - Verificado: backend y UI levantan en local (HTTP 200); ruff limpio; suite sin regresión.820f460 -
feat(agent): asistente RAG con function calling + memoria (Fase 5)
- backend/services/tools.py: 3 herramientas tipadas (tendencia NDVI, contexto climático, densidad [en desarrollo]) + TOOLS_SCHEMA + dispatch. - backend/services/agent.py: orquestación Groq/Llama 3 (OpenAI-compatible vía httpx), bucle de tool-calling y memoria en chat_messages. - backend/api/chat.py: POST /api/chat (no-streaming; SSE diferido). - repositories.get_field_by_name (con centroide para el clima). - Tests: unit (schema, _describe_trend) + integración en vivo (Groq llama la herramienta NDVI end-to-end). 58 passed, ruff limpio.9837673 -
feat(api): gateway + parcelas + teledetección NDVI/clima (Fase 3)
- backend/api/deps.py: proxy efímero BYOK (X-User-* con fallback DEV_*) + get_db. - backend/services/remote_sensing.py: NDVI vía Sentinel Hub en CDSE (Statistical API serie mensual 5 años + Process API heatmap PNG); OAuth client_credentials. - backend/services/weather.py: Open-Meteo (sin llave) + agregación mensual. - backend/services/parcels.py: CRUD + backfill NDVI de 5 años en background. - backend/api/{fields,ndvi,weather}.py: /api/fields (CRUD), /api/ndvi (+/raster), /api/weather. - main.py monta los routers nuevos; repositories.delete_field por id. - Tests: unitarios (parse stats, agregación clima, deps) + integración en vivo (NDVI real + cadena parcela->NDVI->persistencia). 52 passed, ruff limpio. - Desviación: se usa Sentinel Hub (CDSE) en vez de pystac-client+rioxarray.c9bb7d3 -
feat: modo mock para validar el flujo de conteo sin modelo real
Añade MockInferenceAdapter y la fábrica create_adapter seleccionable con MODEL_BACKEND=mock|onnx. Con COUNTING_ENABLED=true y MODEL_BACKEND=mock, /api/count devuelve detecciones falsas plausibles (deterministas por imagen) para validar el flujo completo (carga → conteo → métricas → overlay → UI) sin el modelo real; la UI muestra el aviso '(datos de prueba / mock)'. Incluye pruebas unitarias e integración del modo mock y documenta MODEL_BACKEND en .env.example.c136a98 -
feat(backend): API FastAPI de conteo con modo standby
Implementa el backend del MVP: configuración por entorno, esquemas Pydantic, dominio de detección, métricas, adaptador de inferencia agnóstico (YOLO26/RF-DETR vía ONNX) y endpoints /api/status y /api/count. El conteo arranca en standby (COUNTING_ENABLED=false) y responde 503 hasta publicar el modelo.53371fd