Docfile commited on
Commit
47d31f2
·
verified ·
1 Parent(s): ff53e18

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -23
app.py CHANGED
@@ -6,8 +6,9 @@ import tempfile
6
  import PIL.Image
7
  import time
8
  import ssl
9
- from urllib.parse import urlparse
10
  import requests
 
 
11
 
12
  app = Flask(__name__)
13
 
@@ -35,19 +36,19 @@ def upload_and_process_file(file_path):
35
  """Upload et traite un fichier avec l'API Gemini avec gestion des erreurs améliorée"""
36
  max_retries = 3
37
  retry_delay = 2 # secondes
38
-
39
  for attempt in range(max_retries):
40
  try:
41
  print(f"Tentative d'upload {attempt + 1}/{max_retries} pour {file_path}")
42
-
43
  # Vérification du fichier
44
  if not os.path.exists(file_path):
45
  raise FileNotFoundError(f"Le fichier {file_path} n'existe pas")
46
-
47
  file_size = os.path.getsize(file_path)
48
  if file_size == 0:
49
  raise ValueError(f"Le fichier {file_path} est vide")
50
-
51
  # Upload du fichier
52
  uploaded_file = genai.upload_file(path=file_path)
53
  print(f"Upload réussi: {uploaded_file.uri}")
@@ -55,18 +56,18 @@ def upload_and_process_file(file_path):
55
  # Attente du traitement
56
  timeout = 300 # 5 minutes
57
  start_time = time.time()
58
-
59
  while uploaded_file.state.name == "PROCESSING":
60
  if time.time() - start_time > timeout:
61
  raise TimeoutError("Timeout pendant le traitement du fichier")
62
-
63
  print(f"En attente du traitement... Temps écoulé: {int(time.time() - start_time)}s")
64
  time.sleep(10)
65
  uploaded_file = genai.get_file(uploaded_file.name)
66
 
67
  if uploaded_file.state.name == "FAILED":
68
  raise ValueError(f"Échec du traitement: {uploaded_file.state.name}")
69
-
70
  print(f"Traitement terminé avec succès: {uploaded_file.uri}")
71
  return uploaded_file
72
 
@@ -76,7 +77,7 @@ def upload_and_process_file(file_path):
76
  time.sleep(retry_delay * (attempt + 1))
77
  else:
78
  raise
79
-
80
  except Exception as e:
81
  print(f"Erreur lors de l'upload (tentative {attempt + 1}): {e}")
82
  if attempt < max_retries - 1:
@@ -84,7 +85,6 @@ def upload_and_process_file(file_path):
84
  else:
85
  raise
86
 
87
-
88
  def is_youtube_url(url):
89
  """Vérifie si l'URL est une URL YouTube"""
90
  parsed = urlparse(url)
@@ -101,23 +101,23 @@ def download_youtube_video(url):
101
  'no_warnings': True,
102
  'extract_flat': False
103
  }
104
-
105
  with yt_dlp.YoutubeDL(ydl_opts) as ydl:
106
  print(f"Téléchargement de la vidéo: {url}")
107
  info = ydl.extract_info(url, download=True)
108
  video_path = os.path.join(temp_dir, ydl.prepare_filename(info))
109
-
110
  if not os.path.exists(video_path):
111
  raise FileNotFoundError(f"La vidéo n'a pas été téléchargée correctement: {video_path}")
112
-
113
  # Copie vers un fichier temporaire permanent
114
  temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=os.path.splitext(video_path)[1])
115
  with open(video_path, 'rb') as f:
116
  temp_file.write(f.read())
117
-
118
  print(f"Vidéo téléchargée avec succès: {temp_file.name}")
119
  return temp_file.name
120
-
121
  except Exception as e:
122
  print(f"Erreur lors du téléchargement de la vidéo: {e}")
123
  return None
@@ -140,18 +140,17 @@ def allowed_file(filename):
140
  ALLOWED_EXTENSIONS = {'pdf', 'png', 'jpg', 'jpeg', 'gif', 'mp4', 'mov', 'avi'}
141
  return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
142
 
143
-
144
  @app.route('/submit', methods=['POST'])
145
  def submit_question():
146
  question = request.form.get('question')
147
  urls = request.form.getlist('urls')
148
  files = request.files.getlist('files')
149
- web_search = request.form.get('webSearch') == 'true' # Get the boolean value of the web search mode
150
 
151
  print("URLs reçues:", urls)
152
  content = [question]
153
  temp_files = []
154
-
155
  try:
156
  # Traitement des fichiers uploadés
157
  for file in files:
@@ -181,17 +180,19 @@ def submit_question():
181
  uploaded_file = upload_and_process_file(pdf_path)
182
  content.append(uploaded_file)
183
 
184
-
185
-
186
-
187
  # Génération de contenu avec Gemini
188
  model = genai.GenerativeModel(
189
  model_name="models/gemini-1.5-flash-002",
190
  safety_settings=safety_settings,
191
  system_instruction="Tu es un assistant intelligent. ton but est d'assister au mieux que tu peux. tu as été créé par Aenir et tu t'appelles Mariam."
192
  )
193
- if web_search:
194
- response = model.generate_content(contents=content, tools='google_search_retrieval', request_options={"timeout": 600})
 
 
 
 
 
195
  else:
196
  response = model.generate_content(content, request_options={"timeout": 600})
197
 
 
6
  import PIL.Image
7
  import time
8
  import ssl
 
9
  import requests
10
+ from urllib.parse import urlparse
11
+ import yt_dlp
12
 
13
  app = Flask(__name__)
14
 
 
36
  """Upload et traite un fichier avec l'API Gemini avec gestion des erreurs améliorée"""
37
  max_retries = 3
38
  retry_delay = 2 # secondes
39
+
40
  for attempt in range(max_retries):
41
  try:
42
  print(f"Tentative d'upload {attempt + 1}/{max_retries} pour {file_path}")
43
+
44
  # Vérification du fichier
45
  if not os.path.exists(file_path):
46
  raise FileNotFoundError(f"Le fichier {file_path} n'existe pas")
47
+
48
  file_size = os.path.getsize(file_path)
49
  if file_size == 0:
50
  raise ValueError(f"Le fichier {file_path} est vide")
51
+
52
  # Upload du fichier
53
  uploaded_file = genai.upload_file(path=file_path)
54
  print(f"Upload réussi: {uploaded_file.uri}")
 
56
  # Attente du traitement
57
  timeout = 300 # 5 minutes
58
  start_time = time.time()
59
+
60
  while uploaded_file.state.name == "PROCESSING":
61
  if time.time() - start_time > timeout:
62
  raise TimeoutError("Timeout pendant le traitement du fichier")
63
+
64
  print(f"En attente du traitement... Temps écoulé: {int(time.time() - start_time)}s")
65
  time.sleep(10)
66
  uploaded_file = genai.get_file(uploaded_file.name)
67
 
68
  if uploaded_file.state.name == "FAILED":
69
  raise ValueError(f"Échec du traitement: {uploaded_file.state.name}")
70
+
71
  print(f"Traitement terminé avec succès: {uploaded_file.uri}")
72
  return uploaded_file
73
 
 
77
  time.sleep(retry_delay * (attempt + 1))
78
  else:
79
  raise
80
+
81
  except Exception as e:
82
  print(f"Erreur lors de l'upload (tentative {attempt + 1}): {e}")
83
  if attempt < max_retries - 1:
 
85
  else:
86
  raise
87
 
 
88
  def is_youtube_url(url):
89
  """Vérifie si l'URL est une URL YouTube"""
90
  parsed = urlparse(url)
 
101
  'no_warnings': True,
102
  'extract_flat': False
103
  }
104
+
105
  with yt_dlp.YoutubeDL(ydl_opts) as ydl:
106
  print(f"Téléchargement de la vidéo: {url}")
107
  info = ydl.extract_info(url, download=True)
108
  video_path = os.path.join(temp_dir, ydl.prepare_filename(info))
109
+
110
  if not os.path.exists(video_path):
111
  raise FileNotFoundError(f"La vidéo n'a pas été téléchargée correctement: {video_path}")
112
+
113
  # Copie vers un fichier temporaire permanent
114
  temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=os.path.splitext(video_path)[1])
115
  with open(video_path, 'rb') as f:
116
  temp_file.write(f.read())
117
+
118
  print(f"Vidéo téléchargée avec succès: {temp_file.name}")
119
  return temp_file.name
120
+
121
  except Exception as e:
122
  print(f"Erreur lors du téléchargement de la vidéo: {e}")
123
  return None
 
140
  ALLOWED_EXTENSIONS = {'pdf', 'png', 'jpg', 'jpeg', 'gif', 'mp4', 'mov', 'avi'}
141
  return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
142
 
 
143
  @app.route('/submit', methods=['POST'])
144
  def submit_question():
145
  question = request.form.get('question')
146
  urls = request.form.getlist('urls')
147
  files = request.files.getlist('files')
148
+ use_web = request.form.get('use_web') == 'true' # Get web mode selection
149
 
150
  print("URLs reçues:", urls)
151
  content = [question]
152
  temp_files = []
153
+
154
  try:
155
  # Traitement des fichiers uploadés
156
  for file in files:
 
180
  uploaded_file = upload_and_process_file(pdf_path)
181
  content.append(uploaded_file)
182
 
 
 
 
183
  # Génération de contenu avec Gemini
184
  model = genai.GenerativeModel(
185
  model_name="models/gemini-1.5-flash-002",
186
  safety_settings=safety_settings,
187
  system_instruction="Tu es un assistant intelligent. ton but est d'assister au mieux que tu peux. tu as été créé par Aenir et tu t'appelles Mariam."
188
  )
189
+
190
+ # Use Google Search tool if web mode is selected
191
+ if use_web:
192
+ response = model.generate_content(
193
+ contents=question,
194
+ tools=[{"function_declarations": [{"name": "google_search", "description": "Tool to retrieve search results from Google Search.", "parameters": {"type": "object", "properties": {"query": {"type": "string", "description": "The query string to search for."}}, "required": ["query"]}}]}]
195
+ )
196
  else:
197
  response = model.generate_content(content, request_options={"timeout": 600})
198