File size: 5,497 Bytes
6bbda80 a1445fb f200cca 06d8ed2 9ee01a9 06d8ed2 4c30bf8 06d8ed2 f200cca 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 d60c22c 0b9a8bb 06d8ed2 f200cca 06d8ed2 f200cca 06d8ed2 7f4ea7d bf8af7c 880c0f1 06d8ed2 6bbda80 06d8ed2 6bbda80 06d8ed2 39bd6c1 06d8ed2 6bbda80 dec9b7b 6bbda80 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 |
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
# 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("Math/physique/chimie pdf test avec Export PDF")
# 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 LaTeX généré:")
st.text("Réponse !!")
# Convertit en PDF
with st.spinner("Conversion en PDF..."):
pdf_data = latex_to_pdf(latex_response)
if pdf_data:
# Crée un bouton de téléchargement
st.download_button(
label="Télécharger le PDF",
data=pdf_data,
file_name="reponse_mariam.pdf",
mime="application/pdf"
)
else:
st.warning("Veuillez entrer une question.")
if __name__ == "__main__":
main() |