HistoireGeo / app.py
Docfile's picture
Update app.py
2ad2919 verified
raw
history blame
6.49 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)
def generer_histoire(sujet,points):
f = """
je souhaite faire mon travail d'histoire sous forme de dissertation. le thème {sujet} et les différents point a détaillé sont : {points}
Voici la méthodologie que tu devras scrupuleusement respecté pour la dissertation et assure toi d'intégrer les connecteur logique pour débuter les arguments Je veux un travail bien détaillé :
Introduction
Amorce
Problématique
Annonce du plan(les points )
Développement(il y a trois points et donc une partie pour chaque points )
1er partie
Phrase chapeau ( Avec annonce des deux arguments)
Argument 1+ explication+ exemple
Argument 2 + explication + exemple
Transition
2eme partie
Phrase chapeau ( Avec annonce des deux arguments)
Argument 1+ explication+ exemple
Argument 2 + explication + exemple
Transition
3eme partie
Phrase chapeau ( Avec annonce des deux arguments)
Argument 1+ explication+ exemple
Argument 2 + explication + exemple
Conclusion
"""
model = genai.GenerativeModel('gemini-exp-1206',generation_config=generation_config, safety_settings=safety_settings)
response = model.generate_content(prompt, request_options={"timeout": 600})
return response.text
@app.route('/')
def index():
return render_template('histoire.html')
@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('pointt1-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:
dissertation = generer_histoire(sujet,points)
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,points, "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
def analyze_images(images, prompt):
"""Analyse les images fournies et génère une réponse textuelle."""
model = genai.GenerativeModel('gemini-pro-vision')
response = model.generate_content(
[prompt, *images],
generation_config=generation_config,
safety_settings=safety_settings
)
return response.text
@app.route('/api/histoire-type2', methods=['POST'])
def submit_histoire_type2():
# Récupération des données
sujet = request.form.get('sujet-histoire-type2', '').strip()
if 'images-histoire-type2' not in request.files:
return jsonify({"error": "Aucune image n'a été envoyée."}), 400
files = request.files.getlist('images-histoire-type2')
if not sujet:
return jsonify({"error": "Le champ sujet est obligatoire"}), 400
images = []
for file in files:
if file.filename == '':
return jsonify({"error": "Un ou plusieurs fichiers n'ont pas de nom."}), 400
try:
img = PIL.Image.open(file)
images.append(img)
except Exception as e:
return jsonify({"error": f"Impossible de lire l'image : {file.filename}. Erreur : {str(e)}"}), 400
try:
# Prompt pour l'analyse d'images en histoire
prompt = f"""
Sujet: {sujet}
Tu es un assistant spécialisé en histoire. Analyse les images fournies en lien avec le sujet donné.
Structure de la réponse :
1. Description de chaque image.
2. Analyse du lien entre les images et le sujet.
3. Synthèse et informations pertinentes déduites des images.
"""
# Analyse des images et génération de la réponse
response_text = analyze_images(images, prompt)
return jsonify({"output": response_text}), 200
except Exception as e:
return jsonify({"error": str(e)}), 500
@app.route('/api/geographie-type2', methods=['POST'])
def submit_geographie_type2():
# Récupération des données
sujet = request.form.get('sujet-geographie-type2', '').strip()
if 'images-geographie-type2' not in request.files:
return jsonify({"error": "Aucune image n'a été envoyée."}), 400
files = request.files.getlist('images-geographie-type2')
if not sujet:
return jsonify({"error": "Le champ sujet est obligatoire"}), 400
images = []
for file in files:
if file.filename == '':
return jsonify({"error": "Un ou plusieurs fichiers n'ont pas de nom."}), 40