You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(chat): vuelve a llama3.2:3b por defecto + prompt anti-alucinación
llama3.2:1b filtraba el schema del tool en el texto e inventaba datos
("Ruta 101: Centro-Playa" cuando no existían en la DB), en lugar de
invocar las herramientas. Inaceptable para un jurado: si pregunta por
la ruta inventada y descubre que no existe, hunde la nota.
Cambios:
1. docker-compose.yml: OLLAMA_MODEL pasa de llama3.2:1b a llama3.2:3b.
Sigue cabiendo en 2 GB de RAM, sigue siendo 100% local sin GPU,
pero invoca tool_calls como Ollama espera. El 1b queda descargado
por ollama-pull como alternativa rápida si alguien quiere
experimentar.
2. system-prompt.ts: bloque "PROHIBIDO INVENTAR DATOS" que prohíbe
fabricar pedidos/rutas/conductores y obliga a llamar a la
herramienta correspondiente; si está vacío, decir que está vacío
en lugar de inventar.
3. README.md: badge, tablas, tiempos esperados (15-30s/iter) y guía
de modelos actualizadas al default 3b. Aviso de "para acelerar"
ya no apunta al 1b (que sabemos que falla) sino al 8b para quien
tenga GPU.
Co-authored-by: Samuel Parra <parrasamuel453@gmail.com>
Co-authored-by: Giulian Peterlecean <giulian.peterlecean@gmail.com>
@@ -27,7 +27,7 @@ OpenRoute presenta un **único producto al usuario**: el frontend conversacional
27
27
|**Frontend conversacional (`web/`)**| Next.js 14 + chatbot Ollama + mapa Leaflet + Prisma/SQLite. UI única que ven los usuarios. |`cd web && npm run dev` (puerto 3000) | Siempre. Es la cara del producto. |
28
28
|**Microservicio FastAPI (`app/`)**| Wrapper HTTP sobre el motor VRP de Python (`src/`). Expone `/optimize`, `/baseline`, `/compare`. |`uvicorn app.main:app --port 8000`| Cuando el chatbot llama al tool `optimize_with_ortools`. |
29
29
|**Motor Python (`src/`)**| Solver VRP dual: heurística propia (K-Means + VMC) + Google OR-Tools (CVRPTW). Procesador de datos, simulador baseline manual y asistente IA con Ollama. | Llamado por el FastAPI internamente | Cuando se pide optimización industrial con time windows y capacidades. |
30
-
|**Ollama local**| LLM `llama3.2:1b` con tool calling (configurable vía `OLLAMA_MODEL`). Mismo modelo para el chatbot del frontend y para los informes explicativos del motor Python. |`ollama serve` (puerto 11434) | Continuamente mientras el chatbot está en uso. |
30
+
|**Ollama local**| LLM `llama3.2:3b` con tool calling (configurable vía `OLLAMA_MODEL`). Mismo modelo para el chatbot del frontend y para los informes explicativos del motor Python. |`ollama serve` (puerto 11434) | Continuamente mientras el chatbot está en uso. |
31
31
32
32
**Flujo típico:**
33
33
@@ -62,7 +62,7 @@ Ver [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) para el detalle técnico.
62
62
*[Prisma](https://www.prisma.io/) + SQLite (cambio a Postgres con una variable de entorno).
63
63
*[Leaflet](https://leafletjs.com/) + [OpenStreetMap](https://www.openstreetmap.org/) + [OSRM](https://project-osrm.org/) público para mapa y TSP rápido.
64
64
*[Nominatim](https://nominatim.openstreetmap.org/) de OSM para geocoding con caché persistente.
65
-
*[Ollama](https://ollama.com/) con `llama3.2:1b` por defecto (configurable, soporta `llama3.2:3b` y`llama3.1:8b` para entornos con más recursos). Tool calling nativo.
65
+
*[Ollama](https://ollama.com/) con `llama3.2:3b` por defecto (configurable vía `OLLAMA_MODEL`, soporta`llama3.1:8b` para entornos con GPU o más CPU). Tool calling nativo y fiable. El 3b llama a las herramientas correctamente sin alucinar datos como hacen modelos más pequeños.
66
66
* JWT en cookie `httpOnly` para auth.
67
67
68
68
### Backend de optimización (`app/` + `src/`)
@@ -102,7 +102,7 @@ docker compose up --build
102
102
**El primer arranque tarda 10-20 minutos**:
103
103
1. Pull de imágenes base (`python:3.12-slim`, `node:20-alpine`, `ollama/ollama`): ~3 min.
104
104
2. Build de las imágenes del motor y el frontend: ~4 min (el seed de la DB ocurre durante el build).
105
-
3. El servicio `ollama-pull` descarga `llama3.2:1b` (~1.3 GB) y `llama3.2:3b` (~2 GB) como reserva: ~5-10 min según la red.
105
+
3. El servicio `ollama-pull` descarga `llama3.2:3b` (~2 GB, modelo activo por defecto) y `llama3.2:1b` (~1.3 GB) como alternativa rápida: ~5-10 min según la red.
106
106
107
107
Mientras se descarga el modelo el frontend está accesible, pero el chat dará error hasta que termine.
108
108
@@ -116,15 +116,15 @@ Cuando aparezca `[ollama-pull] Modelos listos. Saliendo.`, ya está. Verifica co
116
116
117
117
```bash
118
118
docker compose ps # los 3 servicios en (healthy)
119
-
docker exec openroute-ollama ollama list # debe listar llama3.2:1b
> **Sobre el chatbot**: corre 100% local sin GPU. La primera respuesta tarda 10-30 s (carga del modelo en RAM); las siguientes son de 5-15 s. Es deliberado — todo el procesamiento de los datos del cliente ocurre dentro de tu máquina, no se envía nada a la nube. Si quieres velocidad de pruebas, cambia `OLLAMA_MODEL` a `llama3.2:3b` en [`docker-compose.yml`](docker-compose.yml) (más capaz, también más lento).
127
+
> **Sobre el chatbot**: corre 100% local sin GPU. La primera respuesta tras inactividad larga tarda 30-60 s (carga del modelo de 2 GB en RAM); las siguientes son de 15-30 s por iteración. **Es deliberado**: todo el procesamiento de los datos del cliente ocurre dentro de tu máquina, no se envía nada a la nube. Eso es lo que defendemos como IA responsable. Si dispones de GPU o más CPU, cambia `OLLAMA_MODEL` a `llama3.1:8b` en [`docker-compose.yml`](docker-compose.yml) (más capaz, también más lento sin acelerador).
128
128
129
129
Comandos útiles:
130
130
@@ -148,8 +148,8 @@ cd OpenRoute
148
148
### 2A. Ollama (LLM local) — Terminal 1
149
149
150
150
```bash
151
-
# Descargar el modelo (una sola vez, ~1.3 GB)
152
-
ollama pull llama3.2:1b
151
+
# Descargar el modelo (una sola vez, ~2 GB)
152
+
ollama pull llama3.2:3b
153
153
154
154
# En Windows ya arranca como servicio. En macOS/Linux:
Requisitos: **Node.js 20+**, **[Ollama](https://ollama.com/download)** ya arrancado en el paso 2A (con `llama3.2:1b` descargado), conexión a internet (para OSRM y Nominatim públicos).
196
+
Requisitos: **Node.js 20+**, **[Ollama](https://ollama.com/download)** ya arrancado en el paso 2A (con `llama3.2:3b` descargado), conexión a internet (para OSRM y Nominatim públicos).
197
197
198
198
```bash
199
199
# Configurar la app (no hace falta volver a `ollama pull`, ya lo hiciste en 2A)
Copy file name to clipboardExpand all lines: web/src/lib/chat/system-prompt.ts
+5Lines changed: 5 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -25,6 +25,11 @@ INVOCACIÓN DE HERRAMIENTAS (CRÍTICO):
25
25
- NUNCA respondas al usuario con un JSON como {"function": "report_incident", ...}. Eso significa que has fallado en usar la herramienta correctamente — vuelve a intentar usando tool_calls.
26
26
- Tras ejecutar la herramienta y recibir su resultado, redacta la respuesta al usuario en LENGUAJE NATURAL en español, resumiendo lo que ha pasado. Nunca repitas el JSON crudo.
27
27
28
+
PROHIBIDO INVENTAR DATOS (CRÍTICO PARA IA RESPONSABLE):
29
+
- NO inventes pedidos, rutas, conductores ni furgonetas. Si necesitas datos, LLAMA A LA HERRAMIENTA correspondiente (list_orders, list_routes, list_drivers, list_vehicles, suggest_routes).
30
+
- Si el usuario pide "rutas para hoy" o similar y la herramienta devuelve lista vacía, di literalmente que no hay rutas — NO inventes nombres como "Ruta 101: Centro-Playa".
31
+
- Si no estás seguro de un valor, pregunta al usuario en lugar de fabricarlo. Inventar datos rompe la confianza del operador y es contrario a los principios de IA responsable del proyecto.
32
+
28
33
CONTEXTO:
29
34
- El depósito está en Alicante centro (Avenida Aguilera, 38.346, -0.4907).
0 commit comments