Docfile commited on
Commit
b9d6da5
·
verified ·
1 Parent(s): 9154be4

Create ap.py

Browse files
Files changed (1) hide show
  1. ap.py +173 -0
ap.py ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, render_template, jsonify
2
+ import PIL.Image
3
+ from google import genai
4
+ from google.genai import types
5
+
6
+ import os
7
+ import tempfile
8
+ app = Flask(__name__)
9
+
10
+ # Configuration de Gemini
11
+ generation_config = {
12
+ "temperature": 1,
13
+ "max_output_tokens": 8192,
14
+ }
15
+
16
+ safety_settings = [
17
+ {
18
+ "category": "HARM_CATEGORY_HARASSMENT",
19
+ "threshold": "BLOCK_NONE"
20
+ },
21
+ {
22
+ "category": "HARM_CATEGORY_HATE_SPEECH",
23
+ "threshold": "BLOCK_NONE"
24
+ },
25
+ {
26
+ "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
27
+ "threshold": "BLOCK_NONE"
28
+ },
29
+ {
30
+ "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
31
+ "threshold": "BLOCK_NONE"
32
+ },
33
+ ]
34
+
35
+ GOOGLE_API_KEY=os.environ.get('TOKEN')
36
+
37
+ # Use `Client` with `v1alpha` to get `thought`
38
+ client = genai.Client(
39
+ api_key=GOOGLE_API_KEY,
40
+ http_options={'api_version':'v1alpha'},
41
+ )
42
+
43
+ @app.route('/', methods=['GET'])
44
+ def svt():
45
+ """Renders the SVT page."""
46
+ return render_template("svt.html")
47
+
48
+
49
+ methodologie_svt = {
50
+
51
+ "Restitution organisée des connaissances": """
52
+ **Restitution organisée des connaissances (ROC)**
53
+
54
+ **Objectif:** Exposer, dans un texte structuré, scientifiquement et grammaticalement correct, illustré si nécessaire, des connaissances sur un point du programme.
55
+
56
+ **Structure de la ROC:**
57
+
58
+ * **Introduction:**
59
+ * Contexte: Synthèse des savoirs (prérequis) nécessaires pour aborder le thème.
60
+ * Problème: Reformulation de la consigne sous forme interrogative, découlant logiquement du contexte.
61
+ * Plan: Annonce des parties du développement.
62
+ * **Développement:**
63
+ * Au moins deux paragraphes séparés par une ligne, débutant par un titre souligné.
64
+ * Titres: Reprise des parties annoncées dans le plan.
65
+ * Contenu: Solution du problème, articulation logique des paragraphes.
66
+ * Schéma: Si la consigne l'exige.
67
+ * **Conclusion:**
68
+ * Réponse logique au problème posé dans l'introduction.
69
+ * Intégration des aspects développés.
70
+ * Correspondance à la thématique de l'exercice.
71
+
72
+ **Conseils:**
73
+
74
+ * L'exercice ne comporte pas de documents.
75
+ * Le sujet comporte un thème, un contexte et une consigne.
76
+ * L'exercice est pondéré sur 7 à 8 points.
77
+ """,
78
+ "Exploitation du document": """
79
+
80
+
81
+ **Exploitation de documents (ED)**
82
+
83
+ **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.
84
+
85
+ **Structure de l'ED:**
86
+
87
+ * **Introduction** (écrite au brouillon) : Problème (reformulation de la consigne)
88
+ * **Pour chaque document :**
89
+ * **Présentation (CP1):** Type de document + titre (cf. titre).
90
+ * **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). détaille bien cette partie
91
+ * **Information saisie (CP3):** Conclusion partielle, fait à interpréter.
92
+ * **Mise en relation (CP4):** Interprétation de l'information saisie en utilisant les connaissances acquises, signification permettant la résolution du problème.
93
+ * **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.
94
+
95
+ **Conseils:**
96
+
97
+ * L'exercice comporte un thème, un contexte, une consigne, un ou deux documents, et une pondération (7-8 points).
98
+ * Le contexte établit le lien entre le thème et les documents.
99
+ * La consigne guide l'élève dans les différentes tâches.
100
+ * Les documents doivent comporter un titre et une source, être pertinents, lisibles, et suivre l'ordre chronologique de la résolution.
101
+ * Ne pas paraphraser, copier ou faire une description intégrale dans l'analyse (CP2).
102
+ * La tâche 4 (CP4) est spécifique à cet exercice.
103
+ * Mentionner le document traité (ex: Document 1).
104
+
105
+
106
+ réponse attendu uniquement en langue française.
107
+ """,
108
+ "Synthèse": """
109
+ **Élaboration d'une synthèse (ES)**
110
+
111
+ **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.
112
+
113
+ **Structure de l'ES:**
114
+
115
+ * **Introduction** (écrite au brouillon) : Problème (reformulation de la consigne)
116
+ * **Pour chaque document :**
117
+ * **Présentation (CP1):** Type de document + titre (cf. titre).
118
+ * **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).
119
+ * **Conclusion partielle (CP3):** Synthèse de l'analyse, élément de réponse au problème.
120
+ * **Conclusion générale (CP4):** Récapitulation des conclusions partielles, réponse à la consigne.
121
+
122
+ **Conseils:**
123
+
124
+ * L'exercice comporte un thème, un contexte, une consigne, deux ou trois documents, et une pondération (5 points).
125
+ * Le contexte établit le lien entre le thème et les documents.
126
+ * La consigne guide l'élève dans les différentes tâches.
127
+ * Les documents doivent comporter un titre et une source, être pertinents, lisibles, et suivre l'ordre chronologique de la résolution.
128
+ * Ne pas paraphraser, copier ou faire une description intégrale dans l'analyse (CP2).
129
+ * La tâche 3 (CP3) est spécifique à cet exercice.
130
+ * Mentionner le document traité (ex: Document 1).
131
+ * Toutes les informations nécessaires sont dans les documents.
132
+ """
133
+ }
134
+
135
+
136
+ @app.route('/svt_submit', methods=['POST'])
137
+ def svt_submit():
138
+ """Handles the submission of SVT exercises."""
139
+ option = request.form.get('option')
140
+ images = request.files.getlist('images')
141
+
142
+ 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:"]
143
+ temp_files = []
144
+
145
+ try:
146
+ for image in images:
147
+ if image:
148
+ with tempfile.NamedTemporaryFile(delete=False, suffix=os.path.splitext(image.filename)[1]) as temp_file:
149
+ image.save(temp_file.name)
150
+ temp_files.append(temp_file.name)
151
+ content.append(PIL.Image.open(temp_file.name))
152
+
153
+ # Use v1alpha to get 'thoughts'
154
+ response = client.models.generate_content(
155
+ model="gemini-2.0-flash-thinking-exp-01-21",
156
+ contents=content,
157
+ generation_config=generation_config,
158
+ safety_settings=safety_settings,
159
+ request_options={"timeout": 600}
160
+ )
161
+
162
+
163
+ return jsonify({"response": response.text, "thoughts": response.prompt_feedback})
164
+
165
+
166
+ except Exception as e:
167
+ return jsonify({"error": str(e)}), 500
168
+ finally:
169
+ for temp_file in temp_files:
170
+ try:
171
+ os.unlink(temp_file)
172
+ except Exception as e:
173
+ print(f"Error deleting temporary file {temp_file}: {e}")