from flask import Flask, request, render_template, jsonify import PIL.Image import google.generativeai as genai import os from tempfile import NamedTemporaryFile app = Flask(__name__) # Configuration de Gemini generation_config = { "temperature": 1, "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" }, ] GOOGLE_API_KEY = os.environ.get("TOKEN") genai.configure(api_key=GOOGLE_API_KEY) @app.route('/') def index(): return render_template('histoire.html') def rediger_section_histoire(theme, point, contexte_precedent=""): """Génère une section de dissertation d'histoire.""" prompt = f""" Rédige une section détaillée pour une dissertation d'histoire sur le thème "{theme}". Point à traiter: {point} Structure à suivre: 1. Phrase chapeau introduisant l'idée principale 2. Trois arguments développés: - Argument + Explication détaillée + Exemple historique précis - Utiliser des dates et des personnages historiques spécifiques 3. Phrase de transition vers le point suivant Format: - Utilise "## " pour le titre principal - Utilise "### " pour les sous-parties - Mets en **gras** les dates et personnages importants - Utilise des listes numérotées pour les arguments - Ajoute des citations historiques pertinentes avec ">" Contexte précédent de la dissertation: {contexte_precedent} """ model = genai.GenerativeModel('gemini-1.5-flash') chat = model.start_chat() response = chat.send_message(prompt) return response.text, chat.history def rediger_section_geographie(theme, point, contexte_precedent=""): """Génère une section de dissertation de géographie.""" prompt = f""" Rédige une section détaillée pour une dissertation de géographie sur le thème "{theme}". Point à traiter: {point} Structure à suivre: 1. Phrase chapeau présentant l'enjeu géographique 2. Trois aspects à développer: - Analyse spatiale + Exemple territorial concret + Données chiffrées - Utiliser des échelles d'analyse variées (locale, régionale, mondiale) 3. Phrase de transition Format: - Utilise "## " pour le titre principal - Utilise "### " pour les sous-parties - Mets en **gras** les concepts géographiques clés - Utilise des listes à puces pour les exemples territoriaux - Ajoute des données statistiques importantes dans des blocs "`" Contexte précédent de la dissertation: {contexte_precedent} """ model = genai.GenerativeModel('gemini-1.5-flash') chat = model.start_chat() response = chat.send_message(prompt) return response.text, chat.history def generer_introduction(sujet, type_sujet="histoire"): """Génère l'introduction de la dissertation.""" prompt = f""" Rédige une introduction structurée pour une dissertation de {type_sujet} sur le sujet: "{sujet}" Structure: 1. Accroche (définition ou contextualisation) 2. Problématique claire 3. Annonce du plan Format en Markdown avec paragraphes distincts. """ model = genai.GenerativeModel('gemini-1.5-flash') response = model.generate_content(prompt) return response.text def generer_conclusion(sujet, contenu, type_sujet="histoire"): """Génère la conclusion de la dissertation.""" prompt = f""" À partir de cette dissertation de {type_sujet} sur "{sujet}", rédige une conclusion qui: 1. Synthétise les points principaux 2. Répond à la problématique 3. Propose une ouverture pertinente Contenu de la dissertation: {contenu} """ model = genai.GenerativeModel('gemini-1.5-flash') response = model.generate_content(prompt) return response.text @app.route('/api/histoire', methods=['POST']) def submit_histoire(): # Récupération des données sujet = request.form.get('sujet-histoire', '').strip() points = [ request.form.get('point1-histoire', '').strip(), request.form.get('point2-histoire', '').strip(), request.form.get('point3-histoire', '').strip() ] if not sujet or not all(points): return jsonify({"error": "Tous les champs sont obligatoires"}), 400 try: # Génération de l'introduction dissertation = generer_introduction(sujet, "histoire") dissertation += "\n\n" # Génération du développement contexte = dissertation for point in points: section_texte, _ = rediger_section_histoire(sujet, point, contexte) dissertation += section_texte + "\n\n" contexte = dissertation # Génération de la conclusion dissertation += generer_conclusion(sujet, dissertation, "histoire") return jsonify({"output": dissertation}), 200 except Exception as e: return jsonify({"error": str(e)}), 500 @app.route('/api/geographie', methods=['POST']) def submit_geographie(): # Récupération des données sujet = request.form.get('sujet-geographie', '').strip() points = [ request.form.get('point1-geographie', '').strip(), request.form.get('point2-geographie', '').strip(), request.form.get('point3-geographie', '').strip() ] if not sujet or not all(points): return jsonify({"error": "Tous les champs sont obligatoires"}), 400 try: # Génération de l'introduction dissertation = generer_introduction(sujet, "géographie") dissertation += "\n\n" # Génération du développement contexte = dissertation for point in points: section_texte, _ = rediger_section_geographie(sujet, point, contexte) dissertation += section_texte + "\n\n" contexte = dissertation # Génération de la conclusion dissertation += generer_conclusion(sujet, dissertation, "géographie") return jsonify({"output": dissertation}), 200 except Exception as e: return jsonify({"error": str(e)}), 500