Spaces:
Running
Running
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) | |
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 | |
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 | |
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 |