kuro223 commited on
Commit
f1f6d47
·
1 Parent(s): f1c1975
Files changed (2) hide show
  1. app.py +12 -13
  2. templates/index.html +26 -24
app.py CHANGED
@@ -154,19 +154,18 @@ def analyze():
154
  # Select prompt based on analysis type
155
  prompt = PROMPT_TEXT if analysis_type == 'text' else PROMPT_IMAGE
156
 
157
- # Generate content with streaming
158
- def generate():
159
- for chunk in client.models.generate_content_stream(
160
- model="gemini-flash-latest",
161
- contents=[prompt] + image_parts,
162
- config=types.GenerateContentConfig(
163
- thinking_config=types.ThinkingConfig(include_thoughts=True),
164
- safety_settings=safety_settings
165
- )
166
- ):
167
- for part in chunk.candidates[0].content.parts:
168
- if part.text:
169
- yield part.text
170
 
171
  return Response(generate(), mimetype='text/plain')
172
 
 
154
  # Select prompt based on analysis type
155
  prompt = PROMPT_TEXT if analysis_type == 'text' else PROMPT_IMAGE
156
 
157
+ # Generate content with streaming
158
+ def generate():
159
+ for chunk in client.models.generate_content_stream(
160
+ model="gemini-flash-latest",
161
+ contents=[prompt] + image_parts,
162
+ config=types.GenerateContentConfig(
163
+ safety_settings=safety_settings
164
+ )
165
+ ):
166
+ for part in chunk.candidates[0].content.parts:
167
+ if part.text:
168
+ yield part.text
 
169
 
170
  return Response(generate(), mimetype='text/plain')
171
 
templates/index.html CHANGED
@@ -314,25 +314,30 @@
314
  });
315
  };
316
 
317
- async function handleSubmit() {
318
- if (uploadedFiles.length === 0) {
319
- alert('Veuillez sélectionner au moins une image.');
320
- return;
321
- }
322
-
323
- const analysisType = document.querySelector('input[name="analysis_type"]:checked')?.value;
324
- if (!analysisType) {
325
- alert('Veuillez sélectionner un type d\'analyse.');
326
- return;
327
- }
328
-
329
- const formData = new FormData();
330
- formData.append('analysis_type', analysisType);
331
- uploadedFiles.forEach(file => formData.append('images', file));
332
-
333
- submitBtn.disabled = true;
334
- submitBtn.innerHTML = '<span class="animate-pulse">Analyse en cours...</span>';
335
-
 
 
 
 
 
336
  try {
337
  const response = await fetch('/analyze', {
338
  method: 'POST',
@@ -356,16 +361,13 @@
356
  let markdownContent = result.replace(/\n\n/g, '\n&nbsp;\n');
357
  analysisResult.innerHTML = marked.parse(markdownContent);
358
  }
359
-
360
- resultsSection.classList.remove('hidden');
361
- resultsSection.scrollIntoView({ behavior: 'smooth' });
362
  } catch (error) {
363
- alert('Erreur lors de l\'analyse: ' + error.message);
364
  } finally {
365
  submitBtn.disabled = false;
366
  submitBtn.innerHTML = '🚀 Soumettre';
367
  }
368
- }
369
 
370
  window.removeImage = removeImage;
371
  });
 
314
  });
315
  };
316
 
317
+ async function handleSubmit() {
318
+ if (uploadedFiles.length === 0) {
319
+ alert('Veuillez sélectionner au moins une image.');
320
+ return;
321
+ }
322
+
323
+ const analysisType = document.querySelector('input[name="analysis_type"]:checked')?.value;
324
+ if (!analysisType) {
325
+ alert('Veuillez sélectionner un type d\'analyse.');
326
+ return;
327
+ }
328
+
329
+ const formData = new FormData();
330
+ formData.append('analysis_type', analysisType);
331
+ uploadedFiles.forEach(file => formData.append('images', file));
332
+
333
+ submitBtn.disabled = true;
334
+ submitBtn.innerHTML = '<span class="animate-pulse">Analyse en cours...</span>';
335
+
336
+ // Show results section immediately with loading message
337
+ analysisResult.innerHTML = '<p class="text-gray-500 italic">Génération de l\'analyse en cours...</p>';
338
+ resultsSection.classList.remove('hidden');
339
+ resultsSection.scrollIntoView({ behavior: 'smooth' });
340
+
341
  try {
342
  const response = await fetch('/analyze', {
343
  method: 'POST',
 
361
  let markdownContent = result.replace(/\n\n/g, '\n&nbsp;\n');
362
  analysisResult.innerHTML = marked.parse(markdownContent);
363
  }
 
 
 
364
  } catch (error) {
365
+ analysisResult.innerHTML = '<p class="text-red-500">Erreur lors de l\'analyse: ' + error.message + '</p>';
366
  } finally {
367
  submitBtn.disabled = false;
368
  submitBtn.innerHTML = '🚀 Soumettre';
369
  }
370
+ }
371
 
372
  window.removeImage = removeImage;
373
  });