CoolFace
Apppublic

Docfile/mrap

sourceHugging Faceapache-2.0updated 2y agoView on Hugging Face
0likes
app.py167 linesDownload Raw Back to root
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()