ArrowCrisis commited on
Commit
f7d4054
·
verified ·
1 Parent(s): c826ddf

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +74 -0
app.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, jsonify
2
+ from flask_cors import CORS
3
+ import requests
4
+ import os
5
+
6
+ app = Flask(__name__)
7
+ # Autorise tout le monde à interroger ce serveur (nécessaire pour votre HTML externe)
8
+ CORS(app)
9
+
10
+ # Récupération de la clé secrète depuis les réglages Hugging Face
11
+ API_KEY = os.environ.get("ALBERT_KEY")
12
+
13
+ # Mettez cette adresse exacte :
14
+ ALBERT_URL = "https://albert.api.etalab.gouv.fr/v1/chat/completions"
15
+
16
+ @app.route('/')
17
+ def home():
18
+ return "Le serveur Albert Proxy fonctionne !"
19
+
20
+ @app.route('/verify', methods=['POST'])
21
+ def verify_math():
22
+ # 1. Récupérer les données envoyées par l'élève
23
+ data = request.json
24
+ user_latex = data.get('userLatex', '')
25
+ expected_latex = data.get('expectedLatex', '')
26
+
27
+ if not API_KEY:
28
+ return jsonify({"error": "Clé API non configurée sur le serveur"}), 500
29
+
30
+ # 2. Préparer le prompt pour Albert
31
+ # On demande un JSON strict pour faciliter la lecture
32
+ system_prompt = (
33
+ "Tu es un professeur de mathématiques expert. "
34
+ "Tu dois vérifier si la réponse de l'élève correspond à la réponse attendue. "
35
+ "Tes critères : 1) Mathématiquement équivalent. 2) Forme développée et réduite demandée. "
36
+ "Réponds UNIQUEMENT au format JSON strict : "
37
+ "{\"isCorrect\": boolean, \"feedback\": \"texte court en français\"}."
38
+ )
39
+
40
+ user_prompt = f"Attendu : {expected_latex}. Élève : {user_latex}. Vérifie la réponse."
41
+
42
+ payload = {
43
+ "model": "albert-light", # Vérifiez le nom du modèle dans votre doc (ex: albert-large, gpt-4, etc.)
44
+ "temperature": 0,
45
+ "messages": [
46
+ {"role": "system", "content": system_prompt},
47
+ {"role": "user", "content": user_prompt}
48
+ ]
49
+ }
50
+
51
+ headers = {
52
+ "Authorization": f"Bearer {API_KEY}",
53
+ "Content-Type": "application/json"
54
+ }
55
+
56
+ # 3. Interroger Albert
57
+ try:
58
+ response = requests.post(ALBERT_URL, json=payload, headers=headers)
59
+ response.raise_for_status() # Lève une erreur si code HTTP != 200
60
+
61
+ # 4. Renvoyer la réponse d'Albert à l'élève
62
+ albert_data = response.json()
63
+
64
+ # On extrait le contenu du message (souvent dans choices[0].message.content)
65
+ content = albert_data['choices'][0]['message']['content']
66
+
67
+ return jsonify({"raw_content": content})
68
+
69
+ except Exception as e:
70
+ print(f"Erreur: {e}")
71
+ return jsonify({"error": str(e)}), 500
72
+
73
+ if __name__ == '__main__':
74
+ app.run(host='0.0.0.0', port=7860)