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(""" """, 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-exp", 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()