cmeneses99 Claude Sonnet 4.6 commited on
Commit
2a5dd49
·
1 Parent(s): 34511c9

Rewrite docs in Colombian Spanish

Browse files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Files changed (3) hide show
  1. ARCHITECTURE.md +35 -35
  2. README.md +6 -6
  3. USAGE.md +13 -13
ARCHITECTURE.md CHANGED
@@ -1,77 +1,77 @@
1
- # Architecture
2
 
3
- ## Deployment Overview
4
 
5
  ```
6
- GitHub (source code)
7
 
8
- └─► Hugging Face Spaces (Docker runtime)
9
- builds & runs the FastAPI container
10
 
11
- ├─► on startup: pulls model from HF Hub
12
  │ huggingface.co/cmeneses99/sms-classifier
13
  │ (model.safetensors, tokenizer, config — ~520MB)
14
 
15
- └─► serves API on port 7860
16
  https://cmeneses99-sms-classifier-api.hf.space
17
 
18
- cron-job.org ──GET /health every 10min──► HF Spaces (keep-alive)
19
  ```
20
 
21
- ## Request Flow
22
 
23
  ```
24
- Client
25
 
26
 
27
  FastAPI (routers/)
28
 
29
- ├── pages.py → HTML responses (/, /classify, /classify/batch, /categories)
30
  ├── inference.py → POST /classify, POST /classify/batch
31
  └── meta.py → GET /health, GET /api/categories
32
 
33
 
34
  services/classifier.py
35
 
36
- ├── LRU Cache (cache.py) ──hit──► return cached response
37
 
38
- └── miss ──► model_loader.py (HuggingFace pipeline)
39
  └── distilbert-base-multilingual-cased (fine-tuned)
40
- └── top_k=3 predictions → PredictResponse
41
  ```
42
 
43
- ## Model
44
 
45
- | Detail | Value |
46
  |---|---|
47
- | Base model | `distilbert-base-multilingual-cased` |
48
- | Task | Sequence classification |
49
- | Categories | 9 |
50
- | Training data | 3,150 synthetic examples (350/category, ES + EN) |
51
- | Training | 5 epochs, fine-tuned with HuggingFace Trainer API |
52
- | Runtime | CPU-only (PyTorch CPU build) |
53
- | Cache | LRU, max 512 entries, thread-safe |
54
 
55
- ## Project Structure
56
 
57
  ```
58
  app/
59
- ├── main.py # Lifespan + router registration
60
- ├── model_loader.py # Downloads model from HF Hub on startup
61
- ├── schemas.py # Pydantic v2 request/response models
62
- ├── category_meta.py # Labels, colors, examples per category
63
- ├── cache.py # Thread-safe LRU cache
64
  ├── utils.py # normalize(), read_static()
65
  ├── routers/
66
- │ ├── pages.py # HTML routes
67
- │ ├── inference.py # Classification endpoints
68
- │ └── meta.py # Health + categories endpoints
69
  ├── services/
70
- │ └── classifier.py # Inference logic with cache integration
71
  └── static/
72
  ├── home.html
73
- ├── index.html # Single classifier UI
74
- ├── batch.html # Batch classifier UI
75
  └── categories.html
76
  training/
77
  ├── config.py
 
1
+ # Arquitectura
2
 
3
+ ## Despliegue
4
 
5
  ```
6
+ GitHub (código fuente)
7
 
8
+ └─► Hugging Face Spaces (runtime Docker)
9
+ construye y ejecuta el contenedor FastAPI
10
 
11
+ ├─► al iniciar: descarga el modelo desde HF Hub
12
  │ huggingface.co/cmeneses99/sms-classifier
13
  │ (model.safetensors, tokenizer, config — ~520MB)
14
 
15
+ └─► expone la API en el puerto 7860
16
  https://cmeneses99-sms-classifier-api.hf.space
17
 
18
+ cron-job.org ──GET /health cada 10min──► HF Spaces (keep-alive)
19
  ```
20
 
21
+ ## Flujo de una solicitud
22
 
23
  ```
24
+ Cliente
25
 
26
 
27
  FastAPI (routers/)
28
 
29
+ ├── pages.py → respuestas HTML (/, /classify, /classify/batch, /categories)
30
  ├── inference.py → POST /classify, POST /classify/batch
31
  └── meta.py → GET /health, GET /api/categories
32
 
33
 
34
  services/classifier.py
35
 
36
+ ├── Cache LRU (cache.py) ──hit──► retorna respuesta en caché
37
 
38
+ └── miss ──► model_loader.py (pipeline de HuggingFace)
39
  └── distilbert-base-multilingual-cased (fine-tuned)
40
+ └── top_k=3 predicciones → PredictResponse
41
  ```
42
 
43
+ ## Modelo
44
 
45
+ | Detalle | Valor |
46
  |---|---|
47
+ | Modelo base | `distilbert-base-multilingual-cased` |
48
+ | Tarea | Clasificación de secuencias |
49
+ | Categorías | 9 |
50
+ | Datos de entrenamiento | 3.150 ejemplos sintéticos (350/categoría, ES + EN) |
51
+ | Entrenamiento | 5 épocas, fine-tuning con HuggingFace Trainer API |
52
+ | Runtime | Solo CPU (build CPU de PyTorch) |
53
+ | Cache | LRU, máx. 512 entradas, thread-safe |
54
 
55
+ ## Estructura del proyecto
56
 
57
  ```
58
  app/
59
+ ├── main.py # Lifespan + registro de routers
60
+ ├── model_loader.py # Descarga el modelo desde HF Hub al iniciar
61
+ ├── schemas.py # Modelos Pydantic v2 para request/response
62
+ ├── category_meta.py # Labels, colores y ejemplos por categoría
63
+ ├── cache.py # Cache LRU thread-safe
64
  ├── utils.py # normalize(), read_static()
65
  ├── routers/
66
+ │ ├── pages.py # Rutas HTML
67
+ │ ├── inference.py # Endpoints de clasificación
68
+ │ └── meta.py # Endpoints de health y categorías
69
  ├── services/
70
+ │ └── classifier.py # Lógica de inferencia con integración de caché
71
  └── static/
72
  ├── home.html
73
+ ├── index.html # UI clasificador simple
74
+ ├── batch.html # UI clasificador por lotes
75
  └── categories.html
76
  training/
77
  ├── config.py
README.md CHANGED
@@ -66,7 +66,7 @@ training/
66
  ### Requisitos
67
 
68
  - Python 3.11+
69
- - Modelo entrenado en `./model/` (ver sección de training)
70
 
71
  ```bash
72
  # Crear entorno virtual
@@ -154,15 +154,15 @@ curl -X POST http://localhost:8000/classify/batch \
154
  }
155
  ```
156
 
157
- ## Deploy en Hugging Face Spaces
158
 
159
- 1. Crear un Space en [huggingface.co/new-space](https://huggingface.co/new-space) con SDK: **Docker**
160
- 2. Pushear el código al repo del Space:
161
  ```bash
162
  git remote add hfspace https://USER:TOKEN@huggingface.co/spaces/USER/SPACE-NAME
163
  git push hfspace main
164
  ```
165
  3. HF Spaces detecta el `Dockerfile` automáticamente y hace el build
166
- 4. Al arrancar, el modelo se descarga desde HF Hub (~520MB, solo la primera vez)
167
 
168
- El modelo está hosteado en [huggingface.co/cmeneses99/sms-classifier](https://huggingface.co/cmeneses99/sms-classifier).
 
66
  ### Requisitos
67
 
68
  - Python 3.11+
69
+ - Modelo entrenado en `./model/` (ver sección de entrenamiento)
70
 
71
  ```bash
72
  # Crear entorno virtual
 
154
  }
155
  ```
156
 
157
+ ## Despliegue en Hugging Face Spaces
158
 
159
+ 1. Crea un Space en [huggingface.co/new-space](https://huggingface.co/new-space) con SDK: **Docker**
160
+ 2. Sube el código al repo del Space:
161
  ```bash
162
  git remote add hfspace https://USER:TOKEN@huggingface.co/spaces/USER/SPACE-NAME
163
  git push hfspace main
164
  ```
165
  3. HF Spaces detecta el `Dockerfile` automáticamente y hace el build
166
+ 4. Al iniciar, el modelo se descarga desde HF Hub (~520MB, solo la primera vez)
167
 
168
+ El modelo está en [huggingface.co/cmeneses99/sms-classifier](https://huggingface.co/cmeneses99/sms-classifier).
USAGE.md CHANGED
@@ -1,42 +1,42 @@
1
- # Usage Guide
2
 
3
- Base URL: `https://cmeneses99-sms-classifier-api.hf.space`
4
 
5
  ---
6
 
7
- ## Via Browser (UI)
8
 
9
  ### Home
10
- Abrí `https://cmeneses99-sms-classifier-api.hf.space` — vas a ver una descripción de la API con todos los endpoints disponibles y ejemplos de respuesta. Desde ahí podés navegar al resto de las vistas con los botones.
11
 
12
  ---
13
 
14
  ### Clasificar un mensaje
15
- 1. Click en **"Clasificador Simple"** desde el home (o navegá directo a `/classify`)
16
- 2. Escribí el mensaje en el campo de texto
17
- 3. Click en **"Clasificar"** o presioná **Enter**
18
  4. El resultado muestra la categoría detectada, el nivel de confianza y el top 3 de categorías más probables
19
  5. Si el mismo texto ya fue consultado antes, aparece el badge **"caché activo"**
20
 
21
  ---
22
 
23
  ### Clasificar múltiples mensajes
24
- 1. Click en **"Clasificador por Lotes"** desde el home (o navegá directo a `/classify/batch`)
25
- 2. Escribí un mensaje por línea en el área de texto
26
  3. El contador en tiempo real te muestra cuántos mensajes cargaste (máx. 50)
27
- 4. Click en **"Clasificar todo"**
28
  5. Los resultados aparecen uno por uno con su categoría y confianza
29
- 6. En la barra de resumen inferior podés ver cuántos vinieron desde caché
30
 
31
  ---
32
 
33
  ### Ver categorías disponibles
34
- 1. Click en **"Categorías"** desde el home (o navegá directo a `/categories`)
35
  2. Cada categoría muestra su descripción y un ejemplo en español e inglés
36
 
37
  ---
38
 
39
- ## Via API (curl)
40
 
41
  ### Clasificar un mensaje
42
 
 
1
+ # Guía de uso
2
 
3
+ URL base: `https://cmeneses99-sms-classifier-api.hf.space`
4
 
5
  ---
6
 
7
+ ## Desde el navegador (UI)
8
 
9
  ### Home
10
+ Abre `https://cmeneses99-sms-classifier-api.hf.space` — vas a ver una descripción de la API con todos los endpoints disponibles y ejemplos de respuesta. Desde ahí puedes navegar al resto de las vistas con los botones.
11
 
12
  ---
13
 
14
  ### Clasificar un mensaje
15
+ 1. Haz click en **"Clasificador Simple"** desde el home (o navega directo a `/classify`)
16
+ 2. Escribe el mensaje en el campo de texto
17
+ 3. Haz click en **"Clasificar"** o presiona **Enter**
18
  4. El resultado muestra la categoría detectada, el nivel de confianza y el top 3 de categorías más probables
19
  5. Si el mismo texto ya fue consultado antes, aparece el badge **"caché activo"**
20
 
21
  ---
22
 
23
  ### Clasificar múltiples mensajes
24
+ 1. Haz click en **"Clasificador por Lotes"** desde el home (o navega directo a `/classify/batch`)
25
+ 2. Escribe un mensaje por línea en el área de texto
26
  3. El contador en tiempo real te muestra cuántos mensajes cargaste (máx. 50)
27
+ 4. Haz click en **"Clasificar todo"**
28
  5. Los resultados aparecen uno por uno con su categoría y confianza
29
+ 6. En la barra de resumen inferior puedes ver cuántos vinieron desde caché
30
 
31
  ---
32
 
33
  ### Ver categorías disponibles
34
+ 1. Haz click en **"Categorías"** desde el home (o navega directo a `/categories`)
35
  2. Cada categoría muestra su descripción y un ejemplo en español e inglés
36
 
37
  ---
38
 
39
+ ## Desde la API (curl)
40
 
41
  ### Clasificar un mensaje
42