# 🌍 Wolof Corpus — LLMOps Pipeline
Pipeline **LLMOps** de construction, validation et publication d'un corpus
**wolof** centralisé pour l'entraînement de modèles de langue (LLM/ASR/MT).
Le projet agrège, déduplique et contrôle automatiquement de multiples sources
publiques (texte web, traductions, ASR, instructions LLM) puis publie un dataset
unique et versionné sur HuggingFace :
**`galsenai/wolof_centalized_corpus`**
---
## 📊 Le corpus en chiffres
| Indicateur | Valeur |
|---|---|
| Exemples | **1 018 520** |
| Tokens (whitespace) | **72.5 M** |
| Texte brut (UTF-8) | **443.7 MB** |
| Part de wolof (GlotLID) | **97.1 %** |
| Sources agrégées | **47** |
| Exemples multi-sources | 271 174 |
| Format | Parquet · `text` (string) + `sources` (list[string]) |
> Corpus franchissant le **million d'exemples** sans doublon exact, agrégeant
> 47 sources (HF + scraping web + ASR). Déduplication exacte appliquée,
> 0 donnée existante perdue (quality gate anti-régression).
---
## 🏗️ Architecture
```
pipeline.yaml ─────────────────────────► configuration unique (config as code)
│
[1] ingest ─► [2] centralize ─► [3] merge ─► [4] stats ─► [5] datacard ─► [6] validate ─► [7] publish
datasets HF jsonl→parquet +corpus HF GlotLID README auto QUALITY GATES HF (versionné)
(resumable) dédup interne dédup global volumétrie (bloquant)
```
| # | Étape | Rôle |
|---|---|---|
| 1 | **ingest** | Ingestion des datasets HF → `jsonl` (filtrage langue GlotLID + longueur, reprise possible) |
| 2 | **centralize** | Fusion des `jsonl` → corpus ingéré (parquet, dédup interne) |
| 3 | **merge** | Fusion corpus HF + ingéré → corpus unifié (dédup globale, fusion des `sources`) |
| 4 | **stats** | Volumétrie + détection de langue (échantillon) |
| 5 | **datacard** | Génération automatique du README HF depuis les stats |
| 6 | **validate** | **Quality gates** bloquants (schéma, %wolof, taille, anti-perte…) |
| 7 | **publish** | Publication par …