msl-internal-api / README.md
JoseMSL's picture
Upload README.md
fa8e7c4 verified
|
Raw
History Blame Contribute Delete
4.39 kB
metadata
title: MSL Internal API
emoji: 🤖
colorFrom: blue
colorTo: indigo
sdk: docker
app_port: 7860
pinned: false
license: other

bert-api/

Backend Python Flask que sirve el clasificador BERT propio de MuseSceneLab para los comandos NLP de MEHEARSAL.

Origen: copiado de D:\XDev.Projects\MEHEARSAL-NLP-CONTROLLER-RMIT\mehearsal_v5_and_v6\bert-api\ con 3 modificaciones mínimas para HF Spaces Docker (ver §"Adaptaciones" más abajo).

Despliegue actual: HuggingFace Space MuseSceneLab/msl-internal-api (Docker SDK). Ver doc 33 §8 Fase R4-R7.

Nota sobre el frontmatter YAML del principio: lo leen los Spaces de HuggingFace para configurar el deploy (título, SDK, puerto). app_port: 7860 es crítico — sin él HF no sabe qué puerto exponer y el Space queda en "config error". En cualquier otro contexto (lectura local, repo de GitHub) el frontmatter se ignora o se renderiza como bloque inicial.

Despliegue futuro: AWS App Runner cuando se cumplan los disparadores de doc 33 §13.4.


Estructura

bert-api/
├── bert_api.py           Flask app. Carga modelo en arranque, expone /classify y /health
├── requirements.txt      flask, flask-cors, transformers, torch, huggingface_hub, python-dotenv
├── Dockerfile            Imagen para HF Spaces. Python 3.11-slim, expone 7860
├── .dockerignore         Excluye venv, __pycache__, README, etc. de la imagen
└── README.md             Este archivo

Endpoints

Método Path Body Devuelve
POST /classify { "utterance": "mute the guitar" } { intent_label, locale, target, params_json, confidence, model }
GET /health { status, model }

Variables de entorno

Var Default Para qué
HF_TOKEN (obligatorio) Auth para descargar el modelo privado de HF. En HF Spaces se configura como Secret del Space
BERT_MODEL_NAME MuseSceneLab/mehearsal-nlp-v6 Cambiar para usar v5 u otro modelo
PORT 7860 Puerto del servidor Flask. HF Spaces inyecta 7860 automáticamente

Desarrollo local

cd bert-api
python -m venv venv
.\venv\Scripts\activate            # Windows PowerShell: .\venv\Scripts\Activate.ps1
pip install -r requirements.txt
$env:HF_TOKEN = "hf_..."           # tu token con permiso de lectura sobre el modelo
python bert_api.py

Levanta en http://localhost:7860. Probar con:

curl -X POST http://localhost:7860/classify -H "Content-Type: application/json" -d '{"utterance":"mute the guitar"}'

Nota: la primera ejecución descarga el modelo (500 MB) desde HF a la caché local (`/.cache/huggingface/`). Ejecuciones posteriores son instantáneas.


Despliegue como Space (proceso R4-R7 de doc 33)

  1. Crear Space en huggingface.co/new-space:

    • Owner: MuseSceneLab
    • Name: mehearsal-bert-api
    • SDK: Docker
    • Hardware: CPU Basic (free)
    • Visibility: Public (el contenedor; los pesos del modelo siguen privados)
  2. En el Space, ir a Settings → Repository secrets → añadir HF_TOKEN.

  3. Clonar el repo del Space y empujar el contenido de esta carpeta:

    git clone https://huggingface.co/spaces/MuseSceneLab/mehearsal-bert-api
    cd mehearsal-bert-api
    cp -r ../MEHEARSAL2025/bert-api/* .
    git add .
    git commit -m "Initial BERT API for MEHEARSAL"
    git push
    
  4. HF construye la imagen (~3-5 min). Verificar logs en la UI del Space.

  5. URL pública: https://musescenelab-mehearsal-bert-api.hf.space/classify.


Adaptaciones respecto al código fuente

Tres diffs vs mehearsal_v5_and_v6/bert-api/bert_api.py:

  1. Import os al principio del archivo.
  2. MODEL_NAME configurable vía env var (default v6). El fuente lo tenía hardcoded a v5.
  3. Puerto y debug en app.run(): puerto leído de env var PORT (default 7860, requisito de Spaces), debug=False para producción.

La lógica de extract_entities(), INTENT_METADATA y el upgrade de intents en /classify está intacta. Esto evita cualquier divergencia funcional respecto al desarrollo original.


Roadmap

  • Ahora: HF Spaces Docker (este folder = código fuente, sin cambios entre dev local y prod Space)
  • Futuro: migración a AWS App Runner. Ver doc 33 §13. El Dockerfile actual sirve igual sin cambios.