Docfile/mrap
0
1 2 3import streamlit as st4from google import genai5from PIL import Image6import io7import os8import google.auth9import subprocess10import tempfile11import shutil12 13 14 15pm = """ 16 17Introduction : 18Dans 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) ?19 20 21Développement : 22 23Pour 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).24 25Alinéa Pour l'auteur, (Explication détaillé de l'idée du mouvement)26 27Alinéa Plus loin,(Explication détaillé de l'idée du mouvement)28 29• 1 ligne30 31Au 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) ?32 33• 1 ligne34 35 36conclusion : 37Ce 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,38 39(Corroboration/Justification de la thèse de l'auteur).40 41D'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).42 43 44 45"""46 47 48 49# Authenrticate using the application default credentials50#credentials, project = google.auth.default()51gen = api_key=os.environ['GOOGLE_API_KEY']52# Initialize the Gemini client53client = genai.Client(api_key=gen)54 55def ensure_latex_packages():56 """Vérifie si les packages LaTeX nécessaires sont installés."""57 required_packages = ['amsmath', 'amssymb']58 59 try:60 # Vérifie si pdflatex est installé61 subprocess.run(['pdflatex', '--version'], capture_output=True, check=True)62 return True63 except subprocess.CalledProcessError:64 st.error("pdflatex n'est pas installé. Veuillez installer TeX Live ou MiKTeX.")65 return False66 except FileNotFoundError:67 st.error("pdflatex n'est pas trouvé. Veuillez installer TeX Live ou MiKTeX.")68 return False69 70def generate_latex_response(image_path, question):71 """Génère une réponse en format LaTeX depuis le modèle Gemini."""72 try:73 #print(question)74 print("Utiliser ")75 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"76 image_data = Image.open(image_path)77 response = client.models.generate_content(78 model="gemini-2.0-flash-thinking-exp",79 contents=[image_data, pm]80 )81 82 # Extrait la réponse et retire les délimiteurs LaTeX83 answer = response.candidates[0].content.parts[1].text84 85 # # Retire ```86 87 return answer # Retire les espaces supplémentaires88 89 except Exception as e:90 st.error(f"Erreur lors de la génération de la réponse: ")91 print(e)92 return None93def latex_to_pdf(latex_content):94 """Convertit le contenu LaTeX en PDF."""95 # Crée un dossier temporaire pour les fichiers LaTeX96 with tempfile.TemporaryDirectory() as temp_dir:97 # Chemin du fichier tex98 tex_file = os.path.join(temp_dir, "output.tex")99 100 # Écrit le contenu LaTeX dans le fichier101 with open(tex_file, "w", encoding="utf-8") as f:102 f.write(latex_content)103 104 try:105 # Exécute pdflatex deux fois pour assurer la bonne génération des références106 for _ in range(2):107 subprocess.run(108 ["pdflatex", "-interaction=nonstopmode", "output.tex"],109 cwd=temp_dir,110 capture_output=True,111 check=True112 )113 114 # Lit le fichier PDF généré115 pdf_file = os.path.join(temp_dir, "output.pdf")116 with open(pdf_file, "rb") as f:117 pdf_data = f.read()118 119 return pdf_data120 121 except subprocess.CalledProcessError as e:122 st.error(f"Erreur lors de la génération du PDF: {e}")123 st.code(e.output.decode())124 return None125 126# Application Streamlit127def main():128 st.title("...")129 130 # Vérifie si LaTeX est installé131 if not ensure_latex_packages():132 st.stop()133 134 uploaded_file = st.file_uploader("Choisissez une image...", type=["png", "jpg", "jpeg"])135 136 if uploaded_file is not None:137 with tempfile.NamedTemporaryFile(delete=False, suffix='.png') as tmp_file:138 tmp_file.write(uploaded_file.getvalue())139 temp_image_path = tmp_file.name140 # Affiche l'image téléchargée141 image = Image.open(temp_image_path)142 st.image(image, caption="Image téléchargée", use_container_width=True)143 144 # Obtient la question de l'utilisateur145 #question = st.text_input("Entrez votre question:")146 question= "yusuf"147 148 149 if st.button("Générer la réponse"):150 if question:151 with st.spinner("Génération de la réponse en cours..."):152 # Convertit l'image PIL en bytes pour l'API Gemini153 154 # Génère la réponse LaTeX155 latex_response = generate_latex_response(temp_image_path, question)156 157 # Affiche la réponse LaTeX158 st.markdown("### ~:")159 st.markdown(latex_response)160 161 # Convertit en PDF162 163 else:164 st.warning("Veuillez entrer une question.")165 166if __name__ == "__main__":167 main()