Maintenance
Sessions
Exercise Extraction Pipeline
📖 Guide — comment fonctionne cet onglet (à lire une fois)
But : partir d'un livre en PDF et en sortir une bibliothèque d'exercices que le coach pourra proposer pendant une séance. Le travail se fait en 3 étapes, dans l'ordre : Step 1 → Step 2 → Step 3.
🔎 Comment les exercices sont repérés (le tri en entonnoir)
Un livre contient surtout du texte explicatif, et seulement quelques vrais exercices. On les trie par passes successives, de la moins chère à la plus fine :
- Découpage. Le PDF est coupé en blocs (une section par titre).
- Pré-filtre gratuit (l'« heuristique »). Des règles simples donnent une note à chaque bloc : contient-il une phrase d'exercice, des étapes numérotées, des verbes d'action ? Aucune IA, instantané, gratuit. Son rôle : ne rien rater — il laisse passer même les blocs douteux. Le tri fin vient juste après.
- Juge IA (1er passage, strict). Une IA lit chaque bloc retenu et répond : exercice ou pas, avec un niveau de confiance de 0 à 1. C'est elle qui décide vraiment.
- Repêchage (2e juge, indulgent). Quand le 1er juge hésite (confiance basse), un 2e juge plus souple relit le bloc pour rattraper les vrais exercices qui auraient failli passer à la trappe.
- Complétion. Le texte est élargi autour du bloc pour être sûr d'avoir l'exercice entier (énoncé + consignes), jamais coupé en deux.
Résultat de Step 1 : un fichier .md par exercice. Tu peux les relire et les corriger à la main à tout moment.
🧭 Les 3 étapes
- Step 1 — Extract. Déposer le PDF, donner un titre, lancer. Sort les fichiers d'exercices bruts (
status: raw). - Step 2 — Enrich. Une IA ajoute les étiquettes utiles au coaching (émotions visées, mécanisme, durée, matériel, niveau d'effort, mode d'emploi…). Les fichiers passent en
status: enriched. - Step 3 — Build Search Index. Range tous les exercices enrichis dans un index de recherche (LanceDB) pour que le coach retrouve le bon exercice au bon moment.
🎛️ Les réglages de Step 1 (en clair)
- Modèle : quel « cerveau » IA fait le tri. Haiku = rapide et bon marché (défaut, suffit la plupart du temps) ; Sonnet = plus fin mais plus lent et plus cher.
- Confidence min : la barre que le bloc doit franchir pour être gardé. Plus haut = plus sévère (moins d'exercices, mais plus sûrs) ; plus bas = plus permissif (plus d'exercices, dont quelques faux). Défaut 0,70.
- ⚙️ Avancé — pré-filtre : règle la sensibilité du tri gratuit avant l'IA. Le levier principal est le score minimum candidat : le baisser fait tester plus de blocs par l'IA (on rate moins, mais ça coûte plus d'appels). Les poids disent à quel point chaque indice (phrase-exercice, structure, verbe d'action) compte.
- ⚙️ Avancé — repêchage : active/règle le 2e juge indulgent. Utile si de vrais exercices sont ratés ; à laisser tel quel sinon.
🩺 Si le résultat n'est pas bon
- Des exercices manquent → baisse Confidence min, ou baisse le score minimum candidat dans Avancé. Pour vérifier ce qui a été écarté : bouton 📊 Journal des titres (les lignes grises = blocs bloqués par le pré-filtre).
- Trop de faux exercices → monte Confidence min.
- ↺ Réinitialiser les défauts remet tous les réglages avancés à leurs valeurs d'origine.
🧨 Reset LanceDB (Step 3) vide entièrement l'index de recherche sans toucher aux fichiers .md — pour repartir propre avant de réindexer. 🗑️ Delete All (bibliothèque) supprime au contraire les fichiers d'exercices eux-mêmes.
data/exercises/books/<book-id>/. Each file has status: raw.
⚙️ Avancé — Recall heuristique (pré-filtre gratuit)
headings.xlsx.
⚙️ Avancé — 2e passe lenient (repêchage)
status: raw exercise, asks an LLM to tag emotions, mechanisms, effort level, and usage context.
Updates the Markdown file frontmatter to status: enriched.You can manually edit the .md files before or after this step. Re-run to refresh enriched files.
status: enriched exercise files, computes embeddings, and loads them into LanceDB.
Run this after Step 2, or after any manual edit to a .md file.Manual edit flow: edit the file → set
status: enriched → run this step.
data/exercises/lancedb/. Reset LanceDB vide entièrement l'index vectoriel (les fichiers .md ne sont pas touchés).| 📄 Documentation | Télécharge la documentation PDF du pipeline. | 📊 Log of headings | Journal Excel de diagnostic : titres détectés, mots par section, parcours heuristique → IA. Généré à chaque extraction. |
| ⬇️ Export Excel | Exporte tous les exercices et leurs métadonnées (1 ligne par exercice). | Réimporte un xlsx modifié (rapprochement par id). Relancer Step 3 ensuite pour ré-indexer. | |
| Vide l'affichage de la liste. Les fichiers .md sont conservés. | Supprime définitivement tous les exercices de la bibliothèque. |
Agents
À la fin de sa phase, l'Agent 2 déduit de la conversation un profil de l'utilisateur
(émotions, intensité 1-10, état somatique, cadre, temps disponible, énergie, besoin du
moment) et déclare un indice de confiance entre 0 et 1 sur l'exactitude
de ces déductions.
Ce que veut dire ce seuil : si l'indice déclaré par l'Agent 2 est
supérieur ou égal au seuil ci-dessous, l'Agent 3 fait confiance au profil et passe
directement au choix de l'exercice. S'il est inférieur, l'Agent 3 ouvre par 3-4
questions rapides (intensité, temps disponible, cadre, besoin) pour vérifier le profil
avant de proposer un exercice.
0 = ne jamais poser ces questions (toujours faire confiance) ·
1 = toujours les poser. Défaut : 0.7.
Tests
Exécute la suite pytest côté serveur (~2s) — détecte les régressions de logique pure : orchestrateur, state machine, signaux, extraction Excel, agent loader, config.
Charge un Excel de scénarios. Une IA joue l'utilisateur (improvised) ou rejoue un script (scripted). Pas d'audio — text direct.
LLM par scénario via les colonnes user_llm (utilisateur simulé) et jury_llm (jury). Valeurs : haiku = Haiku 4.5, deepseek = DeepSeek, pro_sonnet = Sonnet 4.6.
| ID | Nom | Type | Phase | Tours | Tokens | Coût € | Jury | Statut |
|---|
| Date | Run ID | Total | PASS | FAIL | ERROR | Actions |
|---|