Ingestion du matériel de cours
Architecture détaillée : rag-architecture.md. Dernier rapport d'exécution : ingestion-report.md.
Exécution
pnpm ingest # incrémentale (sommes de contrôle SHA-256 — seuls les fichiers modifiés sont retraités)
pnpm reindex # complète (--force)Ou depuis l'admin : Cours & contenu → « Relancer l'ingestion ».
Ce qui est ingéré
| Source | Type | Espace | Fragmentation |
|---|---|---|---|
slides/seanceNN*.tex |
Diapositives beamer | official-* |
1 frame = 1 fragment, numéroté comme le PDF (frames noframenumbering exclues), boîtes sémantiques étiquetées (Définition/Important/Exemple/Note/Question éclair), tableaux aplatis |
plan_de_cours.tex |
Plan | official-* |
Par section/sous-section (+ redécoupage > 1 800 caractères avec chevauchement) |
exercices/enonce_*.tex, solution_*.tex |
Ateliers | official-* |
Par section/exercice |
aide_memoire.tex, glossaire.tex |
Références | official-* |
Par section (entrées de glossaire en lignes de tableau) |
README.md, description_moodle.md |
Infos | official-* |
Par titre |
examen*, *_exam*, *solutionnaire*, *blueprint*, *grille_correction*, output/course-analysis/*.md |
Matériel d'évaluation | instructor-private (invisible aux étudiants) |
Par section |
| Téléversements étudiants (chat) | PDF/DOCX/XLSX/CSV/TXT | student-temporary-upload (lié à la conversation et au propriétaire) |
Par page/bloc |
Exclus : artefacts LaTeX (.aux, .log…), images, scripts Python/JS, plateforme_ateliers/
(contient submissions.db avec données étudiantes), .git.
Métadonnées par fragment
cours, espace, document, type de référence (slide/section/exercise/glossary/page), numéro (diapositive/page), libellé (« Séance 4 — Diapositive 18 »), section courante, titre, types de boîtes, semaine, somme de contrôle du document parent, date d'ingestion, propriétaire éventuel.
Indexation
- FTS5 (
unicode61 remove_diacritics 2) — « depreciation » trouve « dépréciation ». - Embeddings locaux
Xenova/multilingual-e5-small(384 d, préfixes E5passage:/query:), stockés en blob ; premier lancement : téléchargement ~120 Mo dansdata/models/, ensuite hors-ligne.
Mesuré sur le corpus réel : 52 fichiers → 2 065 fragments en ~70 s (Apple Silicon).
Rapport et erreurs
Chaque exécution est journalisée (ingestion_runs) avec rapport détaillé par fichier (✓/⚠/✗),
consultable dans l'admin, et écrite dans docs/ingestion-report.md par le script CLI. Un fichier en
erreur n'interrompt pas le lot ; il apparaît en statut error avec son message.