HistoireGeo / app.py
Docfile's picture
Create app.py
13d9c52 verified
raw
history blame
6.53 kB
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