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 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 | |
def index(): | |
return render_template('histoire.html') | |
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 | |
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 | |
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 | |
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 |