Spaces:
Sleeping
Sleeping
github-actions[bot]
Deploy from Achraf-cyber/hackton-locallang@63ac66db05e9528cba107570a28176458093e313
129b391 | title: model-service | |
| emoji: π£οΈ | |
| colorFrom: blue | |
| colorTo: green | |
| sdk: docker | |
| app_port: 7860 | |
| # model-service | |
| Service Python FastAPI dont le seul role est d'exposer l'acces aux langues | |
| Dioula et Moore : reconnaissance vocale (ASR), traduction et synthese vocale | |
| (TTS). Aucune logique de LLM, de base de donnees ou de simplification n'est | |
| geree ici. | |
| ## Structure | |
| ``` | |
| model-service/ | |
| βββ app/ | |
| β βββ main.py # point d'entree FastAPI | |
| β βββ deps.py # configuration (Settings) | |
| β βββ services/ | |
| β βββ asr.py # reconnaissance vocale | |
| β βββ translation.py # traduction | |
| β βββ tts.py # synthese vocale | |
| βββ tests/ | |
| ``` | |
| ## Developpement local | |
| ```bash | |
| pip install -r requirements.txt | |
| uvicorn app.main:app --reload --port 8000 | |
| ``` | |
| ## Modeles utilises | |
| Deux stacks de traduction sont disponibles, selectionnees via la variable | |
| d'env `MODEL_STACK` (voir `app/deps.py`) : | |
| | Stack | Traduction FR<->local | Traduction locale<->locale | Licence | | |
| |-------|------------------------|------------------------------|---------| | |
| | `old` (defaut) | `facebook/nllb-200-3.3B` | via NLLB (paire directe) | MIT/CC (Meta) | | |
| | `goaicorp` | `goaicorp/dyu-translation`, `goaicorp/mos-translation` | pivot par le francais (deux appels sequentiels via les deux modeles GO AI) | CC-BY-NC 4.0, non-commercial (Wendpanga Aristide Bandaogo, GO AI Corporation) | | |
| `MODEL_STACK` vaut `"old"` par defaut : aucun changement en prod tant que la | |
| variable n'est pas positionnee explicitement a `"goaicorp"` dans les secrets | |
| du Space HF concerne. | |
| ASR : par defaut `facebook/omniASR-LLM-7B` (Meta Omnilingual ASR, backend | |
| `omnilingual_llm`), avec repli local sur `facebook/mms-1b-all` si le paquet | |
| `omnilingual-asr` (Linux/WSL uniquement) est indisponible (`ASR_BACKEND`, voir | |
| `app/deps.py`). Quand `MODEL_STACK=goaicorp`, tous ces backends sont ignores | |
| au profit de `goaicorp/mos-asr` et `goaicorp/dyu-asr` (le francais reste sur | |
| `openai/whisper-large-v3`, GO AI n'ayant pas de modele ASR francais dedie). | |
| TTS : `facebook/mms-tts-dyu` (dioula) et `facebook/mms-tts-mos` (moore), | |
| modeles VITS. Un backend `k2-fsa/OmniVoice` a ete teste pour le dioula | |
| (`TTS_BACKEND_DYU=omnivoice`) puis desactive suite a des retours utilisateur | |
| sur une articulation incorrecte de certains mots β `mms` reste le defaut de | |
| `Settings`. GO AI n'a pas de modele TTS dioula, donc les deux stacks de | |
| traduction utilisent le meme backend TTS. La sortie audio est encodee en | |
| OGG/Opus (via pydub/ffmpeg, voir `_write_ogg_opus()` dans `tts.py`) : c'est | |
| le seul format que l'API Telegram `sendVoice` accepte (le WAV brut ne | |
| fonctionne avec aucune methode d'envoi audio de Telegram). | |
| ## Deploiement sur Hugging Face Spaces | |
| Ce dossier alimente TROIS Spaces Docker separes (16 Go de RAM chacun), | |
| synchronises automatiquement a chaque push sur `main` : | |
| - **Traduction** (`AchrafCyber/model-service`, header YAML ci-dessus : | |
| `sdk: docker`, `app_port: 7860`, `Dockerfile`) : stack de traduction | |
| (`/translate`, `/to-french`, voir "Modeles utilises" ci-dessus). Workflow : | |
| `.github/workflows/deploy-model-service.yml`. | |
| - **ASR** (`AchrafCyber/asr-service`, `Dockerfile.asr`, point d'entree | |
| `app/main_asr.py`) : omniASR-LLM-7B (Meta Omnilingual ASR). Workflow : | |
| `.github/workflows/deploy-asr-service.yml`, qui renomme `Dockerfile.asr` | |
| en `Dockerfile` dans le Space cible (HF Spaces exige ce nom exact). | |
| - **TTS** (`AchrafCyber/tts-service`, `Dockerfile.omnivoice`) : MMS-TTS pour | |
| le dioula et le moore (`/speak`). Le nom du Dockerfile date de l'essai | |
| OmniVoice (voir ci-dessus) mais le backend actif par defaut est `mms`. | |
| Workflow : `.github/workflows/deploy-tts-service.yml`, meme mecanisme de | |
| renommage. | |
| Un quatrieme Space (`automation-service`, automatisation Playwright du site | |
| DEMO e-casier) existe dans le monorepo mais n'est **pas deploye actuellement** | |
| β le workflow `.github/workflows/deploy-automation-service.yml` cible | |
| `AchrafCyber/automation-service-disabled`, un nom placeholder, tant que ce | |
| Space n'a pas ete cree manuellement sur huggingface.co/new-space. | |
| Ces Spaces existent separement parce que NLLB-200-3.3B (~13 Go), | |
| omniASR-LLM-7B (~29 Go) et un modele TTS charges ensemble dans un seul Space | |
| de 16 Go font crasher le conteneur (OOM) des qu'une requete declenche le | |
| chargement de plusieurs modeles lourds a la fois. | |
| Les workflows partagent le meme dossier source (`model-service/`) mais | |
| poussent vers des repos Space distincts avec un `Dockerfile` different. | |
| Chaque Space lit ses propres "Secrets" (Settings > Variables and secrets du | |
| Space : `ALLOWED_ORIGINS`, `HF_TOKEN`, `MODEL_STACK`), pas ce repo. Cote | |
| backend, l'URL de chaque Space se configure via `ASR_SERVICE_URL` / | |
| `TTS_SERVICE_URL` (voir `backend/lib/env.ts`) ; si absentes, `/transcribe` et | |
| `/speak` retombent sur `MODEL_SERVICE_URL` (mode "un seul Space", utile en | |
| local β c'est pour ce mode que `/localize` combinant traduction+TTS est | |
| conserve cote FastAPI). | |