from pathlib import Path import io from . import utils main_prompt = """Je te fournis une image contenant plusieurs réponses manuscrites à un examen. Chaque réponse est séparée de la précédente par une ligne horizontale noire. En dessous de cette ligne, à gauche, figure l'identifiant de la réponse, compris entre `01` et `50`. Attribue à chaque réponse une note de 0 à 4. Les demi-points sont autorisés, par exemple 2.5. Même si le résultat est faux, accorde au moins la moitié des points si le raisonnement est correct et pourrait conduire au bon résultat. Rédige tous les commentaires destinés à l'élève en français. Indique : - quelle partie de sa réponse est fausse ; - pourquoi elle est fausse ; - éventuellement, ce qu'il aurait fallu faire à la place. Les commentaires peuvent contenir des fragments LaTeX, par exemple `$a^2 + b^2 = c^2$`. Si la note n'est pas 4, fournis toujours un commentaire expliquant ce qui manque, sauf dans le cas `empty-answer` décrit ci-dessous. Lorsqu'un commentaire concerne une erreur située dans une partie précise de la réponse, tu peux fournir un champ `box_2d` pour la localiser. Ses coordonnées doivent être de la forme [ymin, xmin, ymax, xmax], normalisées entre 0 et 1000. Sinon, attribue la valeur `null` à `box_2d`. Si la réponse est correcte, aucun commentaire n'est nécessaire. Tu n'es pas obligé de faire des commentaires positifs ; si tu en fais, ne leur associe pas de `box_2d`. Par exemple, si l'élève affirme à tort qu'une fonction est continue, localise le mot « continue ». Si un calcul est faux, localise l'étape où l'erreur apparaît et explique cette erreur dans le commentaire. Évite les commentaires portant sur une confusion entre les lettres `n` et `m`, `x` et `n`, ou `h` et `k`. En cas de doute, suppose que tu as mal lu, sauf si la distinction est très importante. Certains cas nécessitent une valeur particulière du champ `error` : - L'élève n'a pas répondu à la bonne question : attribue la note 0 et indique `wrong-label`, car il peut s'agir d'une erreur de label. - La réponse contient aussi une réponse à une autre question de l'exercice, sur plus de quelques lignes : note la question demandée, mais indique `additional-answer`. - La réponse est vide, ou l'élève a seulement recopié l'énoncé : indique `empty-answer` et ne fournis aucun commentaire. S'il n'y a aucune de ces erreurs, attribue la chaîne vide `""` à `error`. Réponds uniquement en JSON, sous la forme d'une liste d'objets contenant les clés `id` et `result`. L'objet `result` contient `score`, la liste `feedback` et `error`. Chaque commentaire contient `text` et `box_2d`. Conserve exactement ces clés, les identifiants et les valeurs techniques de `error` : ne les traduis pas. Le contenu de chaque champ `text` doit être en français, même si certains documents fournis sont dans une autre langue. Exemple : ```json [ { "id": "01", "result": { "score": 2.5, "feedback": [ {"text": "Il manque la vérification des hypothèses du théorème.", "box_2d": null}, {"text": "Non, la fonction n'est pas forcément continue.", "box_2d": [145, 280, 340, 500]} ], "error": "" } }, { "id": "04", "result": {"score": 4.0, "feedback": [], "error": ""} } ] ``` Voici l'énoncé de l'exercice ou la partie pertinente du problème : ``` <> ``` Voici un corrigé possible : ``` <> ``` <> Tu dois noter uniquement la question ou l'exercice portant le label `<