# Universal AI Language Exam Framework (UALEF)

## Version
- Framework: v0.5
- Date: 2025-10-30
- Status: Core concepts defined, implementation pending

## Overview

Framework universel pour générer, administrer et corriger des exams de langue avec l'aide de l'IA.

## Workflow Core (A → Z)

### INPUT
Travail du mois (chapters complétés pour un segment donné)

### STEP 1: Génération Exam (AI)
- **Input** : Chapters complétés durant le mois pour un segment (ex: Hanyu Ch 1, 3, 4, 5)
- **Process** :
  - AI scan le contenu des chapters (vocab, grammar, textes)
  - AI génère exam selon **Global Segment Framework** (structure définie par type de segment)
  - AI produit un fichier JSON structuré avec toutes les questions
- **Output** : `Exams/{Segment}/YYYY-MM/exam.json`
- **Validation** : Script vérifie structure JSON avant publication

### STEP 2: Passage Exam (Étudiant)
- **Input** : `exam.json` (questions générées par AI)
- **Process** :
  - Étudiant copie `exam.json` → `exam-answers.json`
  - Étudiant charge le fichier dans interface HTML
  - Étudiant remplit les champs `"answer": "..."` pour chaque question
  - Interface sauvegarde automatiquement les réponses
- **Output** : `Exams/{Segment}/YYYY-MM/exam-answers.json` (complet)

### STEP 3: Correction AI
- **Input** : `exam-answers.json` (contient questions + réponses étudiant)
- **Process** :
  - AI évalue chaque réponse selon critères du **Global Segment Framework**
  - AI attribue un score (`rate`) pour chaque question
  - AI génère feedback détaillé par exercice
  - AI calcule score total et statut (PASS/DIFFICULTY/CRITICAL)
- **Output** : `Exams/{Segment}/YYYY-MM/exam-corrected.json`

### OUTPUT
- Score total /100
- Statut : PASS (>80%) / DIFFICULTY (50-80%) / CRITICAL (<50%)
- Feedback détaillé par exercice
- Recommandations pour amélioration

---

## Concepts Clés

### 1. Segment Types
Deux types de segments existent dans un système d'apprentissage :

#### **Skill Segments** (Direct)
Segments qui correspondent à une compétence linguistique spécifique
- **Objectif** : Développer une skill directe (parler, écrire, lire, écouter)
- **Évaluation** : Performance dans cette skill
- **Exemples** :
  - Kouyu (Speaking): pronunciation, fluency, naturalness, grammar
  - Tingli (Listening): comprehension, detail retention, inference
  - Xiezuo (Writing): grammar, vocabulary, coherence, structure
  - LEDU (Reading): comprehension, speed, inference, vocabulary

#### **Foundation Segments** (Enabler)
Segments qui servent de base pour développer les skills
- **Objectif** : Construire les fondations (grammaire, vocabulaire, structures)
- **Évaluation** : Compréhension et application des concepts
- **Exemples** :
  - Hanyu Jiaocheng: grammar mastery, vocabulary retention, structure comprehension
  - General language courses qui ne focusent pas sur une skill spécifique

**Important** : Les Foundation segments ne testent pas la production libre mais la compréhension et l'application contrôlée des concepts.

### 2. Segment Framework (Global)
Standards généraux pour chaque segment (adapté selon le type)

### 3. Correction Framework (Spécifique)
Généré avec chaque exam, inclut:
- Réponses attendues
- Rubrique de scoring détaillée
- Points clés à évaluer
- Barèmes spécifiques

### 4. Double Framework Approach
- **Global Segment Framework** = cohérence et standards
- **Correction Framework** = flexibilité et spécificité
- Combinaison = correction juste et adaptée

---

## Avantages du Système

✅ **Scalable**: Fonctionne pour n'importe quel segment, n'importe quelle langue
✅ **Consistent**: Double framework assure cohérence des corrections
✅ **Flexible**: Correction framework s'adapte au contenu spécifique
✅ **Transparent**: Critères clairs dès la génération de l'exam
✅ **AI-Assisted**: Correction rapide et détaillée avec feedback actionnable

---

## Technical Implementation

### Format & Storage

**Format universel** : JSON + HTML interface

**Structure des fichiers** :
```
Exams/
  ├── Foundation/
  │   └── YYYY-MM/
  │       ├── exam.json              # Généré par AI
  │       ├── exam-answers.json      # Rempli par étudiant
  │       └── exam-corrected.json    # Généré par AI
  ├── Speaking/
  │   └── YYYY-MM/
  │       ├── exam.json
  │       ├── exam-answers.json
  │       └── exam-corrected.json
  ├── Reading/
  │   └── YYYY-MM/ ...
  └── [autres segments]/
      └── YYYY-MM/ ...
```

**Fichiers** :
1. **exam.json** : Questions + structure, généré par AI
2. **exam-answers.json** : Copie de exam.json + réponses de l'étudiant
3. **exam-corrected.json** : Même structure + scores (`rate`) + feedback

### Structure JSON Universelle

Tous les exams suivent cette structure de base :

```json
{
  "metadata": {
    "exam_id": "{segment}-{YYYY-MM}",
    "month": "YYYY-MM",
    "segment": "{segment_name}",
    "segment_type": "foundation|skill",
    "chapters_covered": ["1", "3", "4", "5"],
    "generated_date": "YYYY-MM-DD",
    "total_points": 100
  },
  "exercices": {
    "exercice1_name": {
      "total_points": X,
      "items": {
        "item1": {
          "question_data": "...",
          "expected": "...",
          "points": X,
          "answer": "",      // Rempli par étudiant
          "rate": null       // Rempli par AI lors de correction
        },
        "item2": { ... }
      }
    },
    "exercice2_name": { ... }
  },
  "correction": {
    "total_score": null,           // Rempli par AI
    "status": null,                // PASS|DIFFICULTY|CRITICAL
    "feedback_by_exercice": {},    // Rempli par AI
    "overall_feedback": "",        // Rempli par AI
    "strengths": [],               // Rempli par AI
    "weaknesses": [],              // Rempli par AI
    "recommendations": []          // Rempli par AI
  }
}
```

**Champs clés** :
- **Question data** : Généré par AI (varie selon exercice)
- **answer** : Rempli par étudiant dans `exam-answers.json`
- **rate** : Rempli par AI dans `exam-corrected.json` (score obtenu)

### Validation

#### Validation Structurelle (mécanique)
Comme un compilateur, vérifie la structure sans évaluer le contenu :

- ✅ JSON est parsable
- ✅ Metadata complet (exam_id, month, segment, chapters, etc.)
- ✅ Tous les exercices définis dans le Segment Framework sont présents
- ✅ Chaque exercice a le bon nombre d'items (selon framework)
- ✅ Structure rigide respectée (ex: `item1`, `item2`, ..., `itemN` - pas de tableaux)
- ✅ Tous les champs requis existent et ne sont pas vides

**Avantage structure rigide** :
```json
// ❌ Mauvais (array - AI peut oublier des éléments)
"words": [
  { "l1": "parler", "l2": "说" },
  // Oups, AI a oublié word #8
]

// ✅ Bon (objets nommés - impossible d'oublier)
"words": {
  "word1": { "l1": "parler", "l2": "说" },
  "word2": { "l1": "ami", "l2": "朋友" },
  ...
  "word20": { "l1": "livre", "l2": "书" }
}
```

#### Validation de Contenu (basique)
Vérifications simples et mécaniques :

- ✅ Textes ont longueur minimum (ex: >100 caractères)
- ✅ Total des points = 100
- ✅ Chaque item a un score `points` > 0
- ✅ Champs texte ne sont pas vides (question_data, expected, etc.)

#### Validation de Qualité (optionnelle)
**Stratégie initiale** : Trust & Iterate
- Pas de validation AI-to-AI au début
- Si problèmes récurrents → ajouter AI review ou ajuster prompts

**Si nécessaire plus tard** :
- AI-2 review la qualité du contenu généré par AI-1
- Checklist : grammaire, niveau approprié, cohérence, etc.

#### Script de Validation
À créer : `validate-exam.js` ou `validate-exam.py`

Usage :
```bash
node validate-exam.js Exams/Foundation/2025-01/exam.json
# Output: ✅ Valid ou ❌ Errors with details
```

### Génération par AI

**Input requis** :
- Liste des chapters complétés durant le mois
- Contenu des chapters (vocab lists, grammar structures, textes)
- Global Segment Framework (structure de l'exam à générer)

**Process** :
1. AI lit les chapters et extrait le contenu pertinent
2. AI génère exam selon structure rigide du Segment Framework
3. AI produit `exam.json` avec structure complète
4. Script de validation vérifie le JSON
5. Si ✅ valid → exam publié, si ❌ errors → regénération ou correction

**Prompt pattern** (à définir pour chaque segment) :
```
Generate an exam for {segment} segment based on chapters {list}.

Output format: JSON following this EXACT structure:
{structure template}

Requirements:
- Use ONLY vocabulary and grammar from the provided chapters
- Follow the rigid structure (word1, word2, ... wordN)
- Ensure all fields are filled
- Total points must equal 100

Chapters content:
{chapters data}
```

### Correction par AI

**Input** : `exam-answers.json` (contient questions + réponses étudiant)

**Process** :
1. AI évalue chaque réponse selon critères du Global Segment Framework
2. AI attribue `rate` (score obtenu) pour chaque item
3. AI génère feedback par exercice
4. AI calcule score total
5. AI détermine statut (PASS/DIFFICULTY/CRITICAL)
6. AI produit recommandations

**Output** : `exam-corrected.json` avec :
- Champs `rate` remplis partout
- Section `correction` complète
- Feedback actionnable et détaillé

**Prompt pattern** (à définir pour chaque segment) :
```
Correct this exam based on the Global Segment Framework.

Exam with student answers:
{exam-answers.json}

Segment Framework criteria:
{criteria}

For each answer:
1. Evaluate according to criteria
2. Assign rate (score earned)
3. Provide specific feedback if incorrect

Then provide:
- Total score
- Status (PASS >80%, DIFFICULTY 50-80%, CRITICAL <50%)
- Overall feedback
- Strengths and weaknesses
- Recommendations for improvement

Output format: JSON (same structure with rate + correction fields filled)
```

---

## Questions Restantes

1. **Global Segment Framework** :
   - ✅ Structure JSON définie
   - ❓ Contenu spécifique pour chaque Skill Segment (Speaking, Writing, etc.)

2. **Interface HTML** :
   - Comment charger exam.json
   - Comment sauvegarder exam-answers.json
   - Auto-save et validation côté client

3. **Prompts détaillés** :
   - Prompt de génération spécifique par segment
   - Prompt de correction spécifique par segment

---

## Prochaines Étapes

- [x] Définir workflow universel A→Z
- [x] Définir format et storage (JSON + fichiers)
- [x] Définir structure JSON universelle
- [x] Définir stratégie de validation (structurelle + contenu + qualité)
- [ ] Créer Foundation Segment Framework complet (structure JSON détaillée)
- [ ] Créer Skill Segment Frameworks (Speaking, Reading, Writing, Listening)
- [ ] Créer scripts de validation
- [ ] Définir prompts de génération par segment
- [ ] Définir prompts de correction par segment
- [ ] Créer interface HTML
- [ ] Tester avec exam pilote (Foundation)
- [ ] Itérer et raffiner

---

## Notes

Ce framework est conçu pour être universel et s'adapter à n'importe quel apprentissage de langue, pas seulement le chinois. Il peut être adapté pour d'autres systèmes d'apprentissage utilisant l'IA comme assistant pédagogique.
