File size: 7,163 Bytes
c08e5e6
3c91057
c08e5e6
 
 
 
 
 
 
 
fd9ba06
a5e159d
c08e5e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9102888
c08e5e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a5e159d
 
 
c08e5e6
 
a5e159d
c08e5e6
 
 
0b1cfd0
a5e159d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f271eae
 
a5e159d
 
c08e5e6
 
 
2f77729
c08e5e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bea5ac8
c08e5e6
 
2f77729
c08e5e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3c91057
c08e5e6
 
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
import streamlit as st
import google.generativeai as genai
import os
from PIL import Image

# Configuration de la page Streamlit
st.set_page_config(
    page_title="Analyse de Textes Dramatiques",
    page_icon="🎭",
    layout="wide"
)

# Styles CSS personnalisés
st.markdown("""
    <style>
    .main {
        padding: 2rem;
    }
    .stButton>button {
        width: 100%;
    }
    .reportview-container {
        background: #f0f2f6;
    }
    </style>
    """, unsafe_allow_html=True)

# Configuration de l'API Gemini
def setup_genai():
    token = os.environ.get("TOKEN")
    if not token:
        st.error("Token d'API non trouvé. Veuillez configurer la variable d'environnement TOKEN.")
        st.stop()
    
    genai.configure(api_key=token)
    return genai.GenerativeModel(
        model_name="gemini-2.0-flash",
        generation_config={
            "temperature": 1,
            "top_p": 0.95,
            "top_k": 64,
            "max_output_tokens": 8192,
        },
        safety_settings=[
            {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_NONE"},
            {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_NONE"},
            {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_NONE"},
            {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_NONE"},
        ]
    )

# Méthodologies
METHODOLOGIE = """
methodologie du sujet de type 1:

Pour répondre aux consignes du sujet de type 1, le candidat à l'épreuve d'Art Dramatique doit pouvoir organiser sa production en trois grandes parties autrement dit sous la forme d'une Introduction, un Développement et une Conclusion comme dans toutes les autres disciples. Ainsi, le sujet de type I sollicite chez le candidat ou encore l'apprenant les qualités d'imagination et de créativité.
[... reste de la méthodologie ...]
"""

MISE_EN_SCENE = """
methodologie du sujet de type 1:
Pour répondre aux consignes du sujet de type 1, le candidat à l'épreuve d'Art Dramatique doit pouvoir organiser sa production en trois grandes parties autrement dit sous la forme d'une Introduction, un Développement et une Conclusion comme dans toutes les autres disciples. Ainsi, le sujet de type I sollicite chez le candidat ou encore l'apprenant les qualités d'imagination et de créativité.
I°) l'Introduction:
Objectifs :
C'est la première partie d'un travail de rédaction, elle est toujours composée de cinq parties qui sont nécessaire pour son élaboration en Art Dramatique à savoir:
1°) La phrase introductive: Elle est souvent appelée Amorce ou phrase chapeau, elle débute l'introduction et se construit de plusieurs manières :
a°) En passant par la définition du concept du théâtre
b) En passant par la définition du thème dominant du texte
c) En passant un constat ou une observation
2°) La présentation du document(le texte): Il s'agit ici de relever le nom de l'auteur, le tire de la pièce de théâtre, la date de publication, la maison d'édition, l'Acte et la scène dans laquelle on a extrait le texte et le genre théâtral.
3°) Décliner le thème abordé dans le texte : Il s'agit simplement d'identifier ou de relever le thème mise exergue dans le texte..
4°) Faire un résumé succinct de l'histoire du texte : Il s'agit de dire de manière brève dequoi parle le texte. 
5°) l'Annonce du plan: l'annonce du plan est présenté en deux grandes parties d'abord l'analyse du documentaire (donc le texte) ensuite la rédaction de la mise en scène encore appelée écriture scénique.
II°) le Développement:
C'est la deuxième partie de notre travail de rédaction. Dans cette partie l'élève do t organiser son raisonnement. Le développement en Art Dramatique est composé de deux grandes parties comme indiqué dans l'annonce du plan à savoir:
1) l'Analyse documentaire : Dans cette partie l'apprenant doit rédiger deux petits paragraphes:
-la Présentation des personnages: Dans cette partie l'élève doit pouvoir présenter les personnages qui interviennent dans le texte leurs rôles, les rapports qu'ils en retiennent entre eux et leur psychologie.
NB: Après le premier paragraphe, il faut prévoir une transition avant d'entamer le ceuxième  paragraphe.
-Présentation scénographique: Dans cette partie il est question pour l'élève de présenter tous les éléments scénographiques à savoir les indications qui rendent compte de l'espace et du temps. Pour l'espace, il faut pouvoir situer le lieu de l'action et pour le temps il faut situer le moment où se déroule l'action.
NB: Il faudra prévoir une transition entre les deux grandes parties du développement.
III°) la Conclusion:
Dans cette dernière partie de la rédaction, il est question de répondre au thème traité dans le texte et ensuite d'ouvrir la réflexion à travers une référence ou une citation en rapport avec le sujet. 
"""

def generate_analysis(model, image, analysis_type):
    if analysis_type == "Sans mise en scène":
        prompt = f"traite moi ce devoir en respectant scrupuleusement la méthodologie suivante : {METHODOLOGIE}"
    else:
        prompt = f"traite moi ce devoir en respectant scrupuleusement la méthodologie suivante. Je le veux sous forme de paragraphe : {MISE_EN_SCENE}"
    
    try:
        response = model.generate_content([prompt, image])
        return response.text
    except Exception as e:
        st.error(f"Erreur lors de la génération : {str(e)}")
        return None

def main():
    # En-tête de l'application
    st.title("🎭 Analyse de Textes Dramatiques")
    st.write("Analysez vos textes dramatiques avec l'aide de l'IA")
    
    # Initialisation du modèle
    model = setup_genai()
    
    # Interface utilisateur
    col1, col2 = st.columns([1, 2])
    
    with col1:
        st.subheader("Configuration")
        uploaded_file = st.file_uploader("Téléchargez votre image", type=['png', 'jpg', 'jpeg'])
        analysis_type = st.radio(
            "Type d'analyse",
            ["devoir complet sans mise en scène", "Mise en scène uniquement"],
            help="Choisissez le type d'analyse que vous souhaitez effectuer"
        )
        
        if uploaded_file and st.button("Analyser", key="analyze_btn"):
            with st.spinner("Analyse en cours..."):
                image = Image.open(uploaded_file)
                result = generate_analysis(model, image, analysis_type)
                
                if result:
                    with col2:
                        st.subheader("Résultats de l'analyse")
                        st.markdown(result)
                        
                        # Option pour télécharger les résultats
                        st.download_button(
                            label="📥 Télécharger l'analyse",
                            data=result,
                            file_name="analyse_dramatique.txt",
                            mime="text/plain"
                        )
    
    # Pied de page
    st.markdown("---")
    st.markdown("Développé avec ❤️ pour les passionnés de théâtre")

if __name__ == "__main__":
    main()