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 de l'idée du mouvement) Alinéa Plus loin,(Explication 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("### Code généré:") st.text(latex_response) # Convertit en PDF else: st.warning("Veuillez entrer une question.") if __name__ == "__main__": main()