Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -1,6 +1,5 @@
|
|
1 |
from flask import Flask, render_template, request, send_file, jsonify
|
2 |
from google import genai
|
3 |
-
from google.genai import types
|
4 |
from PIL import Image
|
5 |
import subprocess
|
6 |
import tempfile
|
@@ -11,7 +10,7 @@ import base64
|
|
11 |
|
12 |
app = Flask(__name__)
|
13 |
|
14 |
-
# ---
|
15 |
MODEL_SINGLE_GENERATION = "gemini-2.5-pro-exp-03-25" # Modèle avec "thinking" pour la génération complète
|
16 |
LATEX_MENTION = r"\vspace{1cm}\noindent\textit{Ce devoir a été généré par Mariam AI. \url{https://mariam-241.vercel.app}}"
|
17 |
|
@@ -79,44 +78,11 @@ def clean_latex(raw_latex_text):
|
|
79 |
|
80 |
return cleaned.strip() # Retourne le résultat nettoyé
|
81 |
|
82 |
-
def extract_content_from_response(response):
|
83 |
-
"""
|
84 |
-
Extrait le contenu LaTeX et le raisonnement (thought) de la réponse Gemini.
|
85 |
-
Prend également en compte les résultats d'exécution de code.
|
86 |
-
"""
|
87 |
-
latex_content_raw = None
|
88 |
-
thinking_content = []
|
89 |
-
code_execution_results = []
|
90 |
-
|
91 |
-
if response.candidates and response.candidates[0].content and response.candidates[0].content.parts:
|
92 |
-
for part in response.candidates[0].content.parts:
|
93 |
-
# Extraire le thinking
|
94 |
-
if getattr(part, 'thought', None):
|
95 |
-
thinking_content.append(part.text)
|
96 |
-
|
97 |
-
# Extraire le code et les résultats d'exécution
|
98 |
-
if getattr(part, 'executable_code', None):
|
99 |
-
thinking_content.append(f"Code généré:\n{part.executable_code.code}")
|
100 |
-
|
101 |
-
if getattr(part, 'code_execution_result', None):
|
102 |
-
code_execution_results.append(part.code_execution_result.output)
|
103 |
-
thinking_content.append(f"Résultat d'exécution:\n{part.code_execution_result.output}")
|
104 |
-
|
105 |
-
# Extraire le texte (contenu LaTeX)
|
106 |
-
if getattr(part, 'text', None) and not latex_content_raw:
|
107 |
-
latex_content_raw = part.text
|
108 |
-
|
109 |
-
# Combiner les éléments de thinking_content
|
110 |
-
thinking_content = "\n\n".join(thinking_content)
|
111 |
-
|
112 |
-
return latex_content_raw, thinking_content, code_execution_results
|
113 |
-
|
114 |
# --- Fonction Principale (API GenAI) ---
|
115 |
|
116 |
def generate_complete_latex(client, image_bytes):
|
117 |
"""
|
118 |
Génère une solution complète en LaTeX à partir de l'image en une seule étape.
|
119 |
-
Utilise l'exécution de code pour améliorer les réponses mathématiques.
|
120 |
"""
|
121 |
try:
|
122 |
# Convertir les bytes en image PIL
|
@@ -134,8 +100,7 @@ Agis en tant qu'expert en mathématiques et tuteur pédagogue. Ton objectif est
|
|
134 |
# TÂCHE PRINCIPALE
|
135 |
1. Analyse l'image pour comprendre parfaitement l'énoncé de l'exercice.
|
136 |
2. Résous l'exercice de manière rigoureuse, étape par étape.
|
137 |
-
3.
|
138 |
-
4. Rédige la solution complète directement en code LaTeX, en respectant **toutes** les spécifications ci-dessous.
|
139 |
|
140 |
# SPÉCIFICATIONS TECHNIQUES DU CODE LATEX
|
141 |
1. **Structure du Document:** Commence **strictement** par `\\documentclass{{article}}` et se termine **strictement** par `\\end{{document}}`.
|
@@ -153,11 +118,6 @@ Agis en tant qu'expert en mathématiques et tuteur pédagogue. Ton objectif est
|
|
153 |
5. **Mention Obligatoire:** Insère la ligne suivante **exactement** telle quelle, juste avant la ligne `\\end{{document}}`:
|
154 |
{LATEX_MENTION}
|
155 |
|
156 |
-
# UTILISATION DU CODE PYTHON
|
157 |
-
1. Utilise Python pour vérifier tes calculs, résoudre des équations complexes ou générer des visualisations.
|
158 |
-
2. Lorsque tu utilises l'exécution de code, assure-toi que les résultats sont correctement intégrés dans ta solution LaTeX.
|
159 |
-
3. N'affiche pas le code Python lui-même dans le document LaTeX final, utilise-le uniquement comme outil pour améliorer la qualité de ta correction.
|
160 |
-
|
161 |
# PROCESSUS INTERNE RECOMMANDÉ (Pour l'IA)
|
162 |
1. **Analyse Approfondie:** Décompose le problème en sous-étapes logiques.
|
163 |
2. **Résolution Étape par Étape:** Effectue la résolution mathématique complète en interne.
|
@@ -169,11 +129,23 @@ Agis en tant qu'expert en mathématiques et tuteur pédagogue. Ton objectif est
|
|
169 |
contents=[image, prompt],
|
170 |
config=genai.types.GenerateContentConfig(
|
171 |
temperature=0.3,
|
172 |
-
|
173 |
-
|
|
|
|
|
|
|
174 |
)
|
175 |
|
176 |
-
latex_content_raw
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
177 |
|
178 |
if latex_content_raw:
|
179 |
latex_content_cleaned = clean_latex(latex_content_raw)
|
|
|
1 |
from flask import Flask, render_template, request, send_file, jsonify
|
2 |
from google import genai
|
|
|
3 |
from PIL import Image
|
4 |
import subprocess
|
5 |
import tempfile
|
|
|
10 |
|
11 |
app = Flask(__name__)
|
12 |
|
13 |
+
# --- Convstantes ---
|
14 |
MODEL_SINGLE_GENERATION = "gemini-2.5-pro-exp-03-25" # Modèle avec "thinking" pour la génération complète
|
15 |
LATEX_MENTION = r"\vspace{1cm}\noindent\textit{Ce devoir a été généré par Mariam AI. \url{https://mariam-241.vercel.app}}"
|
16 |
|
|
|
78 |
|
79 |
return cleaned.strip() # Retourne le résultat nettoyé
|
80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
# --- Fonction Principale (API GenAI) ---
|
82 |
|
83 |
def generate_complete_latex(client, image_bytes):
|
84 |
"""
|
85 |
Génère une solution complète en LaTeX à partir de l'image en une seule étape.
|
|
|
86 |
"""
|
87 |
try:
|
88 |
# Convertir les bytes en image PIL
|
|
|
100 |
# TÂCHE PRINCIPALE
|
101 |
1. Analyse l'image pour comprendre parfaitement l'énoncé de l'exercice.
|
102 |
2. Résous l'exercice de manière rigoureuse, étape par étape.
|
103 |
+
3. Rédige la solution complète directement en code LaTeX, en respectant **toutes** les spécifications ci-dessous.
|
|
|
104 |
|
105 |
# SPÉCIFICATIONS TECHNIQUES DU CODE LATEX
|
106 |
1. **Structure du Document:** Commence **strictement** par `\\documentclass{{article}}` et se termine **strictement** par `\\end{{document}}`.
|
|
|
118 |
5. **Mention Obligatoire:** Insère la ligne suivante **exactement** telle quelle, juste avant la ligne `\\end{{document}}`:
|
119 |
{LATEX_MENTION}
|
120 |
|
|
|
|
|
|
|
|
|
|
|
121 |
# PROCESSUS INTERNE RECOMMANDÉ (Pour l'IA)
|
122 |
1. **Analyse Approfondie:** Décompose le problème en sous-étapes logiques.
|
123 |
2. **Résolution Étape par Étape:** Effectue la résolution mathématique complète en interne.
|
|
|
129 |
contents=[image, prompt],
|
130 |
config=genai.types.GenerateContentConfig(
|
131 |
temperature=0.3,
|
132 |
+
),
|
133 |
+
tools=[types.Tool(
|
134 |
+
code_execution=types.ToolCodeExecution
|
135 |
+
)]
|
136 |
+
|
137 |
)
|
138 |
|
139 |
+
latex_content_raw = None
|
140 |
+
thinking_content = None
|
141 |
+
|
142 |
+
# Extrait le contenu LaTeX et le raisonnement (thought)
|
143 |
+
if response.candidates and response.candidates[0].content and response.candidates[0].content.parts:
|
144 |
+
for part in response.candidates[0].content.parts:
|
145 |
+
if getattr(part, 'thought', None):
|
146 |
+
thinking_content = part.text
|
147 |
+
else:
|
148 |
+
latex_content_raw = part.text
|
149 |
|
150 |
if latex_content_raw:
|
151 |
latex_content_cleaned = clean_latex(latex_content_raw)
|