Spaces:
Sleeping
Sleeping
File size: 5,119 Bytes
45b7009 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | # Despliegue en HuggingFace Spaces (Demo / MVP)
Despliegue gratuito para la demo del proyecto de grado, ejecutando el modelo
`pysentimiento/robertuito-sentiment-analysis` directamente en el contenedor.
## Requisitos previos
- Cuenta en [huggingface.co](https://huggingface.co)
- Git instalado localmente
- Repo `sentiment-analysis-service` en local
## Por qué Spaces y no Render
| Recurso | Render free | HF Spaces free |
|---|---|---|
| RAM | 512 MB | **16 GB** |
| Disco | ~512 MB | 50 GB (no persistente) |
| Sleep | 15 min sin tráfico | 48 h sin tráfico |
| Modelo local con `transformers` | No entra (OOM) | Entra cómodo |
El modelo RoBERTuito ocupa ~440 MB en disco y ~1.5–2 GB de RAM una vez cargado.
En Render free no entra; en Spaces free sobra.
---
## Paso 1 — Crear el Space
1. Entrar a [huggingface.co/new-space](https://huggingface.co/new-space)
2. Configurar:
- **Space name**: `sentiment-analysis-service` (o el que prefieras)
- **License**: la que aplique (MIT recomendado para proyectos de grado)
- **Select the Space SDK**: **Docker** → **Blank**
- **Space hardware**: **CPU basic — Free**
- **Visibility**: **Public**
3. Clic en **Create Space**
Esto crea un repo git en `https://huggingface.co/spaces/<tu-usuario>/sentiment-analysis-service`.
---
## Paso 2 — Obtener token de write para empujar al Space
1. En HuggingFace: **Settings → Access Tokens → New token**
2. Nombre: `spaces-deploy`, Role: **Write**
3. Copiar el token (empieza con `hf_...`)
---
## Paso 3 — Empujar el código al Space
Desde la raíz del proyecto (`sentiment-analysis-service`):
```bash
# 1. Agregar el remoto del Space
git remote add space https://<tu-usuario>:<hf_token>@huggingface.co/spaces/<tu-usuario>/sentiment-analysis-service
# 2. Empujar la rama main
git push space main
```
> Si tu rama local se llama distinto, ajusta: `git push space tu-rama:main`.
> Alternativa sin meter el token en la URL: clonar el repo del Space en otra carpeta,
> copiar los archivos y hacer commit+push usando las credenciales de git.
---
## Paso 4 — Esperar el build
1. Abrir `https://huggingface.co/spaces/<tu-usuario>/sentiment-analysis-service`
2. Pestaña **Logs → Build**: ver el `pip install` (5–10 min la primera vez por torch)
3. Pestaña **Logs → Container**: cuando aparezca `Uvicorn running on http://0.0.0.0:8000` está listo
4. La primera petición descarga el modelo del Hub (~30 s adicionales)
---
## Paso 5 — Probar
URL pública: `https://<tu-usuario>-sentiment-analysis-service.hf.space`
```bash
# Health check
curl https://<tu-usuario>-sentiment-analysis-service.hf.space/health
# Análisis básico
curl -X POST https://<tu-usuario>-sentiment-analysis-service.hf.space/analyze \
-H "Content-Type: application/json" \
-d '{"text": "Me siento muy bien hoy"}'
# Análisis enriquecido
curl -X POST https://<tu-usuario>-sentiment-analysis-service.hf.space/analyze/enhanced \
-H "Content-Type: application/json" \
-d '{"text": "Me siento muy bien hoy"}'
```
Respuesta esperada del `/health`:
```json
{
"status": "healthy",
"model_loaded": true,
"model_name": "pysentimiento/robertuito-sentiment-analysis"
}
```
---
## Paso 6 — Conectar con el backend
En las variables de entorno del backend:
```
SENTIMENT_SERVICE_URL=https://<tu-usuario>-sentiment-analysis-service.hf.space
```
Si el frontend hace llamadas directas, agregar la URL del frontend a `CORS_ORIGINS`
en los **Settings → Variables and secrets** del Space.
---
## Variables de entorno opcionales en el Space
Configurar en **Settings → Variables and secrets**:
| Key | Valor sugerido | Notas |
|---|---|---|
| `MODEL_NAME` | `pysentimiento/robertuito-sentiment-analysis` | Default en `config.py` |
| `CORS_ORIGINS` | `https://tu-frontend.com` | Coma-separado si hay varios |
| `HF_API_TOKEN` | _no setear_ | Si se setea, intenta usar el router de HF; el modelo de la tesis no está soportado, así que **dejar vacío** |
---
## Notas sobre el free tier
- **Sleep**: 48 h sin tráfico → próxima petición tarda ~30–60 s en despertar (rebuild + carga de modelo).
- **Para la defensa de tesis**: hacer un curl al `/health` 1–2 minutos antes de la demo para tener el Space "warm".
- **Mantenerlo activo entre clases/iteraciones**: configurar [cron-job.org](https://cron-job.org) (gratis) con un GET a `/health` cada 6 h.
- **Disco no persistente**: si el contenedor se reinicia, vuelve a descargar el modelo del Hub (rápido, mismo datacenter).
---
## Tabla de funcionamiento por entorno
| Entorno | Modo | Cómo |
|---|---|---|
| Local (desarrollo) | Modelo local con `transformers` | `pip install -r requirements-local.txt` |
| Spaces (demo / MVP) | Modelo local dentro del contenedor | Push a Space; sin `HF_API_TOKEN` |
| Producción (AWS) | Modelo local dentro del servidor | Imagen Docker en ECS/EKS |
El `analyzer.py` selecciona el modo automáticamente:
- Sin `HF_API_TOKEN` → carga local con `transformers` (camino usado en Spaces).
- Con `HF_API_TOKEN` → usa el router `router.huggingface.co/hf-inference` (requiere modelo soportado).
|