Spaces:
Build error
Build error
File size: 6,968 Bytes
51cbadd f388c93 6b10944 f388c93 76b11c3 f388c93 1382a57 f388c93 2ef19ee c2c3e4e 2ef19ee f388c93 51cbadd f388c93 51cbadd e79be93 51cbadd e79be93 dfa74b3 6b10944 2ece82c af4ea79 2ece82c 6b10944 d54a43a e79be93 51cbadd e79be93 51cbadd e79be93 415f13d e79be93 51cbadd 6b10944 51cbadd 6b10944 f388c93 2ef19ee 93f4a81 2ef19ee 5cc0492 2ef19ee 92b0794 af4ea79 92b0794 2ef19ee f388c93 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
from flask import Flask, render_template, request, jsonify, Response, stream_with_context
from google import genai
from google.genai import types
import os
from PIL import Image
import io
import base64
import json
app = Flask(__name__)
GOOGLE_API_KEY = os.environ.get("GEMINI_API_KEY")
client = genai.Client(
api_key=GOOGLE_API_KEY,
)
@app.route('/')
def index():
#return "La plateforme est en maintenance."
return render_template('index.html')
@app.route('/free')
def indexx():
return render_template('maj.html')
@app.route('/solve', methods=['POST'])
def solve():
try:
image_data = request.files['image'].read()
img = Image.open(io.BytesIO(image_data))
buffered = io.BytesIO()
img.save(buffered, format="PNG")
img_str = base64.b64encode(buffered.getvalue()).decode()
def generate():
mode = 'starting'
try:
response = client.models.generate_content_stream(
model="gemini-2.5-pro-exp-03-25",
contents=[
{'inline_data': {'mime_type': 'image/png', 'data': img_str}},
"""**Tâche :** Analyse l'image fournie et résous le problème ou réponds à la question qu'elle contient.
**Instructions :**
1. **Langue :** Rédige l'intégralité de ta réponse en français.
2. **Détail :** Fournis une solution ou une explication détaillée, étape par étape, pour assurer une compréhension complète.
3. **Format Mathématique :** Utilise la syntaxe LaTeX (par exemple, `$ ... $` pour les éléments en ligne, `$$ ... $$` pour toutes les équations, formules, variables et notations mathématiques ou scientifiques.
4. **Présentation :** Structure la réponse de manière claire et aérée. Utilise des sauts de ligne et une organisation logique pour une lisibilité optimale.
5. **Format de Sortie :** Ta réponse doit contenir **uniquement** le contenu de la solution/explication formatée comme demandé ci-dessus. N'inclus **strictement aucun** préambule de document LaTeX (comme `\\documentclass{...}`, `\\usepackage{...}`, `\\begin{document}`, etc.) ni la structure englobante `\\begin{document} ... \\end{document}`. La sortie doit être prête à être insérée directement dans un corps de document LaTeX existant.
**Contenu de l'Image :** [Le modèle utilisera l'image fournie ici comme contexte principal]
"""
]
)
#Resous cette exercice. ça doit être bien présentable et espacé. je veux un jolie rendu
for chunk in response:
for part in chunk.candidates[0].content.parts:
if part.thought:
if mode != "thinking":
yield f'data: {json.dumps({"mode": "thinking"})}\n\n'
mode = "thinking"
else:
if mode != "answering":
yield f'data: {json.dumps({"mode": "answering"})}\n\n'
mode = "answering"
yield f'data: {json.dumps({"content": part.text})}\n\n'
except Exception as e:
print(f"Error during generation: {e}")
yield f'data: {json.dumps({"error": str(e)})}\n\n'
return Response(
stream_with_context(generate()),
mimetype='text/event-stream',
headers={
'Cache-Control': 'no-cache',
'X-Accel-Buffering': 'no'
}
)
except Exception as e:
return jsonify({'error': str(e)}), 500
@app.route('/solved', methods=['POST'])
def solved():
try:
image_data = request.files['image'].read()
img = Image.open(io.BytesIO(image_data))
buffered = io.BytesIO()
img.save(buffered, format="PNG")
img_str = base64.b64encode(buffered.getvalue()).decode()
def generate():
mode = 'starting'
try:
response = client.models.generate_content_stream(
model="gemini-2.0-flash-thinking-exp-01-21",
contents=[
{'inline_data': {'mime_type': 'image/png', 'data': img_str}},
"""
**Tâche :** Analyse l'image fournie et résous le problème ou réponds à la question qu'elle contient.
**Instructions :**
1. **Langue :** Rédige l'intégralité de ta réponse en français.
2. **Détail :** Fournis une solution ou une explication détaillée, étape par étape, pour assurer une compréhension complète.
3. **Format Mathématique :** Utilise la syntaxe LaTeX (par exemple, `$ ... $` pour les éléments en ligne, `$$ ... $$` pour toutes les équations, formules, variables et notations mathématiques ou scientifiques.
4. **Présentation :** Structure la réponse de manière claire et aérée. Utilise des sauts de ligne et une organisation logique pour une lisibilité optimale.
5. **Format de Sortie :** Ta réponse doit contenir **uniquement** le contenu de la solution/explication formatée comme demandé ci-dessus. N'inclus **strictement aucun** préambule de document LaTeX (comme `\\documentclass{...}`, `\\usepackage{...}`, `\\begin{document}`, etc.) ni la structure englobante `\\begin{document} ... \\end{document}`. La sortie doit être prête à être insérée directement dans un corps de document LaTeX existant.
**Contenu de l'Image :** [Le modèle utilisera l'image fournie ici comme contexte principal]
"""
]
)
#Resous cette exercice. ça doit être bien présentable et espacé. je veux un jolie rendu
for chunk in response:
for part in chunk.candidates[0].content.parts:
if part.thought:
if mode != "thinking":
yield f'data: {json.dumps({"mode": "thinking"})}\n\n'
mode = "thinking"
else:
if mode != "answering":
yield f'data: {json.dumps({"mode": "answering"})}\n\n'
mode = "answering"
yield f'data: {json.dumps({"content": part.text})}\n\n'
except Exception as e:
print(f"Error during generation: {e}")
yield f'data: {json.dumps({"error": str(e)})}\n\n'
return Response(
stream_with_context(generate()),
mimetype='text/event-stream',
headers={
'Cache-Control': 'no-cache',
'X-Accel-Buffering': 'no'
}
)
except Exception as e:
return jsonify({'error': str(e)}), 500
if __name__ == '__main__':
app.run(debug=True) |