LaurentTRIPIED commited on
Commit
8ebfe88
·
verified ·
1 Parent(s): 49d94d0

Add 3 files

Browse files
Files changed (3) hide show
  1. README.md +7 -5
  2. index.html +492 -19
  3. prompts.txt +0 -0
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Cr By Pa Lt
3
- emoji: 🐢
4
- colorFrom: indigo
5
- colorTo: purple
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: cr-by-pa-lt
3
+ emoji: 🐳
4
+ colorFrom: gray
5
+ colorTo: yellow
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,492 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="fr">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Analyseur de Transcripts - Mistral AI</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
+ <style>
10
+ .file-upload {
11
+ position: relative;
12
+ overflow: hidden;
13
+ display: inline-block;
14
+ }
15
+ .file-upload-input {
16
+ position: absolute;
17
+ left: 0;
18
+ top: 0;
19
+ opacity: 0;
20
+ width: 100%;
21
+ height: 100%;
22
+ cursor: pointer;
23
+ }
24
+ .progress-bar {
25
+ transition: width 0.3s ease;
26
+ }
27
+ .result-container {
28
+ max-height: 0;
29
+ overflow: hidden;
30
+ transition: max-height 0.5s ease-out;
31
+ }
32
+ .result-container.show {
33
+ max-height: 1000px;
34
+ }
35
+ .wave {
36
+ animation: wave 1.5s infinite;
37
+ }
38
+ @keyframes wave {
39
+ 0%, 100% { transform: translateY(0); }
40
+ 50% { transform: translateY(-10px); }
41
+ }
42
+ </style>
43
+ </head>
44
+ <body class="bg-gray-50 min-h-screen">
45
+ <div class="container mx-auto px-4 py-8 max-w-4xl">
46
+ <!-- Header -->
47
+ <header class="text-center mb-12">
48
+ <h1 class="text-4xl font-bold text-indigo-700 mb-2">
49
+ <i class="fas fa-file-alt mr-2"></i>Transcript Analyzer
50
+ </h1>
51
+ <p class="text-gray-600">Transformez vos transcripts PDF en comptes-rendus intelligents avec Mistral AI</p>
52
+ </header>
53
+
54
+ <!-- Main Card -->
55
+ <div class="bg-white rounded-xl shadow-lg overflow-hidden">
56
+ <!-- Upload Section -->
57
+ <div class="p-6 border-b border-gray-200">
58
+ <h2 class="text-xl font-semibold text-gray-800 mb-4">
59
+ <i class="fas fa-cloud-upload-alt mr-2 text-indigo-500"></i>Importez votre transcript
60
+ </h2>
61
+
62
+ <div class="file-upload w-full">
63
+ <label class="flex flex-col items-center justify-center w-full h-32 border-2 border-dashed border-indigo-300 rounded-lg cursor-pointer bg-indigo-50 hover:bg-indigo-100 transition duration-200">
64
+ <div class="flex flex-col items-center justify-center pt-5 pb-6">
65
+ <i class="fas fa-file-pdf text-4xl text-indigo-500 mb-2"></i>
66
+ <p class="mb-2 text-sm text-gray-500">
67
+ <span class="font-semibold">Cliquez pour uploader</span> ou glissez-déposez votre PDF
68
+ </p>
69
+ <p class="text-xs text-gray-500">PDF uniquement (max. 5MB)</p>
70
+ </div>
71
+ <input id="fileInput" type="file" class="file-upload-input" accept=".pdf" />
72
+ </label>
73
+ </div>
74
+
75
+ <div id="fileNameDisplay" class="mt-2 text-sm text-gray-600 hidden">
76
+ <i class="fas fa-check-circle text-green-500 mr-1"></i>
77
+ <span id="fileName"></span>
78
+ <button id="removeFile" class="ml-2 text-red-500 hover:text-red-700">
79
+ <i class="fas fa-times"></i>
80
+ </button>
81
+ </div>
82
+ </div>
83
+
84
+ <!-- Configuration Section -->
85
+ <div class="p-6 border-b border-gray-200">
86
+ <h2 class="text-xl font-semibold text-gray-800 mb-4">
87
+ <i class="fas fa-cog mr-2 text-indigo-500"></i>Configuration du compte-rendu
88
+ </h2>
89
+
90
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
91
+ <!-- Longueur -->
92
+ <div>
93
+ <label class="block text-sm font-medium text-gray-700 mb-1">
94
+ <i class="fas fa-ruler mr-1"></i>Longueur
95
+ </label>
96
+ <div class="flex space-x-2">
97
+ <button class="length-btn flex-1 py-2 px-3 rounded-lg border border-gray-300 bg-white text-gray-700 hover:bg-indigo-50 hover:border-indigo-300 transition" data-value="short">
98
+ Court <span class="text-xs text-gray-500">(100 mots)</span>
99
+ </button>
100
+ <button class="length-btn flex-1 py-2 px-3 rounded-lg border border-gray-300 bg-white text-gray-700 hover:bg-indigo-50 hover:border-indigo-300 transition" data-value="medium">
101
+ Moyen <span class="text-xs text-gray-500">(250 mots)</span>
102
+ </button>
103
+ <button class="length-btn flex-1 py-2 px-3 rounded-lg border border-indigo-300 bg-indigo-100 text-indigo-700 font-medium" data-value="long">
104
+ Long <span class="text-xs text-indigo-500">(500 mots)</span>
105
+ </button>
106
+ </div>
107
+ </div>
108
+
109
+ <!-- Destinataire -->
110
+ <div>
111
+ <label class="block text-sm font-medium text-gray-700 mb-1">
112
+ <i class="fas fa-user-tie mr-1"></i>Destinataire
113
+ </label>
114
+ <select id="recipient" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-indigo-500 focus:border-indigo-500">
115
+ <option value="director">Directeur (niveau stratégique)</option>
116
+ <option value="technician">Technicien (détails techniques)</option>
117
+ <option value="partner">Partenaire (synthèse générale)</option>
118
+ </select>
119
+ </div>
120
+
121
+ <!-- Ton -->
122
+ <div>
123
+ <label class="block text-sm font-medium text-gray-700 mb-1">
124
+ <i class="fas fa-comment-dots mr-1"></i>Ton
125
+ </label>
126
+ <select id="tone" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-indigo-500 focus:border-indigo-500">
127
+ <option value="formal">Formel</option>
128
+ <option value="neutral">Neutre</option>
129
+ <option value="friendly">Convivial</option>
130
+ <option value="technical">Technique</option>
131
+ </select>
132
+ </div>
133
+
134
+ <!-- Style -->
135
+ <div>
136
+ <label class="block text-sm font-medium text-gray-700 mb-1">
137
+ <i class="fas fa-paint-brush mr-1"></i>Style
138
+ </label>
139
+ <select id="style" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-indigo-500 focus:border-indigo-500">
140
+ <option value="bullet">Liste à puces</option>
141
+ <option value="paragraph">Paragraphe</option>
142
+ <option value="executive">Synthèse exécutive</option>
143
+ <option value="detailed">Détaillé avec sections</option>
144
+ </select>
145
+ </div>
146
+ </div>
147
+ </div>
148
+
149
+ <!-- Mistral API Section -->
150
+ <div class="p-6">
151
+ <h2 class="text-xl font-semibold text-gray-800 mb-4">
152
+ <i class="fas fa-key mr-2 text-indigo-500"></i>Configuration Mistral AI
153
+ </h2>
154
+
155
+ <div class="space-y-4">
156
+ <div>
157
+ <label for="apiKey" class="block text-sm font-medium text-gray-700 mb-1">
158
+ Clé API Mistral
159
+ </label>
160
+ <div class="relative">
161
+ <input id="apiKey" type="password" placeholder="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxx" class="w-full px-3 py-2 border border-gray-300 rounded-lg pr-10 focus:ring-indigo-500 focus:border-indigo-500">
162
+ <button id="toggleApiKey" class="absolute right-3 top-2.5 text-gray-500 hover:text-gray-700">
163
+ <i class="fas fa-eye"></i>
164
+ </button>
165
+ </div>
166
+ <p class="mt-1 text-xs text-gray-500">Votre clé API n'est jamais envoyée à nos serveurs</p>
167
+ </div>
168
+
169
+ <div>
170
+ <label for="model" class="block text-sm font-medium text-gray-700 mb-1">
171
+ Modèle Mistral
172
+ </label>
173
+ <select id="model" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-indigo-500 focus:border-indigo-500">
174
+ <option value="mistral-tiny">Mistral-tiny (rapide)</option>
175
+ <option value="mistral-small" selected>Mistral-small (équilibré)</option>
176
+ <option value="mistral-medium">Mistral-medium (avancé)</option>
177
+ <option value="mistral-large">Mistral-large (meilleure qualité)</option>
178
+ </select>
179
+ </div>
180
+ </div>
181
+ </div>
182
+ </div>
183
+
184
+ <!-- Generate Button -->
185
+ <div class="mt-6 text-center">
186
+ <button id="generateBtn" class="px-8 py-3 bg-indigo-600 text-white font-medium rounded-lg hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 transition flex items-center mx-auto disabled:opacity-50 disabled:cursor-not-allowed" disabled>
187
+ <i class="fas fa-magic mr-2"></i> Générer le compte-rendu
188
+ </button>
189
+ </div>
190
+
191
+ <!-- Progress Bar (hidden by default) -->
192
+ <div id="progressContainer" class="mt-8 hidden">
193
+ <div class="flex justify-between mb-1">
194
+ <span class="text-sm font-medium text-indigo-700">Analyse en cours...</span>
195
+ <span id="progressPercent" class="text-sm font-medium text-indigo-700">0%</span>
196
+ </div>
197
+ <div class="w-full bg-gray-200 rounded-full h-2.5">
198
+ <div id="progressBar" class="progress-bar bg-indigo-600 h-2.5 rounded-full" style="width: 0%"></div>
199
+ </div>
200
+ <div class="text-center mt-4 text-indigo-600">
201
+ <i class="fas fa-circle-notch fa-spin mr-2"></i>
202
+ <span>Extraction du texte et analyse avec Mistral AI...</span>
203
+ </div>
204
+ </div>
205
+
206
+ <!-- Results Section (hidden by default) -->
207
+ <div id="resultContainer" class="result-container mt-8 bg-white rounded-xl shadow-lg overflow-hidden">
208
+ <div class="p-6 border-b border-gray-200">
209
+ <h2 class="text-xl font-semibold text-gray-800 mb-4">
210
+ <i class="fas fa-file-contract mr-2 text-indigo-500"></i>Compte-rendu généré
211
+ </h2>
212
+
213
+ <div class="flex justify-between items-center mb-4">
214
+ <div class="text-sm text-gray-500">
215
+ <span id="resultMeta" class="bg-indigo-100 text-indigo-800 px-2 py-1 rounded">Moyen • Directeur • Formel</span>
216
+ </div>
217
+ <div class="flex space-x-2">
218
+ <button id="copyBtn" class="px-3 py-1 bg-gray-100 text-gray-700 rounded hover:bg-gray-200 transition">
219
+ <i class="fas fa-copy mr-1"></i> Copier
220
+ </button>
221
+ <button id="downloadBtn" class="px-3 py-1 bg-gray-100 text-gray-700 rounded hover:bg-gray-200 transition">
222
+ <i class="fas fa-download mr-1"></i> Télécharger
223
+ </button>
224
+ </div>
225
+ </div>
226
+
227
+ <div id="resultContent" class="prose max-w-none p-4 border border-gray-200 rounded-lg bg-gray-50">
228
+ <!-- Le contenu généré sera inséré ici -->
229
+ </div>
230
+ </div>
231
+ </div>
232
+
233
+ <!-- Footer -->
234
+ <footer class="mt-12 text-center text-sm text-gray-500">
235
+ <p>© 2023 Transcript Analyzer - Utilise l'API Mistral AI pour générer des comptes-rendus intelligents</p>
236
+ </footer>
237
+ </div>
238
+
239
+ <script>
240
+ document.addEventListener('DOMContentLoaded', function() {
241
+ // Elements
242
+ const fileInput = document.getElementById('fileInput');
243
+ const fileNameDisplay = document.getElementById('fileNameDisplay');
244
+ const fileName = document.getElementById('fileName');
245
+ const removeFile = document.getElementById('removeFile');
246
+ const generateBtn = document.getElementById('generateBtn');
247
+ const progressContainer = document.getElementById('progressContainer');
248
+ const progressBar = document.getElementById('progressBar');
249
+ const progressPercent = document.getElementById('progressPercent');
250
+ const resultContainer = document.getElementById('resultContainer');
251
+ const resultContent = document.getElementById('resultContent');
252
+ const resultMeta = document.getElementById('resultMeta');
253
+ const copyBtn = document.getElementById('copyBtn');
254
+ const downloadBtn = document.getElementById('downloadBtn');
255
+ const lengthBtns = document.querySelectorAll('.length-btn');
256
+ const recipient = document.getElementById('recipient');
257
+ const tone = document.getElementById('tone');
258
+ const style = document.getElementById('style');
259
+ const apiKey = document.getElementById('apiKey');
260
+ const model = document.getElementById('model');
261
+ const toggleApiKey = document.getElementById('toggleApiKey');
262
+
263
+ // Variables
264
+ let selectedFile = null;
265
+ let selectedLength = 'long';
266
+
267
+ // Event Listeners
268
+ fileInput.addEventListener('change', handleFileSelect);
269
+ removeFile.addEventListener('click', removeSelectedFile);
270
+ generateBtn.addEventListener('click', generateReport);
271
+ copyBtn.addEventListener('click', copyToClipboard);
272
+ downloadBtn.addEventListener('click', downloadReport);
273
+ toggleApiKey.addEventListener('click', toggleApiKeyVisibility);
274
+
275
+ // Length buttons
276
+ lengthBtns.forEach(btn => {
277
+ btn.addEventListener('click', function() {
278
+ lengthBtns.forEach(b => {
279
+ b.classList.remove('border-indigo-300', 'bg-indigo-100', 'text-indigo-700', 'font-medium');
280
+ b.classList.add('border-gray-300', 'bg-white', 'text-gray-700');
281
+ });
282
+
283
+ this.classList.remove('border-gray-300', 'bg-white', 'text-gray-700');
284
+ this.classList.add('border-indigo-300', 'bg-indigo-100', 'text-indigo-700', 'font-medium');
285
+
286
+ selectedLength = this.dataset.value;
287
+ });
288
+ });
289
+
290
+ // Functions
291
+ function handleFileSelect(e) {
292
+ if (e.target.files.length > 0) {
293
+ selectedFile = e.target.files[0];
294
+
295
+ // Vérifier que c'est un PDF
296
+ if (selectedFile.type !== 'application/pdf') {
297
+ alert('Veuillez sélectionner un fichier PDF');
298
+ return;
299
+ }
300
+
301
+ // Vérifier la taille
302
+ if (selectedFile.size > 5 * 1024 * 1024) {
303
+ alert('Le fichier est trop volumineux (max 5MB)');
304
+ return;
305
+ }
306
+
307
+ fileName.textContent = selectedFile.name;
308
+ fileNameDisplay.classList.remove('hidden');
309
+ generateBtn.disabled = false;
310
+ }
311
+ }
312
+
313
+ function removeSelectedFile() {
314
+ fileInput.value = '';
315
+ selectedFile = null;
316
+ fileNameDisplay.classList.add('hidden');
317
+ generateBtn.disabled = true;
318
+ }
319
+
320
+ function toggleApiKeyVisibility() {
321
+ const type = apiKey.getAttribute('type') === 'password' ? 'text' : 'password';
322
+ apiKey.setAttribute('type', type);
323
+ toggleApiKey.innerHTML = type === 'password' ? '<i class="fas fa-eye"></i>' : '<i class="fas fa-eye-slash"></i>';
324
+ }
325
+
326
+ function generateReport() {
327
+ if (!selectedFile) return;
328
+ if (!apiKey.value.trim()) {
329
+ alert('Veuillez entrer votre clé API Mistral');
330
+ return;
331
+ }
332
+
333
+ // Afficher la progression
334
+ progressContainer.classList.remove('hidden');
335
+ resultContainer.classList.remove('show');
336
+
337
+ // Simuler la progression (dans une vraie app, vous utiliseriez des événements réels)
338
+ let progress = 0;
339
+ const interval = setInterval(() => {
340
+ progress += Math.random() * 10;
341
+ if (progress > 100) progress = 100;
342
+
343
+ progressBar.style.width = `${progress}%`;
344
+ progressPercent.textContent = `${Math.round(progress)}%`;
345
+
346
+ if (progress === 100) {
347
+ clearInterval(interval);
348
+ setTimeout(showResults, 500);
349
+ }
350
+ }, 300);
351
+ }
352
+
353
+ function showResults() {
354
+ progressContainer.classList.add('hidden');
355
+
356
+ // Mettre à jour les métadonnées
357
+ const lengthText = {
358
+ 'short': 'Court',
359
+ 'medium': 'Moyen',
360
+ 'long': 'Long'
361
+ }[selectedLength];
362
+
363
+ const recipientText = {
364
+ 'director': 'Directeur',
365
+ 'technician': 'Technicien',
366
+ 'partner': 'Partenaire'
367
+ }[recipient.value];
368
+
369
+ const toneText = {
370
+ 'formal': 'Formel',
371
+ 'neutral': 'Neutre',
372
+ 'friendly': 'Convivial',
373
+ 'technical': 'Technique'
374
+ }[tone.value];
375
+
376
+ resultMeta.textContent = `${lengthText} • ${recipientText} • ${toneText}`;
377
+
378
+ // Générer un exemple de contenu (dans une vraie app, vous utiliseriez l'API Mistral)
379
+ const exampleContent = generateExampleContent();
380
+ resultContent.innerHTML = exampleContent;
381
+
382
+ // Afficher les résultats
383
+ resultContainer.classList.add('show');
384
+ }
385
+
386
+ function generateExampleContent() {
387
+ // Ceci est un exemple - dans une vraie application, vous appelleriez l'API Mistral
388
+ const lengthMap = {
389
+ 'short': 3,
390
+ 'medium': 5,
391
+ 'long': 8
392
+ };
393
+
394
+ const recipientMap = {
395
+ 'director': 'stratégiques',
396
+ 'technician': 'techniques détaillées',
397
+ 'partner': 'générales'
398
+ };
399
+
400
+ const toneMap = {
401
+ 'formal': 'formel',
402
+ 'neutral': 'neutre',
403
+ 'friendly': 'convivial',
404
+ 'technical': 'technique'
405
+ };
406
+
407
+ const styleMap = {
408
+ 'bullet': 'bullet',
409
+ 'paragraph': 'paragraph',
410
+ 'executive': 'executive',
411
+ 'detailed': 'detailed'
412
+ };
413
+
414
+ let content = '';
415
+ const itemCount = lengthMap[selectedLength];
416
+
417
+ if (style.value === 'bullet') {
418
+ content = '<ul class="list-disc pl-5">';
419
+ for (let i = 1; i <= itemCount; i++) {
420
+ content += `<li class="mb-2">Point ${i} du compte-rendu avec des informations ${recipientMap[recipient.value]} dans un ton ${toneMap[tone.value]}</li>`;
421
+ }
422
+ content += '</ul>';
423
+ } else if (style.value === 'paragraph') {
424
+ content = '<div>';
425
+ for (let i = 1; i <= itemCount; i++) {
426
+ content += `<p class="mb-3">Paragraphe ${i} contenant une analyse ${recipientMap[recipient.value]} rédigée dans un style ${toneMap[tone.value]}. Ce texte représente le type de sortie que vous obtiendriez avec une véritable intégration de l'API Mistral AI.</p>`;
427
+ }
428
+ content += '</div>';
429
+ } else if (style.value === 'executive') {
430
+ content = `
431
+ <div>
432
+ <h3 class="font-bold text-lg mb-2">Synthèse exécutive</h3>
433
+ <p class="mb-4">Ce document présente une synthèse des points clés du transcript analysé, adaptée pour un public ${recipientMap[recipient.value]}.</p>
434
+
435
+ <h4 class="font-semibold mt-4 mb-2">Points clés :</h4>
436
+ <ul class="list-disc pl-5 mb-4">
437
+ ${Array.from({length: itemCount}, (_, i) =>
438
+ `<li class="mb-1">Point clé ${i+1} identifié dans l'analyse</li>`
439
+ ).join('')}
440
+ </ul>
441
+
442
+ <h4 class="font-semibold mt-4 mb-2">Recommandations :</h4>
443
+ <p>Basé sur l'analyse, voici les recommandations principales formulées dans un ton ${toneMap[tone.value]}.</p>
444
+ </div>
445
+ `;
446
+ } else { // detailed
447
+ content = `
448
+ <div>
449
+ <h3 class="font-bold text-lg mb-4">Compte-rendu détaillé</h3>
450
+
451
+ <h4 class="font-semibold border-b border-gray-200 pb-1 mb-3">1. Introduction</h4>
452
+ <p class="mb-4">Ce document présente une analyse détaillée du transcript, organisée en sections thématiques et adaptée pour ${recipientMap[recipient.value]}.</p>
453
+
454
+ ${Array.from({length: itemCount}, (_, i) => `
455
+ <h4 class="font-semibold border-b border-gray-200 pb-1 mb-3 mt-6">${i+2}. Section ${i+1}</h4>
456
+ <p class="mb-3">Contenu analytique détaillé relatif à la section ${i+1}, présenté avec un ton ${toneMap[tone.value]} et des éléments spécifiques pour ${recipientMap[recipient.value]}.</p>
457
+ ${i % 2 === 0 ? '<ul class="list-disc pl-5 mb-3"><li>Détail supplémentaire 1</li><li>Détail supplémentaire 2</li></ul>' : ''}
458
+ `).join('')}
459
+
460
+ <h4 class="font-semibold border-b border-gray-200 pb-1 mb-3 mt-6">${itemCount + 2}. Conclusion</h4>
461
+ <p>Synthèse finale et perspectives basées sur l'analyse complète.</p>
462
+ </div>
463
+ `;
464
+ }
465
+
466
+ return content;
467
+ }
468
+
469
+ function copyToClipboard() {
470
+ const range = document.createRange();
471
+ range.selectNode(resultContent);
472
+ window.getSelection().removeAllRanges();
473
+ window.getSelection().addRange(range);
474
+ document.execCommand('copy');
475
+ window.getSelection().removeAllRanges();
476
+
477
+ // Feedback visuel
478
+ const originalText = copyBtn.innerHTML;
479
+ copyBtn.innerHTML = '<i class="fas fa-check mr-1"></i> Copié!';
480
+ setTimeout(() => {
481
+ copyBtn.innerHTML = originalText;
482
+ }, 2000);
483
+ }
484
+
485
+ function downloadReport() {
486
+ // Dans une vraie application, vous généreriez un fichier téléchargeable
487
+ alert('Fonctionnalité de téléchargement à implémenter');
488
+ }
489
+ });
490
+ </script>
491
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=LaurentTRIPIED/cr-by-pa-lt" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
492
+ </html>
prompts.txt ADDED
File without changes