File size: 2,955 Bytes
17312e6
 
 
cb25963
17312e6
 
 
 
cb25963
 
17312e6
cb25963
 
 
 
 
 
17312e6
cb25963
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17312e6
cb25963
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
from google import genai
from google.genai import types
import os
from PIL import Image
import io
import base64

# Configuration de la page
st.set_page_config(page_title="Résolveur d'exercices")

# Configuration de l'API Gemini
GOOGLE_API_KEY = "AIzaSyC_zxN9IHjEAxIoshWPzMfgb9qwMsu5t5Y"
client = genai.Client(
    api_key=GOOGLE_API_KEY,
    http_options={'api_version': 'v1alpha'},
)

def main():
    st.title("Résolveur d'exercices")
    
    # Zone de téléchargement d'image
    uploaded_file = st.file_uploader("Téléchargez votre exercice", type=["png", "jpg", "jpeg"])
    
    if uploaded_file:
        # Affichage de l'image
        image = Image.open(uploaded_file)
        st.image(image, caption="Image téléchargée", use_column_width=True)
        
        # Bouton pour lancer l'analyse
        if st.button("Résoudre l'exercice"):
            # Conversion de l'image en base64
            buffered = io.BytesIO()
            image.save(buffered, format="PNG")
            img_str = base64.b64encode(buffered.getvalue()).decode()
            
            # Création de deux colonnes : une pour les pensées, une pour la réponse
            thoughts_col, answer_col = st.columns([1, 2])
            
            with thoughts_col:
                # Création d'un expander pour les pensées
                with st.expander("Pensées du modèle", expanded=True):
                    thoughts_placeholder = st.empty()
            
            with answer_col:
                # Placeholder pour la réponse
                answer_placeholder = st.empty()
            
            try:
                # Génération du contenu avec streaming
                response = client.models.generate_content_stream(
                    model="gemini-2.0-flash-thinking-exp-01-21",
                    config={'thinking_config': {'include_thoughts': True}},
                    contents=[
                        {'inline_data': {'mime_type': 'image/png', 'data': img_str}},
                        "Résous cet exercice. ça doit être bien présentable et espacé afin d'être facile à lire."
                    ]
                )
                
                # Variables pour accumuler le contenu
                thoughts = []
                answer = []
                
                # Traitement du stream
                for chunk in response:
                    for part in chunk.candidates[0].content.parts:
                        if part.thought:
                            thoughts.append(part.text)
                            thoughts_placeholder.markdown("\n\n".join(thoughts))
                        else:
                            answer.append(part.text)
                            answer_placeholder.markdown("\n\n".join(answer))
                
            except Exception as e:
                st.error(f"Une erreur s'est produite : {str(e)}")

if __name__ == "__main__":
    main()