Mariamm1 / app.py
Docfile's picture
Update app.py
6186ef3 verified
raw
history blame
3.05 kB
import streamlit as st
import google.generativeai as genai
import os
from PIL import Image
import io
import base64
import json
GOOGLE_API_KEY = os.environ.get("GEMINI_API_KEY")
genai.configure(api_key=GOOGLE_API_KEY)
client = genai.GenerativeModel("gemini-2.0-flash-thinking-exp-01-21")
client.http_options = {'api_version': 'v1alpha'}
st.title("Résolution d'exercice avec Gemini")
uploaded_file = st.file_uploader("Télécharger une image de l'exercice", type=["png", "jpg", "jpeg"])
if uploaded_file is not None:
image_data = uploaded_file.read()
img = Image.open(io.BytesIO(image_data))
buffered = io.BytesIO()
img.save(buffered, format="PNG")
img_str = base64.b64encode(buffered.getvalue()).decode()
if st.button("Résoudre l'exercice"):
response_area = st.empty() # Placeholder pour la réponse
mode_area = st.empty() # Placeholder pour le mode (thinking/answering)
mode = 'starting'
try:
responses = client.generate_content(
model="gemini-2.0-flash-thinking-exp-01-21",
generation_config=genai.types.GenerationConfig(
include_thoughts=True
),
contents=[
{'inline_data': {'mime_type': 'image/png', 'data': img_str}},
"Résous cet exercice. ça doit être bien présenté et espacé afin d'être facile à lire."
],
stream=True # Activer le streaming
)
full_response = "" # Pour accumuler toute la réponse pour un affichage final propre
for response in responses:
for part in response.parts:
if hasattr(part, 'thought') and part.thought: # Vérifier si la partie a un attribut 'thought' et s'il est True
if mode != "thinking":
mode_area.markdown("**Gemini réfléchit... 🤔**") # Afficher "thinking" dans le placeholder
mode = "thinking"
elif hasattr(part, 'text'): # Vérifier si la partie a un attribut 'text' (pour la réponse)
if mode != "answering":
mode_area.markdown("**Réponse de Gemini :**") # Afficher "answering" dans le placeholder
mode = "answering"
text_chunk = part.text or "" # Gérer le cas où part.text pourrait être None
full_response += text_chunk
response_area.markdown(full_response) # Mettre à jour la réponse en continu
mode_area.empty() # Effacer le message "thinking/answering" une fois terminé
st.success("Exercice résolu !") # Message de succès
except Exception as e:
print(f"Erreur lors de la génération: {e}")
mode_area.empty() # Effacer les messages de mode en cas d'erreur
response_area.error(f"Erreur: {e}") # Afficher l'erreur dans le placeholder de réponse