Clasificá tickets de soporte en tu máquina.
Sin nube. Sin API keys. Sin GPU.
Quick start · Cómo clasifica · API
Pegá un título y una descripción: Athena etiqueta categoría, prioridad, tags y confianza. Si se equivoca, lo corregís a mano.
flowchart LR
U[Operador] --> UI[React + Vite]
UI -->|POST /api/tickets/| API[Django REST]
API --> C{Ollama en :11434?}
C -->|sí| LLM[LLM local]
C -->|no / error| TF[TF-IDF + keywords]
LLM --> T[(SQLite)]
TF --> T
T --> UI
- El título se cuenta dos veces junto al cuerpo, para que el asunto pese más.
- TF-IDF (n-gramas 1–2) mide similitud coseno contra prototipos en español e inglés.
- Los keywords de cada categoría suman un boost y se convierten en tags.
- La prioridad sale del lenguaje de urgencia (
outage,caído,breach,2FA…). - La confianza es el margen entre el 1.º y el 2.º puesto.
Si Ollama está en localhost:11434, Athena lo intenta primero y cae al modelo local ante cualquier fallo.
“Nos cobraron dos veces el plan” → Facturación · 97%
| Categoría | Qué entra |
|---|---|
| Facturación | cobros, facturas, reembolsos, planes |
| Incidente técnico | errores, caídas, bugs, timeouts |
| Solicitud de función | mejoras, roadmap, “sería útil” |
| Acceso a cuenta | login, 2FA, permisos, reset |
| Seguridad | accesos no autorizados, fugas, phishing |
| Consulta general | docs, onboarding, “cómo hago” |
make install
make migrate
make seedDos procesos:
make backend # http://127.0.0.1:8000
make frontend # http://127.0.0.1:5173Abrí http://127.0.0.1:5173. Vite proxea /api a Django.
sequenceDiagram
participant UI as React
participant API as Django
participant ML as Classifier
UI->>API: POST /api/classify/
API->>ML: title + body
ML-->>API: category, priority, confidence
API-->>UI: preview en vivo
UI->>API: POST /api/tickets/
API-->>UI: ticket persistido
| Método | Path | Para qué |
|---|---|---|
GET |
/api/categories/ |
catálogo |
GET |
/api/tickets/ |
bandeja |
POST |
/api/tickets/ |
crear + clasificar |
POST |
/api/classify/ |
preview sin guardar |
POST |
/api/tickets/:id/correct/ |
override humano |
GET |
/api/stats/ |
totales de la bandeja |
Hecho para correr 100% local · Django + Poetry · React + pnpm Vite

