Plateforme de préparation de datasets d'instruction (SFT) en wolof pour GalsenAI LLM — format canonique ChatML, converters plugin, exporters Alpaca/ShareGPT.
# 🗂️ galsenai-sft-data
Plateforme de préparation de **datasets d'instruction (SFT) en wolof** pour le
projet **GalsenAI LLM**.
Elle collecte des datasets wolof existants, les convertit dans un **format
canonique unique (ChatML)**, et prépare la traduction de datasets d'instruction
externes vers le wolof — le tout de façon modulaire, testable et reproductible.
> Pipeline : `raw → validation → conversion → ChatML → quality checks →
> traduction (si besoin) → review → versioning → export → fine-tuning`
## Capacités ciblées (façon LFM 2.5)
- **Data extraction** : NER, Information Retrieval, Intent Classification, QA
- **Tool use** (agentique) : function calling
Le raisonnement de sélection — critères, sources retenues, **sources écartées et
pourquoi** — est dans `docs/targeting.md`. Les volumes
disponibles par tâche, mesurés à la source sans rien télécharger, sont dans
`docs/inventory.md` (`galsenai-sft inventory`).
## Format canonique : ChatML
La représentation interne est un `Sample` typé (pydantic) — une conversation
ChatML. Les formats **Alpaca** et **ShareGPT** sont produits par des exporters
dédiés. On ne stocke jamais de ChatML brut : tout est validable et transformable.
## Architecture
```
src/galsenai_sft/
├── core/ schéma canonique (Sample/Message), config, logging, io
├── registry.py système de plugins (Open/Closed)
├── converters/ 1 converter par dataset/tâche (translation, intent, ner, qa, …)
├── validators/ schéma, qualité, LID (GlotLID v3), décontamination, stats
├── translators/ interface pluggable + QE + review (étape 3, différée)
├── exporters/ chatml · alpaca · sharegpt
├── metadata/ registre + catalogue auto
└── cli.py `galsenai-sft`
```
## Ajouter un dataset (principe Open/Closed)
Écrire **un** converter, sans modifier le pipeline :
```python
from galsenai_sft.converters.translation.base_translation import TranslationConverter
from galsenai_sft.registry import register
@register("mon-org/mon-dataset")
class …