File size: 6,581 Bytes
6bbda80
 
a1445fb
f200cca
 
06d8ed2
9ee01a9
06d8ed2
4c30bf8
06d8ed2
 
f200cca
a1fe86e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5dfdbb0
6bbda80
06d8ed2
 
f200cca
 
 
 
06d8ed2
 
f200cca
06d8ed2
f200cca
 
06d8ed2
f200cca
 
06d8ed2
 
 
dd6e891
6bbda80
f200cca
 
2625f8a
 
dec9b7b
c8299f7
06d8ed2
 
39bd6c1
06d8ed2
4c30bf8
6bbda80
042bd35
6bbda80
 
 
 
 
 
 
 
 
f200cca
6bbda80
 
f200cca
 
6bbda80
f200cca
06d8ed2
f200cca
06d8ed2
 
f200cca
 
9ee01a9
 
6bbda80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9ee01a9
f200cca
6bbda80
 
f200cca
 
06d8ed2
f200cca
f551bd5
0b9a8bb
06d8ed2
f200cca
06d8ed2
f200cca
 
06d8ed2
 
 
 
 
 
 
 
 
 
7f4ea7d
bf8af7c
880c0f1
06d8ed2
 
 
 
6bbda80
 
06d8ed2
 
 
6bbda80
db586f1
 
06d8ed2
6bbda80
db586f1
06d8ed2
 
f200cca
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170


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, prompt]
        )
        
        # Extrait la réponse et retire les délimiteurs LaTeX
        answer = response.candidates[0].content.parts[1].text
        
        # Retire les délimiteurs ```latex au début et ``` à la fin
        if answer.startswith("```latex"):
            answer = answer[8:]  # Retire ```latex
        if answer.endswith("```"):
            answer = answer[:-3]  # Retire ```
            
        return answer.strip()  # Retire les espaces supplémentaires
        
    except Exception as e:
        st.error(f"Erreur lors de la génération de la réponse: {str(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()