File size: 6,369 Bytes
6bbda80 a1445fb f200cca 06d8ed2 9ee01a9 06d8ed2 4c30bf8 06d8ed2 f200cca a1fe86e 4b5d8e1 a1fe86e 4b5d8e1 a1fe86e 5dfdbb0 6bbda80 06d8ed2 f200cca 06d8ed2 f200cca 06d8ed2 f200cca 06d8ed2 f200cca 06d8ed2 dd6e891 6bbda80 f200cca 2625f8a dec9b7b c8299f7 06d8ed2 51a40b1 06d8ed2 4c30bf8 6bbda80 042bd35 6bbda80 3e1eebb 6bbda80 3e1eebb 6bbda80 f200cca 51a40b1 2fd4d8a 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 064dbdf 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 |
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() |