File size: 3,319 Bytes
f7d4054 f242870 f7d4054 b8334dc f7d4054 b8334dc f7d4054 f242870 f7d4054 b8334dc f7d4054 b8334dc f7d4054 b8334dc f7d4054 a6a190f f242870 f7d4054 bf3df8b a6a190f bf3df8b a6a190f f242870 f7d4054 b8334dc bf3df8b f7d4054 b8334dc c29c9f9 f7d4054 bf3df8b f7d4054 b8334dc f7d4054 b8334dc f7d4054 | 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 | from flask import Flask, request, jsonify
from flask_cors import CORS
import requests
import os
import re
app = Flask(__name__)
CORS(app)
# Récupération de la clé depuis les secrets Hugging Face
API_KEY = os.environ.get("ALBERT_KEY")
# URL API Albert
ALBERT_URL = "https://albert.api.etalab.gouv.fr/v1/chat/completions"
@app.route('/')
def home():
return "Serveur Albert Proxy en ligne (Racines Carrées v2) !"
@app.route('/verify', methods=['POST'])
def verify_math():
# 1. Récupération des données
data = request.json
user_latex = data.get('userLatex', '')
expected_latex = data.get('expectedLatex', '')
# Vérification présence clé
if not API_KEY:
return jsonify({"error": "Clé API ALBERT_KEY manquante dans les Settings"}), 500
# 2. Préparation du prompt (Consignes strictes de formatage et de validation)
# CORRECTION : Utilisation explicite de \" pour les guillemets doubles dans les exemples JSON
system_prompt = (
"Tu es un professeur de mathématiques expert. "
"Ton rôle est de vérifier la simplification d'une expression irrationnelle (type (a√b - √c)²). "
"RÈGLES STRICTES DE VALIDATION :"
"1. ÉQUIVALENCE : La réponse de l'élève doit être mathématiquement égale à la réponse attendue."
"2. FORME : La réponse doit être sous la forme simplifiée 'a + b\\sqrt{c}' ou 'a - b\\sqrt{c}' ou un entier simple."
" - Refuse systématiquement (isCorrect: false) si l'expression contient des parenthèses ou des calculs non effectués (ex: (2\\sqrt{3})^2, 4*3)."
" - Refuse si la racine n'est pas réduite au maximum (ex: \\sqrt{12} au lieu de 2\\sqrt{3})."
"RÈGLES DE RÉPONSE :"
"1. Réponds UNIQUEMENT au format JSON valide (RFC 8259)."
"2. UTILISE EXCLUSIVEMENT DES DOUBLES GUILLEMETS \" POUR LES CLÉS ET LES VALEURS."
"3. LOGIQUE DU FEEDBACK (Pour le tri par l'interface) :"
" - Cas 1 (Juste et simplifié) -> {\"isCorrect\": true, \"feedback\": \"Bravo\"}"
" - Cas 2 (Mathématiquement juste MAIS forme non simplifiée/attendue) -> {\"isCorrect\": false, \"feedback\": \"La réponse est juste mathématiquement mais la forme n'est pas celle demandée (simplification)\"}"
" - Cas 3 (Faux) -> {\"isCorrect\": false, \"feedback\": \"C'est faux\"}"
)
user_prompt = f"Expression attendue (forme simplifiée) : {expected_latex}. Réponse de l'élève : {user_latex}."
payload = {
"model": "mistralai/Mistral-Small-3.2-24B-Instruct-2506",
"temperature": 0,
"messages": [
{ "role": "system", "content": system_prompt },
{ "role": "user", "content": user_prompt }
]
}
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# 3. Appel API
try:
response = requests.post(ALBERT_URL, json=payload, headers=headers)
response.raise_for_status()
albert_data = response.json()
content = albert_data['choices'][0]['message']['content']
return jsonify({"raw_content": content})
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860) |