File size: 3,712 Bytes
6a4e68b
 
 
 
 
 
 
 
 
 
1e29076
87344df
1e29076
87344df
 
 
1e29076
 
 
 
 
87344df
1e29076
87344df
1e29076
87344df
1e29076
87344df
1e29076
 
 
 
87344df
1e29076
87344df
 
1e29076
 
 
 
 
 
 
 
 
 
 
 
 
87344df
1e29076
 
 
 
 
 
 
87344df
1e29076
 
87344df
 
2a08435
b497571
2a08435
b497571
2a08435
 
 
 
b497571
2a08435
 
 
 
b497571
2a08435
b497571
1e29076
 
 
 
 
 
 
 
 
 
 
 
87344df
 
 
1e29076
 
 
87344df
1e29076
87344df
1e29076
87344df
1e29076
 
 
 
 
 
87344df
1e29076
87344df
1e29076
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
---
title: AIM Learning Companion
emoji: 🎯
colorFrom: blue
colorTo: purple
sdk: docker
app_port: 7860
pinned: false
---

# AIM - Compagnon socratique d'apprentissage

Moteur de questionnement socratique pour apprenants adultes en formation professionnelle. Applique un protocole strict en 5 phases pour guider la reflexion critique, ancre dans les documents de cours via RAG.

## Architecture

- **Backend** : FastAPI (Python)
- **LLM** : OpenRouter ou Ollama (configurable via `.env`)
- **Vector Store** : ChromaDB (local, persistant)
- **Embeddings** : sentence-transformers (`all-MiniLM-L6-v2`)
- **Frontend** : Vanilla HTML/CSS/JS (servi par FastAPI)

## Demarrage rapide

1. Copier le fichier d'environnement :
   ```bash
   cp .env.example .env
   ```

2. Configurer la cle API dans `.env` (voir section "Configuration LLM" ci-dessous)

3. Lancer :
   ```bash
   docker-compose up --build
   ```

4. Ouvrir http://localhost:8000

## Configuration LLM

### Option A : Test (OpenRouter)

```env
OPENROUTER_API_KEY=sk-or-v1-votre-cle-ici
LLM_BASE_URL=https://openrouter.ai/api/v1
LLM_MODEL=mistralai/mistral-7b-instruct
```

### Option B : Production (Ollama local)

```env
OPENROUTER_API_KEY=ollama
LLM_BASE_URL=http://localhost:11434/v1
LLM_MODEL=mistral:instruct
```

Prerequis pour Ollama :
```bash
ollama pull mistral:instruct
ollama serve
```

## Deploiement en ligne (Hugging Face Spaces)

Pour une demo accessible via URL publique, gratuite, sans carte bancaire :

1. Creer un compte sur [huggingface.co](https://huggingface.co)
2. **New Space** > choisir **Docker** comme SDK
3. Connecter le repo GitHub ou pousser le code directement
4. Dans **Settings > Variables and secrets**, ajouter comme **secrets** :
   - `OPENROUTER_API_KEY` = votre cle OpenRouter
   - `LLM_BASE_URL` = `https://openrouter.ai/api/v1`
   - `LLM_MODEL` = `mistralai/mistral-7b-instruct`
5. Le Space se build et deploie automatiquement
6. URL publique : `https://votre-nom-aim.hf.space`

Free tier : 2 Go RAM, 16 Go disque β€” suffisant pour sentence-transformers + ChromaDB.

## Migration vers deploiement local

L'application est concue pour rendre la migration triviale :

1. **LLM** : Changer uniquement `LLM_BASE_URL` et `LLM_MODEL` dans `.env`
   - Remplacer `https://openrouter.ai/api/v1` par `http://localhost:11434/v1`
   - Remplacer `mistralai/mistral-7b-instruct` par `mistral:instruct`
   - Mettre `OPENROUTER_API_KEY=ollama` (Ollama n'exige pas de cle mais le champ doit etre non-vide)

2. **Aucune modification de code requise** : le `base_url` et l'`api_key` sont charges exclusivement depuis `.env`

3. **Resultat** : inference 100% locale, aucune donnee ne quitte le reseau client

## Corpus

Placer des fichiers `.pdf` et `.txt` dans le dossier `/corpus`. Le pipeline RAG les charge et les indexe au demarrage.

Le dossier `/corpus` est monte en volume β€” ajout ou remplacement de documents sans reconstruction du conteneur.

Un fichier `sample.txt` est inclus pour tester le RAG immediatement.

## Fonctionnalites

- **Deux modes** : TUTEUR (accompagnement) et CRITIQUE (audit logique)
- **Protocole socratique en 5 phases** : Ciblage β†’ Clarification β†’ Mecanisme β†’ Verification β†’ Stress-test
- **Une seule question par reponse** β€” jamais de reponse directe
- **RAG** : questions ancrees dans les documents de cours
- **Analyse de fin de session** : 6 dimensions notees (0-100) + bilan + export JSON
- **Stateless** : aucune donnee persistee apres fermeture de l'onglet

## Confidentialite

- Sessions sans etat : aucune donnee persistee apres fermeture de l'onglet
- Pas de localStorage pour l'historique
- Pas de comptes utilisateurs, pas d'authentification
- Pas de cookies, pas de tracking