stephane000 commited on
Commit
ffabbb2
·
verified ·
1 Parent(s): 6906007

Create main.py

Browse files
Files changed (1) hide show
  1. main.py +54 -0
main.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from fastapi import FastAPI
3
+ from fastapi.middleware.cors import CORSMiddleware
4
+ from huggingface_hub import InferenceClient
5
+ import json
6
+
7
+ token = os.getenv("HF_TOKEN")
8
+ # On utilise un modèle performant pour le texte : Mistral-7B
9
+ client = InferenceClient(api_key=token)
10
+
11
+ app = FastAPI()
12
+
13
+ app.add_middleware(
14
+ CORSMiddleware,
15
+ allow_origins=["*"],
16
+ allow_methods=["*"],
17
+ allow_headers=["*"],
18
+ )
19
+
20
+ @app.post("/verify")
21
+ async def verify(data: dict):
22
+ question_eleve = data.get("userLatex") # C'est le texte saisi par l'élève
23
+ sujet_cours = data.get("expectedLatex") # Le contexte (ex: la photosynthèse)
24
+
25
+ # Prompt spécifique pour les SVT
26
+ prompt = f"""<s>[INST] Tu es un professeur de SVT (Sciences de la Vie et de la Terre).
27
+ Ton rôle est d'aider l'élève à comprendre sans donner la réponse directement s'il se trompe.
28
+
29
+ Sujet du cours : {sujet_cours}
30
+ Question ou réponse de l'élève : {question_eleve}
31
+
32
+ Analyse la réponse. Si elle est correcte, félicite-le.
33
+ Si elle est incomplète ou fausse, donne un indice scientifique pour le mettre sur la voie.
34
+
35
+ Réponds EXCLUSIVEMENT sous ce format JSON :
36
+ {{
37
+ "isCorrect": true ou false,
38
+ "feedback": "ton message pédagogique ici"
39
+ }} [/INST]"""
40
+
41
+ try:
42
+ response = client.text_generation(
43
+ prompt,
44
+ model="mistralai/Mistral-7B-Instruct-v0.3",
45
+ max_new_tokens=300,
46
+ temperature=0.7 # Un peu de créativité pour le ton pédagogique
47
+ )
48
+
49
+ # Nettoyage pour extraire le JSON
50
+ start = response.find('{')
51
+ end = response.rfind('}') + 1
52
+ return json.loads(response[start:end])
53
+ except Exception as e:
54
+ return {"isCorrect": False, "feedback": "Désolé, j'ai du mal à analyser ta réponse. Réessaie !"}