from flask import Flask, render_template, request, jsonify import google.generativeai as genai from google.generativeai import types import os from PIL import Image import io app = Flask(__name__) # Configuration de l'API Gemini token = os.environ.get("TOKEN") genai.configure(api_key=token) 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"}, ] # Choose the Gemini model model = genai.GenerativeModel( model_name="gemini-2.0-flash", generation_config=generation_config, safety_settings=safety_settings ) @app.route('/') def index(): return render_template('index.html') @app.route('/api/francais', methods=['POST']) def gpt_francais(): """Handles French questions.""" french_prompt = request.form.get('sujet', '').strip() choix = request.form.get('choix', '').strip() style = request.form.get('style', '').strip() if not french_prompt: return jsonify({"output": "Veuillez saisir un thème."}), 400 if choix == "discuter": prompt = f""" Je veux faire mon travail de français de niveau lycée sous la forme d'un travail argumentatif. La question du travail est la suivante : "{french_prompt}". Tu devras discuter ce thème. tu utiliseras la méthodologie suivante : # INTRODUCTION: - Approche par constat - Problématique - Annonce du plan # DÉVELOPPEMENT: - Introduction partielle (énonce la thèse) - Argument 1: * Explications * Illustration (exemple + explication) - Argument 2: * Explications * Illustration (exemple + explication) - Argument 3: * Explications * Illustration (exemple + explication) # phrase de Transiton vers la deuxieme partie : - Introduction partielle (énonce l'antithèse) - Argument 1: * Explications * Illustration (exemple + explication) - Argument 2: * Explications * Illustration (exemple + explication) - Argument 3: * Explications * Illustration (exemple + explication) #Conclusion * Bilan * Ouverture du sujet (sous forme de phrase interrogative ) Je veux que tu utilises un style d'écriture {style}.""" else: prompt = f"""Je veux faire mon travail de français de niveau lycé sous la forme d'un travail argumentatif. La question du travail est la suivante : "{french_prompt}". Tu devras {choix} ce thème. tu utiliseras la méthodologie suivante : # INTRODUCTION: - Approche par constat - Problématique - Annonce du plan # DÉVELOPPEMENT: - Phrase chapeau (énonce la thèse) - Argument 1: * Explications * Illustration (exemple + explication) - Argument 2: * Explications * Illustration (exemple + explication) - Argument 3: * Explications * Illustration (exemple + explication) #Conclusion * Bilan (thèse + arguments1 + arguments2+arguments3) * Ouverture du sujet ( sous forme de phrase interrogative ) Je veux que tu utilises un style d'écriture {style}.""" try: response = model.generate_content(prompt) return jsonify({"output": response.text}), 200 except Exception as e: return jsonify({"output": f"Erreur lors de la génération : {str(e)}"}), 500 @app.route('/api/etude-texte', methods=['POST']) def gpt_francais_cc(): """Handles text analysis for French with multiple images.""" if 'images' not in request.files: return jsonify({"output": "Aucune image n'a été téléchargée."}), 400 images = request.files.getlist('images') if not images: return jsonify({"output": "Aucune image selectionnée."}), 400 pre_prompt = "Traite entièrement devoir." # Préparer les images pour l'API Gemini contents = [pre_prompt] for image in images: try: # Lire l'image avec PIL img_bytes = image.read() img = Image.open(io.BytesIO(img_bytes)) # Convertir en format compatible avec Gemini # L'image PIL peut être directement utilisée avec l'API Gemini contents.append(img) except Exception as e: return jsonify({ "output": f"Erreur lors du traitement de l'image {image.filename}: {str(e)}" }), 500 try: # Générer le contenu avec toutes les images response = model.generate_content(contents) return jsonify({"output": response.text}), 200 except Exception as e: return jsonify({ "output": f"Erreur lors de l'analyse des images : {str(e)}" }), 500 if __name__ == '__main__': app.run(debug=True)