-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstreamlit_app.py
More file actions
82 lines (66 loc) · 3.78 KB
/
streamlit_app.py
File metadata and controls
82 lines (66 loc) · 3.78 KB
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
81
82
import streamlit as st
import json
import os
import requests # Import the requests library
from datetime import datetime # Keep for timestamp if needed for display, though Flask handles saving
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
# Configuration for Flask API endpoint
FLASK_API_URL = os.getenv("FLASK_API_URL", "http://127.0.0.1:5000/evaluate_answer")
st.set_page_config(page_title="Évaluation de Réponses", layout="wide")
st.title("Évaluation de Réponses")
# Example default texts
DEFAULT_TEXT = """
Dans la cour de l'école, les élèves sont joyeux. Ils jouent en groupes. Certains font de la
corde à sauter. D'autres jouent à cache-cache. On entend des rires partout.
En classe, la maîtresse explique la leçon de mathématiques avec un grand sourire. Elle
écrit des chiffres au tableau. Les enfants l'écoutent avec attention.
Nous prenons nos livres et nos cahiers. Il est temps d'apprendre à faire des additions
et à résoudre des problèmes. La maîtresse nous montre comment faire. Chacun essaie
sur son cahier. Si on a du mal, on peut demander de l'aide. Petit à petit, on devient plus
fort en maths.
"""
DEFAULT_QUESTION = "Que fait la maîtresse ?"
DEFAULT_ANSWER = "La maîtresse explique la leçon de mathématiques, écrit des chiffres au tableau, montre comment faire des additions et résoudre des problèmes, et aide les élèves quand ils ont du mal."
# Input fields
text_input = st.text_area("Texte", value=DEFAULT_TEXT.strip(), height=200)
question_input = st.text_input("Question", value=DEFAULT_QUESTION.strip())
student_answer_input = st.text_area("Réponse", value=DEFAULT_ANSWER.strip(), height=100)
if not os.getenv("GROQ_API_KEY"):
st.warning("Attention : GROQ_API_KEY non définie. L'évaluation pourrait échouer.")
if st.button("Évaluer"):
if not all([text_input, question_input, student_answer_input]):
st.error("Veuillez remplir tous les champs.")
else:
try:
st.info(f"Envoi à l'API Flask...")
payload = {
"text_input": text_input,
"question_input": question_input,
"student_answer_input": student_answer_input
}
headers = {"Content-Type": "application/json"}
response = requests.post(FLASK_API_URL, json=payload, headers=headers)
response.raise_for_status() # Raise an HTTPError for bad responses (4xx or 5xx)
result_data = response.json()
st.success("Réponse reçue.")
final_score = result_data.get('final_score')
feedback = result_data.get('feedback')
if final_score is not None or feedback:
st.subheader("Résultat")
st.write(f"**Score :** {final_score if final_score is not None else 'N/A'}")
st.write(f"**Commentaire :** {feedback if feedback else 'N/A'}")
st.json(result_data) # Display full JSON response for debugging/details
else:
st.warning("L'API n'a pas retourné de score ou de commentaire. Voir la réponse complète ci-dessous.")
st.json(result_data)
except requests.exceptions.ConnectionError as e:
st.error(f"Erreur de connexion à l'API Flask. Vérifiez que le serveur est lancé à {FLASK_API_URL}. Erreur : {e}")
except requests.exceptions.HTTPError as e:
st.error(f"Erreur HTTP de l'API : {e}. Réponse : {response.text}")
except json.JSONDecodeError:
st.error(f"Erreur JSON de l'API. Réponse non valide : {response.text}")
except Exception as e:
st.error(f"Erreur inattendue avec l'API : {e}")
st.exception(e) # Display full traceback in Streamlit