From d0487326132841fc430ed53057ea2883065a38dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Miquel?= Date: Sat, 26 Sep 2026 22:38:03 +0200 Subject: [PATCH] add back Example --- Readme.org | 86 ++++++------------------------------------------------ 1 file changed, 9 insertions(+), 77 deletions(-) diff --git a/Readme.org b/Readme.org index 437708f..cd3b761 100644 --- a/Readme.org +++ b/Readme.org @@ -1,7 +1,7 @@ #+title: Copienator #+author: Sébastien Miquel #+date: 14-03-2026 -# Time-stamp: <22-08-26 12:22> +# Time-stamp: <26-09-26 22:56> #+OPTIONS: * Présentation @@ -10,15 +10,17 @@ Ce dépôt contient un certain nombre de script Python que j'utilise pour faire corriger des copies par Gemini. - 1. Les copies sont découpées suivant les labels des questions. - 2. Des requêtes de correction sont faites à Gemini, qui met une note + 1. L'énoncé (pdf/tex) et le corrigé sont analysés + 2. Les labels des questions sont détectées sur les copies. + 3. Les copies sont découpées suivant ces labels. + 4. Des requêtes de correction sont faites à Gemini, qui met une note entre 0 et 4 à la question, ajoute des commentaires, et encadre certaines parties de la réponse. - 3. Une version pdf annotée de la copie est générée, faite pour être + 5. Une version pdf annotée de la copie est générée, faite pour être éditée sur tablette tactile. Le correcteur humain peut modifier la note, supprimer des commentaires de l'IA, ou ajouter des remarques manuscrites. - 4. Ces annotations manuscrites sont lues et recompilées en une + 6. Ces annotations manuscrites sont lues et recompilées en une version de la copie pour l'élève. ** Limitations @@ -163,7 +165,7 @@ Copier `default_config.py` en `config.py`. Éventuellement le modifier. noms/prénoms des élèves, un par ligne 2. Créer un dossier correspondant à l'évaluation (=Interro= dans la suite) - 3. Suivre les instructions suivantes + 3. Lancer l'interface graphique ** Interface graphique @@ -178,73 +180,7 @@ l’interface, depuis n’importe quel répertoire. Il utilise le Python de =.venv= s’il existe, sinon =python3= du PATH. On peut lui passer le dossier d’évaluation : =./start-gui.sh Interro=. Sans argument, il ouvre le sous-dossier immédiat non masqué le plus récemment modifié du répertoire -courant, en excluant =copienator=, =copienator_gui=, =tests=, =OLD=, -=__pycache__=, =build=, =dist=, =*.egg-info=, =venv=, =env= et -=node_modules=. S’il n’y a aucun dossier admissible, l’interface démarre -sans évaluation. Un chemin explicite reste utilisable même s’il est exclu -de la sélection automatique. - -=Recharger — vérifier à nouveau= relit les fichiers d’entrée du dossier. -Pour reprendre le découpage d’une copie, sélectionnez-la dans =Copies -détectées=, cliquez sur =Refaire la copie sélectionnée=, puis sur -=Exécuter=. Le découpage repart de l’original conservé. -Dans la fenêtre de découpage, =i= inverse l’ordre de toutes les pages -(dernière vers première) et reprend à la nouvelle première page. Les choix -de découpage déjà saisis sont effacés ; les rotations globales sont conservées. -Ce raccourci est configurable via =PAGE_SPLITTER_KB["reverse_pages"]=. -=Copier la commande= copie les commandes complètes (à lancer depuis la -racine du projet). Dans la console, les boutons de copie et le clic droit -permettent de copier la sélection ou toute la sortie ; =Ctrl+C= et -=Ctrl+A= sont également disponibles (=Cmd= sous macOS). - -Pendant =Découper une partie à gauche pour détection des labels=, les -flèches gauche et droite déplacent la zone de 50 px ; les flèches haut et -bas l’élargissent ou la réduisent de 50 px. Avec le workflow personnel, -=t/s/r/n= reproduisent respectivement gauche/réduire/élargir/droite. -=1= utilise les pages entières. =!= signale la copie en erreur et passe à -la suivante ; =Entrée= valide et enregistre la découpe affichée. -Une copie ignorée conserve ses anciennes découpes. Les signalements sont -conservés dans =.copienator/copy_errors.json=, même après fermeture. -Dans =Séparer et réordonner les pages=, =Traiter les copies signalées= -reprend ces copies à partir des originaux conservés. Le même bouton dans -=Découper une partie à gauche pour détection des labels= reprend leur -découpage ; chaque signalement -est effacé seulement après validation et enregistrement avec =Entrée=. -Fermer la fenêtre, appuyer à nouveau sur =!= ou rencontrer une erreur -conserve le signalement. Les commandes =page-split= et =crop-labels= -acceptent aussi =--marked= pour traiter les copies signalées de l’évaluation. - -Avec =SHOW_PERSONAL_STEPS = True=, =Analyser l’énoncé= propose le choix -entre Gemini et =Énoncés et solutions personnels (SHEETINFO)=. Ce dernier -lance =python -m copienator statement-personal Interro= : il lit -=enonce.tex=, utilise le service d’exercices sur =localhost:8080= pour -générer =Text=, =Sol=, =Text2=, =Sol2= et les barèmes personnels =Persp=, -et écrit un groupe par exercice dans =label_groups=. - -Deux boutons ouvrent ensuite des actions facultatives avec aperçu de -commande et bouton =Exécuter= : =Regrouper avec Gemini…= remplace seulement -=label_groups= (=statement Interro --groups-only=) ; =Remplacer Persp avec -Gemini…= régénère seulement les barèmes des groupes actuels -(=statement Interro --persp-only=), avec le même prompt que le parcours -Gemini complet. Une réponse incomplète ou un échec laisse les anciens -barèmes en place. On peut ignorer ces étapes et conserver les résultats -personnels. - -On peut aussi ouvrir directement une évaluation avec =python -m copienator gui -Interro=. L'interface conserve l'état et l'historique des étapes dans -=Interro/.copienator-gui.json=, et les sorties complètes dans -=Interro/.copienator/logs/=. Une relance d'une étape antérieure ne -supprime aucun résultat ; les étapes suivantes sont seulement marquées -comme étant à revalider. - -Après la réussite d'un script, l'interface sélectionne automatiquement -l'étape suivante. =Découper les réponses par question= et =Regrouper -les réponses= démarrent automatiquement lors de leur première visite. -Avec le mode =Correction immédiate=, les trois étapes batch sont alors -marquées =Ignorée= à leur première visite. L'étape de résolution -manuelle est traitée de la même façon si =manual_resolutions.txt= est -absent, vide ou ne contient que des commentaires. Ces automatismes ne -se répètent pas lors d'un retour en arrière. +courant. Le bouton =Diagnostic…= vérifie les modules Python, Poppler, LaTeX, PDF Arranger (ou Aperçu sous macOS) et la configuration Gemini. Sous @@ -254,10 +190,6 @@ sont également inspectés. Quand la création de liens symboliques ou physiques n'est pas autorisée, l'export et la préparation de =A Rendre= utilisent automatiquement une copie normale. -Les chemins des étapes personnelles peuvent être adaptés avec -=CURRENT_SCORE_ODS_PATH=, =FINAL_SCORE_ODS_PATH=, -=FINAL_SCORE_OUTPUT_DIR= et =FINAL_SCORE_FONT_PATH= dans =config.py=. - * Documentation complémentaire - [[file:docs/final_output.md][Fichiers finaux dans A Rendre]] : contenu du JPEG, sélection et