Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Athena — Local AI Ticket Classifier

Python Django React Vite Local AI

Clasificá tickets de soporte en tu máquina.
Sin nube. Sin API keys. Sin GPU.

Quick start · Cómo clasifica · API


Interfaz de Athena con bandeja, composer y detalle del ticket

Pegá un título y una descripción: Athena etiqueta categoría, prioridad, tags y confianza. Si se equivoca, lo corregís a mano.

Arquitectura

React habla con Django por /api; Django clasifica con TF-IDF local u Ollama

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
Loading

Cómo clasifica

Pipeline: texto, TF-IDF, similitud, prioridad, ticket

  1. El título se cuenta dos veces junto al cuerpo, para que el asunto pese más.
  2. TF-IDF (n-gramas 1–2) mide similitud coseno contra prototipos en español e inglés.
  3. Los keywords de cada categoría suman un boost y se convierten en tags.
  4. La prioridad sale del lenguaje de urgencia (outage, caído, breach, 2FA…).
  5. 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.

Puntajes de un ticket real

“Nos cobraron dos veces el plan” → Facturación · 97%

Barras de puntaje: Facturación 0.664, el resto por debajo de 0.07

Categorías

Seis categorías: Facturación, Incidente técnico, Solicitud de función, Acceso a cuenta, Seguridad, Consulta general

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”

Quick start

make install
make migrate
make seed

Dos procesos:

make backend    # http://127.0.0.1:8000
make frontend   # http://127.0.0.1:5173

Abrí 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
Loading

API

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

Releases

Packages

Contributors

Languages