Docfile commited on
Commit
900721d
1 Parent(s): 9c3002d

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +149 -0
app.py ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, render_template, jsonify
2
+ import PIL.Image
3
+ import google.generativeai as genai
4
+ import os
5
+ from tempfile import NamedTemporaryFile
6
+
7
+ app = Flask(__name__)
8
+
9
+ # Configuration de Gemini
10
+ generation_config = {
11
+ "temperature": 1,
12
+ "max_output_tokens": 8192,
13
+ }
14
+
15
+ safety_settings = [
16
+ {
17
+ "category": "HARM_CATEGORY_HARASSMENT",
18
+ "threshold": "BLOCK_NONE"
19
+ },
20
+ {
21
+ "category": "HARM_CATEGORY_HATE_SPEECH",
22
+ "threshold": "BLOCK_NONE"
23
+ },
24
+ {
25
+ "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
26
+ "threshold": "BLOCK_NONE"
27
+ },
28
+ {
29
+ "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
30
+ "threshold": "BLOCK_NONE"
31
+ },
32
+ ]
33
+
34
+ GOOGLE_API_KEY = os.environ.get("TOKEN")
35
+
36
+ genai.configure(api_key=GOOGLE_API_KEY)
37
+
38
+
39
+ methodologie_svt = {
40
+ "Restitution organisée des connaissances": """
41
+ **Restitution organisée des connaissances (ROC)**
42
+
43
+ **Objectif:** Exposer, dans un texte structuré, scientifiquement et grammaticalement correct, illustré si nécessaire, des connaissances sur un point du programme.
44
+
45
+ **Structure de la ROC:**
46
+
47
+ * **Introduction:**
48
+ * Contexte: Synthèse des savoirs (prérequis) nécessaires pour aborder le thème.
49
+ * Problème: Reformulation de la consigne sous forme interrogative, découlant logiquement du contexte.
50
+ * Plan: Annonce des parties du développement.
51
+ * **Développement:**
52
+ * Au moins deux paragraphes séparés par une ligne, débutant par un titre souligné.
53
+ * Titres: Reprise des parties annoncées dans le plan.
54
+ * Contenu: Solution du problème, articulation logique des paragraphes.
55
+ * Schéma: Si la consigne l'exige.
56
+ * **Conclusion:**
57
+ * Réponse logique au problème posé dans l'introduction.
58
+ * Intégration des aspects développés.
59
+ * Correspondance à la thématique de l'exercice.
60
+
61
+ **Conseils:**
62
+
63
+ * L'exercice ne comporte pas de documents.
64
+ * Le sujet comporte un thème, un contexte et une consigne.
65
+ * L'exercice est pondéré sur 7 à 8 points.
66
+ """,
67
+ "Exploitation du document": """
68
+ **Exploitation de documents (ED)**
69
+
70
+ **Objectif:** Trouver le lien entre les informations présentées par un des documents et les connaissances d'un segment de connaissances (partie du programme) en vue de la résolution d'un problème scientifique.
71
+
72
+ **Structure de l'ED:**
73
+
74
+ * **Introduction** (peut être écrite au brouillon) : Problème (reformulation de la consigne)
75
+ * **Pour chaque document :**
76
+ * **Présentation (CP1):** Type de document + objet d'étude (cf. titre).
77
+ * **Analyse (CP2):** Description du fait expérimental (comparaison de courbes, résultats d'expérience) et/ou présentation du fait d'observation (changement de coloration, % de phénotypes).
78
+ * **Information saisie (CP3):** Conclusion partielle, fait à interpréter.
79
+ * **Mise en relation (CP4):** Interprétation de l'information saisie en utilisant les connaissances acquises, signification permettant la résolution du problème.
80
+ * **Synthèse des mises en relation (CP5)** : Lien pertinent et cohérent entre toutes les significations (mise en relation) des informations utiles pour résoudre le problème (répondre à la consigne). Cette partie est séparée du reste par deux lignes.
81
+
82
+ **Conseils:**
83
+
84
+ * L'exercice comporte un thème, un contexte, une consigne, un ou deux documents, et une pondération (7-8 points).
85
+ * Le contexte établit le lien entre le thème et les documents.
86
+ * La consigne guide l'élève dans les différentes tâches.
87
+ * Les documents doivent comporter un titre et une source, être pertinents, lisibles, et suivre l'ordre chronologique de la résolution.
88
+ * Ne pas paraphraser, copier ou faire une description intégrale dans l'analyse (CP2).
89
+ * La tâche 4 (CP4) est spécifique à cet exercice.
90
+ * Mentionner le document traité (ex: Document 1).
91
+ """,
92
+ "Synthèse": """
93
+ **Élaboration d'une synthèse (ES)**
94
+
95
+ **Objectif:** Dégager des informations pertinentes d'un ensemble de documents en vue de résoudre un problème scientifique. La résolution du problème ne fait pas appel directement aux connaissances du cours.
96
+
97
+ **Structure de l'ES:**
98
+
99
+ * **Introduction** (peut être écrite au brouillon) : Problème (reformulation de la consigne)
100
+ * **Pour chaque document :**
101
+ * **Présentation (CP1):** Type de document + objet d'étude (cf. titre).
102
+ * **Analyse (CP2):** Description du fait expérimental (comparaison de courbes, résultats d'expérience) et/ou présentation du fait d'observation (changement de coloration, % de phénotypes).
103
+ * **Conclusion partielle (CP3):** Synthèse de l'analyse, élément de réponse au problème.
104
+ * **Conclusion générale (CP4):** Récapitulation des conclusions partielles, réponse à la consigne.
105
+
106
+ **Conseils:**
107
+
108
+ * L'exercice comporte un thème, un contexte, une consigne, deux ou trois documents, et une pondération (5 points).
109
+ * Le contexte établit le lien entre le thème et les documents.
110
+ * La consigne guide l'élève dans les diff��rentes tâches.
111
+ * Les documents doivent comporter un titre et une source, être pertinents, lisibles, et suivre l'ordre chronologique de la résolution.
112
+ * Ne pas paraphraser, copier ou faire une description intégrale dans l'analyse (CP2).
113
+ * La tâche 3 (CP3) est spécifique à cet exercice.
114
+ * Mentionner le document traité (ex: Document 1).
115
+ * Toutes les informations nécessaires sont dans les documents.
116
+ """
117
+ }
118
+
119
+
120
+ @app.route('/svt_submit', methods=['POST'])
121
+ def svt_submit():
122
+ """Handles the submission of SVT exercises."""
123
+ option = request.form.get('option')
124
+ images = request.files.getlist('images')
125
+
126
+ content = [f"J'aimerais que tu traites entièrement cet exercice en respectant scrupuleusement la méthodologie d'SVT suivante :\n\n{methodologie_svt[option]}\n\nLe type d'exercice selon la méthodologie est : {option}. Voici les images de l'exercice:"]
127
+ temp_files = []
128
+
129
+ try:
130
+ for image in images:
131
+ if image:
132
+ with tempfile.NamedTemporaryFile(delete=False, suffix=os.path.splitext(image.filename)[1]) as temp_file:
133
+ image.save(temp_file.name)
134
+ temp_files.append(temp_file.name)
135
+ content.append(PIL.Image.open(temp_file.name))
136
+
137
+ model = genai.GenerativeModel(model_name="models/gemini-1.5-flash-002", safety_settings=safety_settings)
138
+ response = model.generate_content(content, request_options={"timeout": 600})
139
+
140
+ return jsonify({"response": response.text})
141
+
142
+ except Exception as e:
143
+ return jsonify({"error": str(e)}), 500
144
+ finally:
145
+ for temp_file in temp_files:
146
+ try:
147
+ os.unlink(temp_file)
148
+ except Exception as e:
149
+ print(f"Error deleting temporary file {temp_file}: {e}")