feedbacks-scoring / CONFIGURATION.md
Matis Codjia
Scoring app
1d8c2e0
# Configuration de l'Application d'Annotation
Cette documentation explique comment configurer l'application pour un déploiement en production sur Hugging Face Spaces avec plusieurs annotateurs.
## Table des matières
1. [Vue d'ensemble](#vue-densemble)
2. [Étape 1 : Créer le Dataset de stockage](#étape-1--créer-le-dataset-de-stockage)
3. [Étape 2 : Configurer les Secrets HF](#étape-2--configurer-les-secrets-hf)
4. [Étape 3 : Configurer les Annotateurs](#étape-3--configurer-les-annotateurs)
5. [Étape 4 : Pousser sur HF Spaces](#étape-4--pousser-sur-hf-spaces)
6. [Utilisation pour les Annotateurs](#utilisation-pour-les-annotateurs)
7. [Récupération des Annotations](#récupération-des-annotations)
---
## Vue d'ensemble
L'application implémente 3 systèmes de sécurité et persistance :
1. **Authentification** : Mot de passe unique pour accéder à l'app
2. **Dispatch** : Chaque annotateur voit uniquement sa portion du dataset
3. **Persistance** : Sauvegarde automatique sur un Dataset HuggingFace privé
---
## Étape 1 : Créer le Dataset de stockage
1. Allez sur https://huggingface.co/new-dataset
2. Créez un nouveau dataset **PRIVÉ** :
- Nom : `ffgen-annotations-storage` (ou autre)
- Type : Dataset
- Visibilité : **Private** ⚠️ Très important !
3. Laissez-le vide, l'app créera automatiquement la structure
---
## Étape 2 : Configurer les Secrets HF
### 2.1 Créer un Token HuggingFace
1. Allez dans vos settings HF : https://huggingface.co/settings/tokens
2. Créez un nouveau token avec les permissions **write**
3. Copiez le token (format : `hf_xxxxxxxxxxxx`)
### 2.2 Ajouter les Secrets dans le Space
1. Allez dans votre Space : `https://huggingface.co/spaces/VOTRE-USERNAME/feedbacks-scoring-app`
2. Cliquez sur **Settings**
3. Scrollez vers **Variables and secrets**
4. Ajoutez les secrets suivants :
| Nom | Valeur | Description |
|-----|--------|-------------|
| `APP_PASSWORD` | `VotreMotDePasse2025!` | Mot de passe pour accéder à l'app |
| `HF_TOKEN` | `hf_xxxxxxxxxxxx` | Token avec droits d'écriture |
| `HF_DATASET_REPO` | `VOTRE-USERNAME/ffgen-annotations-storage` | Nom du dataset de stockage |
**Important** :
- Le token doit avoir les droits d'écriture
- Le dataset doit être privé pour protéger les annotations
---
## Étape 3 : Configurer les Annotateurs
### Option A : Configuration automatique (recommandé)
Créez un fichier `annotators.json` dans le dossier `data/` :
```json
{
"annotator_1": {
"name": "Alice Dupont",
"start_idx": 0,
"end_idx": 100,
"description": "Première portion du dataset"
},
"annotator_2": {
"name": "Bob Martin",
"start_idx": 100,
"end_idx": 200,
"description": "Deuxième portion"
},
"annotator_3": {
"name": "Charlie Durand",
"start_idx": 200,
"end_idx": 300,
"description": "Troisième portion"
}
}
```
### Option B : Configuration via Secret HF
Ajoutez un secret `ANNOTATOR_CONFIG` avec la configuration JSON en une ligne :
```json
{"annotator_1":{"name":"Alice","start_idx":0,"end_idx":100},"annotator_2":{"name":"Bob","start_idx":100,"end_idx":200}}
```
### Utilisation du script de génération FFGen
Si vous avez déjà utilisé le script `create_annotation_study.py` de FFGen :
```bash
# Depuis FFGen/3_data_processing/
python create_annotation_study.py \
matis35/code-feedback-infonce \
--num-samples 300 \
--num-subsets 3 \
--output-dir annotation_study
```
Cela crée 3 subsets de ~100 items chacun + gold standard.
Pour l'app, configurez les annotateurs correspondants :
- annotator_1 : subset_01 (indices 0-100)
- annotator_2 : subset_02 (indices 100-200)
- annotator_3 : subset_03 (indices 200-300)
---
## Étape 4 : Pousser sur HF Spaces
1. Commitez tous les changements :
```bash
git add .
git commit -m "Add authentication, dispatch and HF persistence"
```
2. Poussez vers HF :
```bash
git push origin main
```
3. Le Space va rebuilder automatiquement (prend 3-5 minutes)
4. Une fois prêt, vérifiez que l'app démarre correctement
---
## Utilisation pour les Annotateurs
### Workflow complet
1. **Accès à l'application**
- URL : `https://huggingface.co/spaces/VOTRE-USERNAME/feedbacks-scoring-app`
- Entrer le mot de passe fourni
2. **Sélection de l'identité**
- Choisir son identifiant dans la liste
- Le système affiche automatiquement la portion assignée
3. **Chargement du dataset**
- Option 1 : Upload d'un fichier JSONL
- Option 2 : Chargement depuis HF Hub
- Le dataset est automatiquement filtré selon la portion
4. **Annotation**
- Scorer les feedbacks (1-5)
- Ajouter des commentaires optionnels
- La progression est sauvegardée automatiquement
5. **Sauvegarde**
- **Importante** : Cliquer sur "☁️ Sauvegarder sur HF" régulièrement
- Cette sauvegarde est permanente (survit aux redémarrages)
- La sauvegarde locale est perdue tous les 48h
6. **Export (optionnel)**
- Télécharger le JSONL en local pour backup
### Instructions à donner aux annotateurs
> **Bienvenue sur l'outil d'annotation FFGen !**
>
> 1. Mot de passe : `[VOTRE_MOT_DE_PASSE]`
> 2. Choisissez votre identifiant dans la liste
> 3. Chargez le dataset (demandez le lien HF ou le fichier)
> 4. Annotez les feedbacks selon les critères fournis
> 5. **Important** : Sauvegardez sur HF toutes les 30-60 minutes
> 6. Vous pouvez fermer et reprendre plus tard
>
> Questions ? Contactez [VOTRE_EMAIL]
---
## Récupération des Annotations
### Méthode 1 : Via HuggingFace Hub (recommandé)
1. Allez sur votre dataset de stockage :
`https://huggingface.co/datasets/VOTRE-USERNAME/ffgen-annotations-storage`
2. Dans le dossier `annotations/`, vous trouverez tous les fichiers :
- `annotation_annotator_1_20250127_143022.json`
- `annotation_annotator_2_20250127_151533.json`
- etc.
3. Téléchargez-les ou utilisez la CLI :
```bash
huggingface-cli download \
VOTRE-USERNAME/ffgen-annotations-storage \
--repo-type dataset \
--local-dir ./annotations
```
### Méthode 2 : Via l'API Python
```python
from huggingface_hub import HfApi, hf_hub_download
import json
api = HfApi(token="hf_xxxxxxxxxxxx")
# Lister tous les fichiers
files = api.list_repo_files(
repo_id="VOTRE-USERNAME/ffgen-annotations-storage",
repo_type="dataset"
)
# Télécharger et charger chaque annotation
for file in files:
if file.startswith("annotations/"):
local_path = hf_hub_download(
repo_id="VOTRE-USERNAME/ffgen-annotations-storage",
filename=file,
repo_type="dataset",
token="hf_xxxxxxxxxxxx"
)
with open(local_path, 'r') as f:
data = json.load(f)
print(f"Annotator: {data['annotator_name']}")
print(f"Scores: {len(data['scores'])}")
```
### Méthode 3 : Utiliser le script de merge FFGen
Si vous avez des gold items pour calculer l'accord inter-annotateurs :
```bash
cd FFGen/3_data_processing
# Analyser l'accord
python analyze_agreement.py \
../../annotations/annotation_*.json \
--gold-file annotation_study/matis35_code-feedback-infonce_gold_standard.json
# Merger les scores
python merge_scores.py \
../../annotations/annotation_*.json \
-o final_annotations.jsonl
```
---
## Dépannage
### Le Space ne démarre pas
- Vérifiez que tous les secrets sont bien configurés
- Regardez les logs du Space (onglet Logs)
- Vérifiez que le `HF_TOKEN` a les droits d'écriture
### L'authentification ne marche pas
- Vérifiez que `APP_PASSWORD` est bien dans les secrets
- Pas d'espaces avant/après le mot de passe
### La sauvegarde HF échoue
- Vérifiez que `HF_TOKEN` a les droits d'écriture
- Vérifiez que `HF_DATASET_REPO` existe et est privé
- Regardez les messages d'erreur dans l'app
### Un annotateur voit le dataset complet
- Vérifiez la configuration dans `annotators.json`
- Vérifiez que les indices start_idx/end_idx sont corrects
- Rechargez le dataset après modification de la config
### Les annotations sont perdues
- Rappelez aux annotateurs de sauvegarder sur HF
- La sauvegarde locale est réinitialisée tous les 48h
- Les sauvegardes HF sont permanentes
---
## Architecture Technique
```
┌─────────────────────────────────────────────────────────┐
│ HF Space (Public) │
│ ┌────────────────────────────────────────────────────┐ │
│ │ 1. Authentification (APP_PASSWORD) │ │
│ │ ↓ │ │
│ │ 2. Sélection Annotateur │ │
│ │ ↓ │ │
│ │ 3. Filtrage Dataset (start_idx, end_idx) │ │
│ │ ↓ │ │
│ │ 4. Interface d'Annotation │ │
│ │ ↓ │ │
│ │ 5. Sauvegarde Cloud (HF_TOKEN) │ │
│ └────────────────────────────────────────────────────┘ │
└────────────────────┬────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ HF Dataset (Private): annotations-storage │
│ ┌────────────────────────────────────────────────────┐ │
│ │ annotations/ │ │
│ │ ├── annotation_annotator_1_timestamp.json │ │
│ │ ├── annotation_annotator_2_timestamp.json │ │
│ │ └── annotation_annotator_3_timestamp.json │ │
│ └────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
```
---
## Sécurité et Bonnes Pratiques
**À faire** :
- Utiliser des mots de passe forts (12+ caractères)
- Garder le dataset de stockage **PRIVÉ**
- Révoquer les tokens après l'étude
- Sauvegarder régulièrement sur HF
- Tester avec un annotateur avant le déploiement complet
**À éviter** :
- Partager le token HF publiquement
- Utiliser le même mot de passe que vos autres comptes
- Rendre le dataset de stockage public
- Compter uniquement sur la sauvegarde locale
- Modifier la config en cours d'annotation
---
## Support
Pour toute question ou problème :
- Issues GitHub : [LIEN_REPO]
- Email : [VOTRE_EMAIL]
- Documentation FFGen : `FFGen/README.md`