ArrowCrisis's picture
Update app.py
c29c9f9 verified
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)