mrap / app.py
Docfile's picture
Update app.py
4b5d8e1 verified
import streamlit as st
from google import genai
from PIL import Image
import io
import os
import google.auth
import subprocess
import tempfile
import shutil
pm = """
Introduction :
Dans son extrait de texte, ………… (Nom de l'auteur) aborde la thématique relative à/au ………… (Thème du texte) ; et répond en substance à la question de savoir si ………… (Question implicite). Sans ambiguïté, il répond en ces termes : "…………" (Thèse de l'auteur). Entendons par là que ………… (Reformulation de la thèse). En effet, si pour l'auteur ………… (Idée de la thèse) ; cependant, ne devons-nous pas aussi/ne pouvons-nous pas aussi affirmer ou dire que ………… (Idée de la nuance) ?
Développement :
Pour mener à bien sa thèse, ………… (Nom de l'auteur) structure son argumentaire en deux principaux mouvements, à savoir : dans le premier « Premier mot (...) dernier mot », il traite de ………… (Idée du mouvement). Et dans le second « Premier mot (...) dernier mot », il parle de (Idée du mouvement).
Alinéa Pour l'auteur, (Explication détaillé de l'idée du mouvement)
Alinéa Plus loin,(Explication détaillé de l'idée du mouvement)
• 1 ligne
Au regard de ce qui précède, nous convenons avec l'auteur que………… (Idée de la thèse). Cependant, (Idée de la nuance prise dans l'introduction) ?
• 1 ligne
conclusion :
Ce texte de ………… (Nom de l'auteur) revêt un intérêt pédagogique dans la mesure où il nous enseigne que………… (Thèse de l'auteur). En effet,
(Corroboration/Justification de la thèse de l'auteur).
D'un autre auteur qui aborde le même problème dans le sens de l'auteur du texte) ne dit pas le contraire lorsqu'il affirme que : "…………". Ceci pour signifier que (Explication de la citation).
"""
# Authenrticate using the application default credentials
#credentials, project = google.auth.default()
gen = api_key=os.environ['GOOGLE_API_KEY']
# Initialize the Gemini client
client = genai.Client(api_key=gen)
def ensure_latex_packages():
"""Vérifie si les packages LaTeX nécessaires sont installés."""
required_packages = ['amsmath', 'amssymb']
try:
# Vérifie si pdflatex est installé
subprocess.run(['pdflatex', '--version'], capture_output=True, check=True)
return True
except subprocess.CalledProcessError:
st.error("pdflatex n'est pas installé. Veuillez installer TeX Live ou MiKTeX.")
return False
except FileNotFoundError:
st.error("pdflatex n'est pas trouvé. Veuillez installer TeX Live ou MiKTeX.")
return False
def generate_latex_response(image_path, question):
"""Génère une réponse en format LaTeX depuis le modèle Gemini."""
try:
#print(question)
print("Utiliser ")
prompt = "Resous cette exercice. ça doit être bien présentable. c'est un devoir de lycée terminal S. Write you answer with rendering Latex . Donne uniquement du code Latex et rien d'autre. Commence ta réponse par \document"
image_data = Image.open(image_path)
response = client.models.generate_content(
model="gemini-2.0-flash-thinking-exp",
contents=[image_data, pm]
)
# Extrait la réponse et retire les délimiteurs LaTeX
answer = response.candidates[0].content.parts[1].text
# # Retire ```
return answer # Retire les espaces supplémentaires
except Exception as e:
st.error(f"Erreur lors de la génération de la réponse: ")
print(e)
return None
def latex_to_pdf(latex_content):
"""Convertit le contenu LaTeX en PDF."""
# Crée un dossier temporaire pour les fichiers LaTeX
with tempfile.TemporaryDirectory() as temp_dir:
# Chemin du fichier tex
tex_file = os.path.join(temp_dir, "output.tex")
# Écrit le contenu LaTeX dans le fichier
with open(tex_file, "w", encoding="utf-8") as f:
f.write(latex_content)
try:
# Exécute pdflatex deux fois pour assurer la bonne génération des références
for _ in range(2):
subprocess.run(
["pdflatex", "-interaction=nonstopmode", "output.tex"],
cwd=temp_dir,
capture_output=True,
check=True
)
# Lit le fichier PDF généré
pdf_file = os.path.join(temp_dir, "output.pdf")
with open(pdf_file, "rb") as f:
pdf_data = f.read()
return pdf_data
except subprocess.CalledProcessError as e:
st.error(f"Erreur lors de la génération du PDF: {e}")
st.code(e.output.decode())
return None
# Application Streamlit
def main():
st.title("...")
# Vérifie si LaTeX est installé
if not ensure_latex_packages():
st.stop()
uploaded_file = st.file_uploader("Choisissez une image...", type=["png", "jpg", "jpeg"])
if uploaded_file is not None:
with tempfile.NamedTemporaryFile(delete=False, suffix='.png') as tmp_file:
tmp_file.write(uploaded_file.getvalue())
temp_image_path = tmp_file.name
# Affiche l'image téléchargée
image = Image.open(temp_image_path)
st.image(image, caption="Image téléchargée", use_container_width=True)
# Obtient la question de l'utilisateur
#question = st.text_input("Entrez votre question:")
question= "yusuf"
if st.button("Générer la réponse"):
if question:
with st.spinner("Génération de la réponse en cours..."):
# Convertit l'image PIL en bytes pour l'API Gemini
# Génère la réponse LaTeX
latex_response = generate_latex_response(temp_image_path, question)
# Affiche la réponse LaTeX
st.markdown("### ~:")
st.markdown(latex_response)
# Convertit en PDF
else:
st.warning("Veuillez entrer une question.")
if __name__ == "__main__":
main()