-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
545 lines (526 loc) · 44.2 KB
/
Copy pathindex.html
File metadata and controls
545 lines (526 loc) · 44.2 KB
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<!-- ============================================================ -->
<!-- PRIMARY SEO META -->
<!-- ============================================================ -->
<title>PolyChat AI — Chat avec 100+ modèles d'IA (GPT, Claude, Gemini)</title>
<meta
name="description"
content="PolyChat AI : 100+ modèles d'IA (GPT-4, Claude, Gemini, Llama) dans une seule interface. Comparez jusqu'à 3 modèles en parallèle. Open source, gratuit, sans inscription."
/>
<meta
name="keywords"
content="PolyChat, PolyChat AI, chat IA, chat AI, multi-modèle IA, OpenRouter, GPT-4, Claude, Gemini, Llama, comparer modèles IA, AI chat interface, multi-model AI chat, open source AI chat"
/>
<meta name="author" content="Teeflo" />
<meta name="generator" content="Vite + React 19" />
<meta name="application-name" content="PolyChat AI" />
<!-- Robots: full crawl + indexing, no preview restriction -->
<meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
<meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large" />
<meta name="bingbot" content="index, follow" />
<!-- Canonical -->
<link rel="canonical" href="https://polychat-ai.vercel.app/" />
<!-- ============================================================ -->
<!-- OPEN GRAPH (Facebook, LinkedIn, Discord, Slack, iMessage…) -->
<!-- ============================================================ -->
<meta property="og:type" content="website" />
<meta property="og:site_name" content="PolyChat AI" />
<meta property="og:title" content="PolyChat AI — Chat avec 100+ modèles d'IA" />
<meta
property="og:description"
content="100+ modèles d'IA (GPT-4, Claude, Gemini, Llama) dans une seule interface. Comparez jusqu'à 3 modèles en parallèle. Open source et gratuit."
/>
<meta property="og:url" content="https://polychat-ai.vercel.app/" />
<meta property="og:image" content="https://polychat-ai.vercel.app/og-image.png" />
<meta property="og:image:secure_url" content="https://polychat-ai.vercel.app/og-image.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="PolyChat AI — interface de chat multi-modèles d'intelligence artificielle" />
<meta property="og:locale" content="fr_FR" />
<meta property="og:locale:alternate" content="en_US" />
<!-- ============================================================ -->
<!-- TWITTER / X CARDS -->
<!-- ============================================================ -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="PolyChat AI — Chat avec 100+ modèles d'IA" />
<meta
name="twitter:description"
content="100+ modèles d'IA (GPT-4, Claude, Gemini, Llama) dans une seule interface. Comparez 3 modèles en parallèle. Open source."
/>
<meta name="twitter:image" content="https://polychat-ai.vercel.app/og-image.png" />
<meta name="twitter:image:alt" content="PolyChat AI — interface de chat multi-modèles d'IA" />
<!-- ============================================================ -->
<!-- ICONS & PWA -->
<!-- ============================================================ -->
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<link rel="mask-icon" href="/favicon.svg" color="#7a1f1f" />
<link rel="manifest" href="/site.webmanifest" />
<meta name="theme-color" content="#0f1a23" media="(prefers-color-scheme: dark)" />
<meta name="theme-color" content="#f1ebdc" media="(prefers-color-scheme: light)" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="apple-mobile-web-app-title" content="PolyChat" />
<meta name="mobile-web-app-capable" content="yes" />
<meta name="format-detection" content="telephone=no" />
<meta name="color-scheme" content="dark light" />
<meta name="referrer" content="strict-origin-when-cross-origin" />
<meta http-equiv="x-dns-prefetch-control" content="on" />
<meta name="rating" content="general" />
<meta name="distribution" content="global" />
<meta name="HandheldFriendly" content="true" />
<!-- OpenRouter preconnect is injected at runtime by -->
<!-- services/openRouter.ts (injectOpenRouterPreconnect) once the -->
<!-- React tree mounts — every chat path uses the API anyway, so -->
<!-- paying the DNS/TLS handshake up front removes it from the -->
<!-- critical path of the first request. -->
<!-- ============================================================ -->
<!-- JSON-LD STRUCTURED DATA (Schema.org) -->
<!-- One @graph: SoftwareApplication + WebSite + Organization + FAQ -->
<!-- ============================================================ -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "SoftwareApplication",
"@id": "https://polychat-ai.vercel.app/#software",
"name": "PolyChat AI",
"alternateName": "PolyChat",
"applicationCategory": "CommunicationApplication",
"operatingSystem": "Web, Windows, macOS, Linux, iOS, Android",
"url": "https://polychat-ai.vercel.app/",
"description": "Interface open source qui agrège 100+ modèles d'IA (GPT-4, Claude, Gemini, Llama, Mistral) via OpenRouter, avec comparaison en parallèle de 3 modèles.",
"isAccessibleForFree": true,
"license": "https://opensource.org/licenses/MIT",
"datePublished": "2025-02-05",
"dateModified": "2026-06-04",
"author": { "@id": "https://polychat-ai.vercel.app/#author" },
"publisher": { "@id": "https://polychat-ai.vercel.app/#org" },
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "EUR",
"availability": "https://schema.org/InStock"
},
"featureList": [
"100+ modèles d'IA via OpenRouter",
"Comparaison de 3 modèles en parallèle",
"Streaming des réponses en temps réel",
"Historique local (localStorage)",
"Open source sous licence MIT"
],
"screenshot": "https://polychat-ai.vercel.app/og-image.png",
"codeRepository": "https://github.com/Teeflo/PolyChat-AI"
},
{
"@type": "WebSite",
"@id": "https://polychat-ai.vercel.app/#website",
"url": "https://polychat-ai.vercel.app/",
"name": "PolyChat AI",
"description": "Chat multi-modèles d'IA — GPT, Claude, Gemini dans une seule interface",
"inLanguage": ["fr", "en"],
"publisher": { "@id": "https://polychat-ai.vercel.app/#org" }
},
{
"@type": "Organization",
"@id": "https://polychat-ai.vercel.app/#org",
"name": "PolyChat AI",
"url": "https://polychat-ai.vercel.app/",
"logo": {
"@type": "ImageObject",
"url": "https://polychat-ai.vercel.app/logos/polychat-logo-concept1-horizontal.svg",
"width": 320,
"height": 80
},
"sameAs": ["https://github.com/Teeflo/PolyChat-AI"]
},
{
"@type": "Person",
"@id": "https://polychat-ai.vercel.app/#author",
"name": "Teeflo",
"url": "https://github.com/Teeflo"
},
{
"@type": "FAQPage",
"@id": "https://polychat-ai.vercel.app/#faq",
"inLanguage": "fr",
"dateModified": "2026-06-04",
"mainEntity": [
{
"@type": "Question",
"name": "Qu'est-ce que PolyChat AI ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "PolyChat AI est une interface web open source qui donne accès à plus de 100 modèles d'intelligence artificielle (GPT-4o, Claude 3.5, Gemini 1.5, Llama 3, Mistral) depuis une seule application, via l'API OpenRouter. L'historique reste dans votre navigateur. Code MIT sur GitHub."
}
},
{
"@type": "Question",
"name": "Comment démarrer avec PolyChat AI ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Trois étapes : (1) créez un compte gratuit sur openrouter.ai et générez une clé d'API ; (2) ouvrez polychat-ai.vercel.app et collez votre clé dans Paramètres (icône engrenage en haut à droite) ; (3) choisissez un modèle et envoyez votre premier message. Aucune installation requise."
}
},
{
"@type": "Question",
"name": "Faut-il créer un compte sur PolyChat AI ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Non. PolyChat AI ne propose ni inscription, ni compte, ni e-mail. Vous collez directement votre clé OpenRouter dans les paramètres. L'application reste anonyme ; rien n'est télémétré."
}
},
{
"@type": "Question",
"name": "Comment obtenir une clé d'API OpenRouter ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Sur openrouter.ai, créez un compte (e-mail ou OAuth Google/Discord/GitHub), ouvrez la page Keys, cliquez sur Create Key, copiez la valeur (commence par sk-or-) et collez-la dans les Paramètres de PolyChat AI. Ajoutez un crédit (≥ 5 $) pour les modèles payants."
}
},
{
"@type": "Question",
"name": "Sur quels appareils et navigateurs fonctionne PolyChat AI ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Tout navigateur moderne : Chrome 119+, Firefox 122+, Safari 17.4+, Edge 119+. Interface responsive (desktop, tablette, mobile). Installable en PWA (« Ajouter à l'écran d'accueil »)."
}
},
{
"@type": "Question",
"name": "Comment comparer plusieurs modèles en parallèle ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Dans la barre d'outils d'une conversation, cliquez sur le sélecteur de colonnes (1, 2 ou 3) pour afficher jusqu'à 3 fenêtres. Chaque fenêtre a son propre menu de modèle. Tant qu'aucun message n'a été envoyé, votre saisie se réplique dans les colonnes actives."
}
},
{
"@type": "Question",
"name": "Puis-je reprendre une conversation plus tard ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Oui. Les conversations sont sauvegardées automatiquement dans le localStorage après chaque message. Vous les retrouvez dans la barre latérale, regroupées par date (Aujourd'hui, Hier, date explicite). Cliquez sur un titre pour reprendre."
}
},
{
"@type": "Question",
"name": "Comment renommer ou supprimer une conversation ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Survolez une conversation dans la barre latérale : une icône crayon (renommer) et une icône corbeille (supprimer) apparaissent à droite. Le titre d'origine est généré depuis les 60 premiers caractères du premier message. La suppression est définitive après confirmation."
}
},
{
"@type": "Question",
"name": "Le streaming des réponses est-il pris en charge ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Oui. PolyChat AI utilise le streaming SSE d'OpenRouter : les tokens apparaissent mot par mot, avec un curseur clignotant. Vous pouvez interrompre avec le bouton Stop ; la réponse partielle est conservée et le bouton Régénérer devient disponible."
}
},
{
"@type": "Question",
"name": "Comment fonctionne la recherche dans la barre latérale ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Le champ de recherche en haut de la barre latérale filtre vos conversations en temps réel sur le titre (pas le contenu des messages, jamais indexé côté serveur). Effacez le champ pour revenir à la liste complète."
}
},
{
"@type": "Question",
"name": "Quels modèles d'IA sont disponibles ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Catalogue complet OpenRouter : 100+ modèles incluant OpenAI (GPT-4o, GPT-4 Turbo, o1, o3-mini), Anthropic (Claude 3.5 Sonnet, Claude 3 Opus, Claude 3 Haiku), Google (Gemini 1.5 Pro, Gemini 1.5 Flash, Gemma 2), Meta (Llama 3.1 405B, Llama 3.3 70B), Mistral, DeepSeek, Qwen, Cohere."
}
},
{
"@type": "Question",
"name": "Comment changer de modèle en cours de conversation ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Cliquez sur le sélecteur de modèle en haut d'une colonne. Le changement s'applique aux messages suivants ; les échanges précédents restent affichés (générés par l'ancien modèle, badge discret). Pour repartir à zéro, créez une nouvelle conversation."
}
},
{
"@type": "Question",
"name": "Que signifient température et jetons maximum ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "La température (0 à 2) contrôle la créativité : 0 = déterministe, 1 = équilibré, 2 = créatif. Le nombre maximal de jetons plafonne la longueur de la réponse (1024 ≈ 750 mots en français). Les deux réglages sont dans Paramètres."
}
},
{
"@type": "Question",
"name": "Qu'est-ce que le prompt système ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Une instruction envoyée au modèle avant chaque échange, invisible dans la conversation. Elle définit le ton ou les contraintes (ex. « Tu es un expert en cuisine française. Réponds de manière concise »). Définie une fois dans Paramètres."
}
},
{
"@type": "Question",
"name": "Mes conversations sont-elles privées ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Oui. L'historique est stocké exclusivement dans le localStorage de votre navigateur. Aucun serveur PolyChat AI ne reçoit vos messages. En revanche, vos messages transitent par OpenRouter puis par le fournisseur du modèle selon leurs propres politiques."
}
},
{
"@type": "Question",
"name": "Ma clé d'API est-elle sécurisée ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Votre clé OpenRouter est stockée localement et obfusquée (XOR + base64) avant écriture. Ce n'est pas un chiffrement fort : pour une sécurité maximale, utilisez une clé à crédits limités et révoquez-la sur openrouter.ai après usage intensif. Le code est public sur GitHub pour audit."
}
},
{
"@type": "Question",
"name": "Pourquoi ce bandeau de consentement au premier chargement ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "PolyChat AI applique le RGPD et les recommandations CNIL. Avant la première utilisation, vous acceptez les documents juridiques (mentions légales, confidentialité, CGU, cookies, avertissement IA). La version acceptée est horodatée. Retrait possible depuis la fenêtre Confidentialité."
}
},
{
"@type": "Question",
"name": "Les Google Fonts sont-ils obligatoires ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Non. Par défaut, l'application utilise les polices système, sans requête réseau. Si vous activez Google Fonts dans Confidentialité → Polices, les fontes Fraunces, IBM Plex Sans et JetBrains Mono sont chargées depuis Google LLC (transmission de votre IP). Le choix reste le vôtre."
}
},
{
"@type": "Question",
"name": "Où sont stockées mes conversations ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Conversations, paramètres, clé d'API et consentements sont stockés dans le localStorage, sous trois clés : polychat-settings, polychat_history, polychat-legal. Aucun cookie tiers, aucune analytics. Videz le localStorage pour repartir à zéro."
}
},
{
"@type": "Question",
"name": "Puis-je exporter mes données ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Oui. Ouvrez la fenêtre Confidentialité, puis « Exporter mes données ». Un fichier polychat-export-AAAA-MM-JJ.json est téléchargé : conversations, paramètres, clé obfusquée, consentements. À archiver ou migrer librement."
}
},
{
"@type": "Question",
"name": "Comment supprimer définitivement mes données ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Deux options. (1) Ciblée : barre latérale → corbeille sur la conversation. (2) Globale : Confidentialité → « Supprimer toutes mes données » → confirmer. Toutes les clés localStorage sont effacées ; la page se recharge ; les consentements sont redemandés. Action irréversible."
}
},
{
"@type": "Question",
"name": "Que se passe-t-il si je vide le cache du navigateur ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Vider le cache (images, fichiers) n'efface pas le localStorage. Vider les « données de site » efface le localStorage, donc vos conversations, paramètres et consentements. Pensez à exporter au préalable. Un mode navigation privée est recommandé pour une session jetable."
}
},
{
"@type": "Question",
"name": "Quelle est la différence avec ChatGPT ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "ChatGPT (OpenAI) ne donne accès qu'aux modèles OpenAI, dans une interface unique avec abonnement mensuel (ChatGPT Plus à 23 $/mois). PolyChat AI est libre (MIT) et agrège 100+ modèles de tous les fournisseurs en paiement à l'usage réel via OpenRouter, avec comparaison en parallèle."
}
},
{
"@type": "Question",
"name": "Pourquoi passer par OpenRouter ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "OpenRouter est une passerelle unifiée qui facture à l'usage réel, sans abonnement : un seul format d'appel, une seule facturation, un seul tableau de bord pour 100+ fournisseurs. Vous gérez vos crédits et basculez d'un modèle à l'autre sans changer d'interface."
}
},
{
"@type": "Question",
"name": "Et face à claude.ai ou gemini.google.com ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Les interfaces officielles ne donnent accès qu'à un fournisseur à la fois et conservent vos conversations sur leurs serveurs. PolyChat AI mutualise tous ces fournisseurs derrière une seule URL, garde l'historique en local et permet la comparaison côte à côte. Vous payez à l'usage réel."
}
},
{
"@type": "Question",
"name": "Pourquoi ma requête échoue-t-elle ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Causes fréquentes : (1) clé d'API absente, expirée ou invalide — vérifiez dans Paramètres ; (2) crédit OpenRouter épuisé — rechargez sur openrouter.ai ; (3) modèle indisponible ou rate-limit — réessayez ou changez de modèle ; (4) bloqueur publicitaire ou VPN restrictif — désactivez-le pour openrouter.ai."
}
},
{
"@type": "Question",
"name": "Quelles technologies sont utilisées ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "React 19, TypeScript strict, Vite 7, Zustand (persistance localStorage), react-markdown + remark-gfm pour le rendu Markdown, lucide-react pour les icônes, et un CSS écrit à la main avec variables de thème. Aucune dépendance Tailwind ni framework UI externe. Bundle < 200 Ko gzippé."
}
},
{
"@type": "Question",
"name": "Puis-je installer PolyChat AI comme une application ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Oui, comme PWA. Sur Chrome ou Edge, icône « installer » à droite de la barre d'adresse. Sur Safari macOS, Fichier → Ajouter au Dock. Sur iOS/Android, « Ajouter à l'écran d'accueil ». L'application se lance en mode standalone, sans barre d'adresse."
}
},
{
"@type": "Question",
"name": "Comment signaler un bug ou proposer une fonctionnalité ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Ouvrez un ticket sur le dépôt GitHub github.com/Teeflo/PolyChat-AI dans la section Issues. Pour un bug : étapes de reproduction, navigateur, modèle, capture d'écran. Pour une fonctionnalité : besoin, API envisagée, bénéfice utilisateur. Les pull requests sont les bienvenues."
}
},
{
"@type": "Question",
"name": "Puis-je contribuer au projet ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Oui, c'est un projet open source : signaler un bug, proposer une fonctionnalité, améliorer la documentation, traduire l'interface (français ↔ anglais), soumettre une pull request. Toute contribution est créditée dans CONTRIBUTORS.md et le CHANGELOG."
}
},
{
"@type": "Question",
"name": "Sous quelle licence le code est-il publié ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Licence MIT. Vous êtes libre de l'utiliser, le copier, le modifier, le fusionner, le publier, le distribuer, le sous-licencier et/ou le vendre, à condition de conserver la notice de copyright. La MIT est permissive et compatible avec la plupart des licences open source."
}
},
{
"@type": "Question",
"name": "Comment suivre les évolutions du produit ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Versions publiées sur la page Releases de GitHub (SemVer). CHANGELOG.md détaille les changements. La version juridique courante est affichée en bas des documents légaux. Quand un changement substantiel modifie vos droits, CURRENT_LEGAL_VERSION est bumpée et le bandeau de consentement réapparaît."
}
}
]
}
]
}
</script>
<!-- ============================================================ -->
<!-- Theme-flash prevention (DO NOT REMOVE — see AGENTS.md) -->
<!-- Reads polychat-settings before paint to avoid theme flicker -->
<!-- ============================================================ -->
<script>
try {
const stored = JSON.parse(localStorage.getItem('polychat-settings') || '{}');
const theme = stored?.state?.theme || 'dark';
document.documentElement.setAttribute('data-theme', theme);
const legal = JSON.parse(localStorage.getItem('polychat-legal') || '{}');
const fontsConsent = legal?.state?.fontsConsent === true;
document.documentElement.setAttribute('data-fonts', fontsConsent ? 'web' : 'system');
} catch (e) {
document.documentElement.setAttribute('data-theme', 'dark');
document.documentElement.setAttribute('data-fonts', 'system');
}
</script>
</head>
<body>
<div id="root">
<!-- ============================================================ -->
<!-- SEO / GEO fallback content for crawlers and AI bots -->
<!-- (Rendered before React hydrates, replaced after JS loads) -->
<!-- ============================================================ -->
<noscript>
<style>
.polychat-fallback{font-family:Georgia,'Times New Roman',serif;max-width:720px;margin:3rem auto;padding:0 1.5rem;color:#14110d;background:#f1ebdc;line-height:1.6}
.polychat-fallback h1{font-size:2.25rem;margin:0 0 .5rem;letter-spacing:-.02em}
.polychat-fallback h2{font-size:1.5rem;margin:2rem 0 .5rem;border-bottom:1px solid rgba(20,17,13,.15);padding-bottom:.25rem}
.polychat-fallback h3{font-size:1.15rem;margin:1.5rem 0 .5rem}
.polychat-fallback p{margin:.5rem 0}
.polychat-fallback ul{padding-left:1.25rem}
.polychat-fallback a{color:#7a1f1f}
.polychat-fallback details{margin:.5rem 0;border:1px solid rgba(20,17,13,.12);border-radius:6px;padding:.5rem .75rem;background:rgba(255,255,255,.4)}
.polychat-fallback summary{cursor:pointer;font-weight:600;outline:none}
.polychat-fallback summary:focus{outline:2px solid #7a1f1f;outline-offset:2px}
.polychat-fallback details[open] summary{margin-bottom:.5rem}
.polychat-fallback .tag{display:inline-block;font-size:.75rem;color:#7a1f1f;border:1px solid currentColor;border-radius:999px;padding:0 .4rem;margin-left:.5rem;vertical-align:middle;font-weight:500}
</style>
<main class="polychat-fallback">
<h1>PolyChat AI — Chat avec 100+ modèles d'IA</h1>
<p>
<strong>PolyChat AI</strong> est une interface web open source qui rassemble
<strong>plus de 100 modèles d'intelligence artificielle</strong> — GPT-4, Claude 3.5,
Gemini 1.5, Llama 3, Mistral — dans une seule application, via l'API
<a href="https://openrouter.ai">OpenRouter</a>. Comparez jusqu'à
<strong>3 modèles en parallèle</strong> sur la même question, en streaming temps réel.
</p>
<p>
L'interface de chat nécessite JavaScript. La FAQ ci-dessous reste consultable et
entièrement fonctionnelle sans JavaScript. Vous pouvez aussi consulter le code source
sur <a href="https://github.com/Teeflo/PolyChat-AI">GitHub</a>.
</p>
<h2>Fonctionnalités principales</h2>
<ul>
<li>Accès à 100+ modèles d'IA (OpenAI, Anthropic, Google, Meta, Mistral, DeepSeek)</li>
<li>Comparaison de 3 modèles en parallèle dans une seule session</li>
<li>Streaming des réponses en temps réel</li>
<li>4 thèmes visuels : sombre, clair, pixel art, hacker</li>
<li>Historique 100 % local (localStorage), aucun serveur tiers</li>
<li>Open source, licence MIT, gratuit</li>
</ul>
<h2>Questions fréquentes (FAQ — 30 réponses)</h2>
<h3>Premiers pas</h3>
<details><summary>Qu'est-ce que PolyChat AI ?</summary><p>Une interface web open source qui donne accès à plus de 100 modèles d'intelligence artificielle — GPT-4o, Claude 3.5, Gemini 1.5, Llama 3, Mistral — depuis une seule application. L'application, construite avec React 19 et TypeScript, communique avec les modèles via l'API OpenRouter et stocke vos conversations localement dans votre navigateur. Le code est publié sous licence MIT sur GitHub.</p></details>
<details><summary>Comment démarrer avec PolyChat AI ?</summary><p>Trois étapes suffisent : (1) créez un compte gratuit sur openrouter.ai et générez une clé d'API ; (2) ouvrez polychat-ai.vercel.app et collez votre clé dans la fenêtre Paramètres (icône engrenage, en haut à droite) ; (3) choisissez un modèle dans la liste déroulante et envoyez votre premier message. Aucune installation n'est requise : tout fonctionne dans le navigateur.</p></details>
<details><summary>Faut-il créer un compte sur PolyChat AI ?</summary><p>Non. PolyChat AI ne propose ni inscription, ni compte utilisateur, ni adresse e-mail. La seule donnée d'identification dont vous avez besoin est une clé d'API OpenRouter, que vous collez directement dans les paramètres. L'application reste anonyme et ne collecte rien sur ses utilisateurs ; rien n'est télémétré.</p></details>
<details><summary>Comment obtenir une clé d'API OpenRouter ?</summary><p>Rendez-vous sur openrouter.ai, créez un compte (e-mail ou OAuth Google/Discord/GitHub), puis ouvrez la page Keys de votre espace personnel. Cliquez sur Create Key, donnez-lui un nom, copiez la valeur (elle commence par <code>sk-or-</code>) et collez-la dans les Paramètres de PolyChat AI. Ajoutez ensuite un crédit (≥ 5 $) pour activer les modèles payants ; certains modèles open source restent gratuits.</p></details>
<details><summary>Sur quels appareils et navigateurs fonctionne PolyChat AI ?</summary><p>Chrome 119+, Firefox 122+, Safari 17.4+, Edge 119+. L'interface est responsive (desktop, tablette, mobile) et s'adapte à toutes les tailles d'écran. Aucune application native n'est distribuée, mais l'application peut être installée comme PWA via le menu du navigateur (« Installer l'application »).</p></details>
<h3>Fonctionnalités</h3>
<details><summary>Comment comparer plusieurs modèles en parallèle ?</summary><p>Dans la barre d'outils d'une conversation, cliquez sur le sélecteur de colonnes (1, 2 ou 3) pour afficher jusqu'à 3 fenêtres simultanément. Chaque fenêtre possède son propre menu déroulant de modèle. Tant qu'aucun message n'a été envoyé, votre saisie est diffusée en parallèle aux trois colonnes, et leurs réponses apparaissent en streaming côte à côte.</p></details>
<details><summary>Puis-je reprendre une conversation plus tard ?</summary><p>Oui. Toutes vos conversations sont sauvegardées automatiquement dans le localStorage de votre navigateur après chaque message. Vous les retrouvez dans la barre latérale gauche, regroupées par date (Aujourd'hui, Hier, date explicite). Cliquez sur un titre pour reprendre exactement là où vous vous étiez arrêté(e), avec l'historique complet des échanges et le modèle utilisé.</p></details>
<details><summary>Comment renommer ou supprimer une conversation ?</summary><p>Survolez une conversation dans la barre latérale : une icône crayon (renommer) et une icône corbeille (supprimer) apparaissent à droite. Le titre d'origine est généré automatiquement à partir des 60 premiers caractères du premier message utilisateur. La suppression retire définitivement la conversation après confirmation. Ces actions sont locales et immédiates.</p></details>
<details><summary>Le streaming des réponses est-il pris en charge ?</summary><p>Oui. PolyChat AI utilise le streaming Server-Sent Events (SSE) d'OpenRouter. Les tokens apparaissent mot par mot au fur et à mesure que le modèle les génère, avec un curseur clignotant. Vous pouvez interrompre la génération à tout moment avec le bouton Stop (carré) de la colonne. Une fois interrompue, la réponse partielle est conservée et le bouton Régénérer devient disponible.</p></details>
<details><summary>Comment fonctionne la recherche dans la barre latérale ?</summary><p>Le champ de recherche en haut de la barre latérale filtre vos conversations en temps réel. La recherche porte sur le titre de la conversation, pas sur le contenu des messages (le contenu reste dans votre navigateur, jamais indexé côté serveur). Effacez le champ pour revenir à la liste complète, toujours regroupée par date.</p></details>
<h3>Modèles & réglage</h3>
<details><summary>Quels modèles d'IA sont disponibles ?</summary><p>Plus de 100 modèles à jour via OpenRouter, incluant OpenAI (GPT-4o, GPT-4 Turbo, o1, o3-mini), Anthropic (Claude 3.5 Sonnet, Claude 3 Opus, Claude 3 Haiku), Google (Gemini 1.5 Pro, Gemini 1.5 Flash, Gemma 2), Meta (Llama 3.1 405B, Llama 3.3 70B), Mistral (Large, Codestral), DeepSeek (V3, R1), Qwen, Cohere et de nombreux modèles open source.</p></details>
<details><summary>Comment changer de modèle en cours de conversation ?</summary><p>Cliquez sur le sélecteur de modèle en haut d'une colonne pour basculer vers un autre modèle. Le changement s'applique aux messages suivants ; les échanges précédents restent visibles mais ont été générés par l'ancien modèle. Pour repartir d'une page blanche avec un nouveau modèle, créez une nouvelle conversation via le bouton « Nouvelle conversation ».</p></details>
<details><summary>Que signifient température et jetons maximum ?</summary><p>La température (entre 0 et 2) contrôle le degré de créativité du modèle : 0 produit des réponses déterministes et focalisées, 1 un équilibre, 2 des réponses plus variées et créatives. Le nombre maximal de jetons (max_tokens) plafonne la longueur de la réponse (par ex. 1024 ≈ 750 mots en français). Les deux réglages se trouvent dans la fenêtre Paramètres.</p></details>
<details><summary>Qu'est-ce que le prompt système ?</summary><p>Le prompt système est une instruction envoyée au modèle avant chaque échange, mais invisible dans la conversation affichée. Il sert à définir le ton, le rôle ou les contraintes (par ex. « Tu es un expert en cuisine française. Réponds de manière concise, sans notes de bas de page »). Vous le définissez une seule fois dans les Paramètres ; il s'applique à toutes les nouvelles conversations et à toutes les colonnes.</p></details>
<h3>Confidentialité & RGPD</h3>
<details><summary>Mes conversations sont-elles privées ?</summary><p>Oui. L'historique de vos conversations est stocké exclusivement dans le localStorage de votre navigateur. Aucun serveur PolyChat AI ne reçoit ni ne lit vos messages. En revanche, vos messages transitent par OpenRouter (hébergé aux États-Unis) puis par le fournisseur du modèle choisi selon leurs propres politiques de confidentialité.</p></details>
<details><summary>Ma clé d'API est-elle sécurisée ?</summary><p>Votre clé d'API OpenRouter est stockée localement dans votre navigateur. Elle est obfusquée (XOR + base64) avant écriture pour limiter le risque d'extraction triviale via la console. Important : cette obfuscation n'est pas un chiffrement fort. Pour une sécurité maximale, utilisez une clé à crédits limités et révoquez-la sur openrouter.ai après usage intensif.</p></details>
<details><summary>Pourquoi ce bandeau de consentement au premier chargement ?</summary><p>PolyChat AI applique le RGPD et les recommandations CNIL. Avant la première utilisation, vous devez accepter explicitement les documents juridiques (mentions légales, politique de confidentialité, CGU, politique cookies, avertissement IA). La version acceptée est enregistrée avec un horodatage. Vous pouvez retirer votre consentement à tout moment depuis la fenêtre Confidentialité.</p></details>
<details><summary>Les Google Fonts sont-ils obligatoires ?</summary><p>Non. Par défaut, l'application utilise les polices système de votre appareil (sérif, sans-serif, monospace natives), ce qui n'entraîne aucune requête réseau supplémentaire. Si vous activez Google Fonts dans Confidentialité → Polices, les fontes Fraunces, IBM Plex Sans et JetBrains Mono sont chargées depuis Google LLC, ce qui implique une requête externe et la transmission de votre adresse IP.</p></details>
<h3>Données & export</h3>
<details><summary>Où sont stockées mes conversations ?</summary><p>Toutes vos conversations, vos paramètres, votre clé d'API et vos consentements sont stockés dans le localStorage de votre navigateur, sous trois clés distinctes : <code>polychat-settings</code>, <code>polychat_history</code> et <code>polychat-legal</code>. Aucune base de données serveur, aucun cookie tiers, aucun service d'analytics. Videz le localStorage ou utilisez le mode navigation privée pour repartir d'un état vierge.</p></details>
<details><summary>Puis-je exporter mes données ?</summary><p>Oui. Ouvrez la fenêtre Confidentialité (bouton « Confidentialité » du pied de page), puis cliquez sur « Exporter mes données ». Un fichier <code>polychat-export-AAAA-MM-JJ.json</code> est téléchargé. Il contient l'intégralité de vos conversations, vos paramètres, vos consentements et leurs horodatages. Vous pouvez l'archiver, le migrer vers un autre outil ou l'utiliser comme sauvegarde.</p></details>
<details><summary>Comment supprimer définitivement mes données ?</summary><p>Deux options. (1) Ciblée : dans la barre latérale, survolez une conversation et cliquez sur la corbeille. (2) Globale : dans Confidentialité → « Supprimer toutes mes données », confirmez. Toutes les clés localStorage sont effacées, la page se recharge et vous repartez d'un état vierge. Les consentements juridiques seront redemandés au prochain chargement. Action irréversible.</p></details>
<details><summary>Que se passe-t-il si je vide le cache du navigateur ?</summary><p>Vider le cache du navigateur (images, fichiers mis en cache) n'efface pas le localStorage. En revanche, vider les « données de site » ou utiliser les options « Cookies et données de site » efface le localStorage, donc vos conversations, vos paramètres et vos consentements. Pensez à exporter vos données au préalable si vous souhaitez les conserver.</p></details>
<h3>Comparaison</h3>
<details><summary>Quelle est la différence avec ChatGPT ?</summary><p>ChatGPT est un service propriétaire d'OpenAI qui ne donne accès qu'aux modèles OpenAI, dans une interface unique et un abonnement mensuel (ChatGPT Plus à 23 $/mois). PolyChat AI est une interface libre (MIT) qui agrège plus de 100 modèles de tous les fournisseurs en paiement à l'usage réel via OpenRouter, avec comparaison multi-modèles en parallèle sur une même question.</p></details>
<details><summary>Pourquoi passer par OpenRouter ?</summary><p>OpenRouter est une passerelle unifiée qui facture à l'usage réel, sans abonnement, et unifie l'API : un seul format d'appel, une seule facturation, un seul tableau de bord pour 100+ fournisseurs. Vous gérez vos crédits et vos clés au même endroit, vous payez uniquement ce que vous consommez, et vous pouvez basculer d'un modèle à l'autre sans changer d'interface.</p></details>
<details><summary>Et face à claude.ai ou gemini.google.com ?</summary><p>Les interfaces officielles (claude.ai, gemini.google.com, chat.openai.com) ne donnent accès qu'à un seul fournisseur à la fois et conservent vos conversations sur leurs serveurs. PolyChat AI mutualise tous ces fournisseurs derrière une seule URL, garde l'historique en local et permet la comparaison côte à côte. L'inconvénient : vous payez à l'usage réel au lieu d'un forfait, et devez gérer votre clé d'API.</p></details>
<details><summary>Pourquoi ma requête échoue-t-elle ?</summary><p>Les causes les plus fréquentes : (1) clé d'API absente, expirée ou invalide — vérifiez dans Paramètres ; (2) crédit OpenRouter épuisé — rechargez sur openrouter.ai ; (3) modèle momentanément indisponible ou rate-limit atteint — réessayez ou changez de modèle ; (4) bloqueur publicitaire ou VPN trop restrictif — désactivez-le pour openrouter.ai.</p></details>
<h3>Technique</h3>
<details><summary>Quelles technologies sont utilisées ?</summary><p>React 19, TypeScript strict, Vite 7, Zustand (avec persistance localStorage), react-markdown + remark-gfm pour le rendu Markdown, lucide-react pour les icônes, et un CSS écrit à la main avec variables de thème. Aucune dépendance Tailwind ni framework UI externe. Le bundle final est inférieur à 200 Ko gzippé et la première peinture est inférieure à 100 ms sur connexion 4G.</p></details>
<details><summary>Puis-je installer PolyChat AI comme une application ?</summary><p>Oui, comme PWA. Sur Chrome ou Edge, cliquez sur l'icône « installer » à droite de la barre d'adresse. Sur Safari macOS, choisissez Fichier → Ajouter au Dock. Sur iOS/Android, « Ajouter à l'écran d'accueil » depuis le menu du navigateur. L'application se lance alors en mode standalone, sans barre d'adresse, avec un manifeste et une icône dédiés.</p></details>
<h3>Communauté</h3>
<details><summary>Comment signaler un bug ou proposer une fonctionnalité ?</summary><p>Ouvrez un ticket sur le dépôt GitHub <a href="https://github.com/Teeflo/PolyChat-AI">github.com/Teeflo/PolyChat-AI</a> dans la section Issues. Pour un bug, décrivez les étapes de reproduction, le navigateur, le modèle utilisé et joignez si possible une capture d'écran. Pour une fonctionnalité, expliquez le besoin, l'API envisagée et le bénéfice utilisateur.</p></details>
<details><summary>Puis-je contribuer au projet ?</summary><p>Oui, c'est un projet open source. Vous pouvez contribuer de plusieurs manières : signaler un bug, proposer une fonctionnalité, améliorer la documentation, traduire l'interface (français ↔ anglais), soumettre une pull request. Toute contribution est créditée dans le fichier CONTRIBUTORS.md et le CHANGELOG du projet.</p></details>
<details><summary>Sous quelle licence le code est-il publié ?</summary><p>PolyChat AI est publié sous licence MIT. Vous êtes libre de l'utiliser, le copier, le modifier, le fusionner, le publier, le distribuer, le sous-licencier et/ou le vendre, à condition de conserver la notice de copyright et la licence dans toutes les copies.</p></details>
<details><summary>Comment suivre les évolutions du produit ?</summary><p>Les versions publiées sont listées sur la page Releases de GitHub (numérotation SemVer). Le CHANGELOG.md détaille les changements notables. Pour les questions juridiques, la version courante est affichée en bas de chaque document légal. Lorsqu'un changement substantiel modifie vos droits, la constante <code>CURRENT_LEGAL_VERSION</code> est bumpée et le bandeau de consentement réapparaît.</p></details>
</main>
</noscript>
</div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>