|
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() |
|
mode_area = st.empty() |
|
|
|
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 |
|
) |
|
|
|
full_response = "" |
|
|
|
for response in responses: |
|
for part in response.parts: |
|
if hasattr(part, 'thought') and part.thought: |
|
if mode != "thinking": |
|
mode_area.markdown("**Gemini réfléchit... 🤔**") |
|
mode = "thinking" |
|
elif hasattr(part, 'text'): |
|
if mode != "answering": |
|
mode_area.markdown("**Réponse de Gemini :**") |
|
mode = "answering" |
|
|
|
text_chunk = part.text or "" |
|
full_response += text_chunk |
|
response_area.markdown(full_response) |
|
|
|
mode_area.empty() |
|
st.success("Exercice résolu !") |
|
|
|
except Exception as e: |
|
print(f"Erreur lors de la génération: {e}") |
|
mode_area.empty() |
|
response_area.error(f"Erreur: {e}") |