llmxray 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.ar.md +302 -302
  2. package/README.fr.md +298 -298
  3. package/README.md +298 -298
  4. package/README.sr.md +298 -298
  5. package/README.zh-CN.md +298 -298
  6. package/dist/assets/{AITrainingPage-BGxiNftI.js → AITrainingPage-Cb771S8Z.js} +1 -1
  7. package/dist/assets/{AnalyticsPage-Ct-sjfwM.js → AnalyticsPage-D4bgNoXM.js} +1 -1
  8. package/dist/assets/BenchmarkPage-BTfBJXIj.js +31 -0
  9. package/dist/assets/{ComparisonPage-BnJNpxsl.js → ComparisonPage-DMcD9JL0.js} +1 -1
  10. package/dist/assets/{CostDashboardPage-B4NDxJsX.js → CostDashboardPage-BjUiVjlg.js} +1 -1
  11. package/dist/assets/{DashboardPage-BGQp7-l9.js → DashboardPage-xgeJtl-Q.js} +1 -1
  12. package/dist/assets/{EmbeddingsPage-VBfXkb7Z.js → EmbeddingsPage-DY1JKxCN.js} +1 -1
  13. package/dist/assets/{FimPlaygroundPage-DLoI_Bvm.js → FimPlaygroundPage-BWSlc3k7.js} +1 -1
  14. package/dist/assets/{GoogleCallbackPage-Cs3tBy_I.js → GoogleCallbackPage-C9xQpfMW.js} +1 -1
  15. package/dist/assets/{JsonTreeNode-BSiw1fzq.js → JsonTreeNode-D9YzXU8h.js} +1 -1
  16. package/dist/assets/{ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-BEGN0dLS.js → ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-CPvepOP2.js} +1 -1
  17. package/dist/assets/ProtocolObservatoryPage-D7szMZuY.js +2 -0
  18. package/dist/assets/{RAGPage-CnnZW7un.js → RAGPage-C7awGOKp.js} +1 -1
  19. package/dist/assets/SessionPage-8CBF4JLG.js +15 -0
  20. package/dist/assets/{SettingsPage-DTpQIrlG.js → SettingsPage-MEHyheCY.js} +1 -1
  21. package/dist/assets/{StatusBadge.vue_vue_type_script_setup_true_lang-DO0LFtqz.js → StatusBadge.vue_vue_type_script_setup_true_lang-BPTPrdQf.js} +1 -1
  22. package/dist/assets/{StorageGauge.vue_vue_type_style_index_0_lang-BvYHZigP.js → StorageGauge.vue_vue_type_style_index_0_lang-a4pXCCmZ.js} +1 -1
  23. package/dist/assets/{SystemPage-BEGyNOxu.js → SystemPage-mElnkuG4.js} +2 -2
  24. package/dist/assets/{TabBar.vue_vue_type_script_setup_true_lang-BwHA1qGL.js → TabBar.vue_vue_type_script_setup_true_lang-g3X_zm3P.js} +1 -1
  25. package/dist/assets/{TokenStreamDisplay.vue_vue_type_script_setup_true_lang-DyRMkTKm.js → TokenStreamDisplay.vue_vue_type_script_setup_true_lang-DQBSq5z2.js} +1 -1
  26. package/dist/assets/{ToolWorkshopPage-CNhpkdiG.js → ToolWorkshopPage-3Za0iXSV.js} +1 -1
  27. package/dist/assets/{agent-store-Ak5tH3gE.js → agent-store-Cboc3nde.js} +1 -1
  28. package/dist/assets/{canvas-ai-db-Bw1M5Zgc.js → canvas-ai-db-Dy65jrST.js} +1 -1
  29. package/dist/assets/{download-DgBo5doZ.js → download-Cipln2ej.js} +1 -1
  30. package/dist/assets/format-CKxSMkvr.js +1 -0
  31. package/dist/assets/{generate-service-D1KjeWIo.js → generate-service-C8to1Kz5.js} +1 -1
  32. package/dist/assets/{google-auth-store-Db6JKC8L.js → google-auth-store-8ShUecGK.js} +1 -1
  33. package/dist/assets/{index-S2vqeDf7.js → index-DAqgYcEq.js} +12 -12
  34. package/dist/assets/{index-YmhR__TY.js → index-DlTtfQCm.js} +1 -1
  35. package/dist/assets/{index-BM7fRtY0.js → index-NGfHHJ7k.js} +1 -1
  36. package/dist/assets/{index-aU4tMz4Z.css → index-UYM0582r.css} +1 -1
  37. package/dist/assets/{info-47X0r1B2.js → info-BzNBY8Xz.js} +1 -1
  38. package/dist/assets/{metrics-store-DzujlkfW.js → metrics-store-DLxxEHpn.js} +1 -1
  39. package/dist/assets/{papaparse.min-D0aQsTQw.js → papaparse.min-BMNThItx.js} +1 -1
  40. package/dist/assets/{pencil-B-eZ2Kq9.js → pencil-c-VIQAV1.js} +1 -1
  41. package/dist/assets/{play-DT41vD7M.js → play-CyV4NPEG.js} +1 -1
  42. package/dist/assets/{rag-store-gqowRN8t.js → rag-store-7BNJiZff.js} +3 -3
  43. package/dist/assets/{session-store-BO1u_qJQ.js → session-store-DJJV_fRl.js} +1 -1
  44. package/dist/assets/{share-2-IBretU3M.js → share-2-DTMUvOzC.js} +1 -1
  45. package/dist/assets/{square-CbKkOlNA.js → square-CVjmHbTf.js} +1 -1
  46. package/dist/assets/{storage-store-GsT1cPEh.js → storage-store-CAp_Ass2.js} +1 -1
  47. package/dist/assets/stream-handler-DVtwM8Et.js +4 -0
  48. package/dist/assets/{tool-workshop-store-BLoF0Gob.js → tool-workshop-store-C_snrdcI.js} +1 -1
  49. package/dist/assets/{toolcall-store-BEFdRqL-.js → toolcall-store-DVrrMX0Y.js} +1 -1
  50. package/dist/assets/{trash-2-BdlHNMOp.js → trash-2-DfEdg6Up.js} +1 -1
  51. package/dist/index.html +2 -2
  52. package/package.json +1 -1
  53. package/dist/assets/BenchmarkPage-q41YsHY8.js +0 -31
  54. package/dist/assets/ProtocolObservatoryPage-CgunJ_Wi.js +0 -2
  55. package/dist/assets/SessionPage-NE_x02_4.js +0 -15
  56. package/dist/assets/format-BqVZ9rwM.js +0 -1
  57. package/dist/assets/stream-handler-B5y5PItW.js +0 -4
package/README.fr.md CHANGED
@@ -1,298 +1,298 @@
1
- <p align="center">
2
- <img src="https://raw.githubusercontent.com/LogneBudo/llmxray/master/public/favicon.svg" alt="LLMxRay" width="80" />
3
- </p>
4
-
5
- <h1 align="center">LLMxRay</h1>
6
- <p align="center"><strong>Voyez ce que votre IA fait réellement.</strong></p>
7
- <p align="center">
8
- Streaming de tokens en temps réel, analyse de qualité, profilage des performances et suivi des coûts<br/>
9
- pour les LLM locaux. Pas de cloud. Pas de clés API. Pas de coût.
10
- </p>
11
-
12
- <p align="center">
13
- <a href="https://www.npmjs.com/package/llmxray"><img src="https://img.shields.io/npm/v/llmxray?color=cb3837&logo=npm&logoColor=white" alt="npm" /></a>
14
- <a href="https://hub.docker.com/r/djovaneli/llmxray"><img src="https://img.shields.io/docker/pulls/djovaneli/llmxray?color=2496ED&logo=docker&logoColor=white" alt="Docker" /></a>
15
- <img src="https://img.shields.io/badge/license-Apache%202.0-blue" alt="License" />
16
- <img src="https://img.shields.io/badge/ollama-local-000?logo=ollama&logoColor=white" alt="Ollama" />
17
- </p>
18
-
19
- <p align="center">
20
- 🌐 <a href="README.md">English</a> &bull;
21
- <strong>Français</strong> &bull;
22
- <a href="README.zh-CN.md">中文</a> &bull;
23
- <a href="README.ar.md">العربية</a> &bull;
24
- <a href="README.sr.md">Srpski</a>
25
- </p>
26
-
27
- <p align="center">
28
- <a href="#démarrage-rapide">Démarrage rapide</a> &bull;
29
- <a href="#fonctionnalités">Fonctionnalités</a> &bull;
30
- <a href="#captures-décran">Captures d'écran</a> &bull;
31
- <a href="#à-qui-ça-sadresse">À qui ça s'adresse</a> &bull;
32
- <a href="CHANGELOG.md">Changelog</a>
33
- </p>
34
-
35
- <p align="center">
36
- <img src="docs/public/screenshots/demo.gif" alt="Démo LLMxRay — streaming de tokens en temps réel avec coloration selon la confiance" width="800" />
37
- </p>
38
-
39
- ---
40
-
41
- ## Démarrage rapide
42
-
43
- **Une commande. 30 secondes.**
44
-
45
- ```bash
46
- npx llmxray
47
- ```
48
-
49
- Ou avec Docker :
50
-
51
- ```bash
52
- docker run -p 5174:5174 djovaneli/llmxray
53
- ```
54
-
55
- Ouvrez **http://localhost:5174** et commencez à discuter. C'est tout.
56
-
57
- > **Prérequis :** [Ollama](https://ollama.com/download) lancé localement avec au moins un modèle téléchargé (`ollama pull llama3.2`).
58
-
59
- ---
60
-
61
- ## Pourquoi LLMxRay ?
62
-
63
- Vous lancez un LLM local. Vous discutez avec lui. Mais que s'est-il réellement passé ?
64
-
65
- - À quelle vitesse chaque token a-t-il été généré ? Pour lesquels le modèle était-il confiant ?
66
- - La qualité des réponses se dégrade-t-elle au fil des longues conversations ?
67
- - Combien ça aurait coûté en cloud ?
68
- - Le modèle se répète-t-il ? Refuse-t-il ? Génère-t-il du charabia ?
69
- - Comment la température 0,3 se compare-t-elle à 0,9 sur *le même* prompt ?
70
-
71
- **LLMxRay répond à tout ça, visuellement, en temps réel, gratuitement.**
72
-
73
- ---
74
-
75
- ## Fonctionnalités
76
-
77
- ### Chat en temps réel avec intelligence par token
78
- Discutez avec n'importe quel modèle Ollama et observez les tokens arriver avec une **coloration selon la confiance** — chaque token est teinté selon sa vitesse de génération. Supporte Markdown, conversations multi-tours, pièces jointes, modèles vision et commandes slash. Pour les modèles de raisonnement, réglez le budget de réflexion par conversation — désactivé, au choix du modèle, ou un effort explicite faible / moyen / élevé / max.
79
-
80
- ### Filtres qualité des réponses
81
- Chaque réponse est analysée automatiquement. Des badges colorés n'apparaissent que lorsqu'il y a un problème :
82
- - **Répétition** — phrases répétées excessivement (analyse 4-gram)
83
- - **Refus** — "en tant que modèle de langage" et 7 autres motifs
84
- - **Charabia** — taux élevé de caractères non-ASCII
85
- - **Vide** — moins de 10 mots
86
- - **Tronqué** — limite de tokens atteinte sans conclusion
87
-
88
- ### Atelier de comparaison de modèles
89
- Jusqu'à **4 emplacements** avec modèle, température et prompt système indépendants. Streaming côte à côte, surlignage des différences au niveau du mot, comparaison de métriques, et préréglages en un clic (Balayage de température, Paire déterministe, Comparaison de langues avec visualisation de la taxe sur les tokens).
90
-
91
- ### Analytiques de performance
92
- - **Percentiles de latence** (P50/P95/P99) pour la durée et le TTFT
93
- - **Intelligence des erreurs** — classificateur en 7 catégories avec timeline
94
- - **Heatmap d'utilisation** — grille 7×24 de vos heures actives
95
- - **Impact des paramètres** — nuages de points température vs tokens/sec
96
- - Suivi **démarrage à froid vs à chaud** avec historique de chargement des modèles
97
-
98
- ### Tableau de bord des coûts
99
- Consommation de tokens par modèle/jour avec estimation du prix équivalent en cloud. Voyez ce que vous *économisez* en restant local.
100
-
101
- ### Benchmark chirurgical
102
- Testez les connaissances d'un modèle avec des suites de questions à choix multiples. Utilise les vrais logprobs via l'endpoint compatible OpenAI pour une mesure précise de la confiance. Créez des suites personnalisées visuellement ou laissez l'IA les générer à partir d'un sujet.
103
-
104
- ### Laboratoire d'embeddings et pipeline RAG
105
- Embeddez du texte, visualisez les vecteurs, mesurez la similarité cosinus. Demandez un vecteur de sortie plus étroit pour voir ce que coûte la troncature Matryoshka en similarité. Construisez une base de connaissances locale à partir de PDF, DOCX et CSV — découpée, embeddée, recherchable. Stockée dans IndexedDB. Coût zéro.
106
-
107
- ### Atelier d'outils (canvas visuel)
108
- Canvas à nœuds en drag-and-drop pour construire des définitions d'outils. Synchronisation bidirectionnelle du code (modifiez les nœuds ou le TypeScript — les deux se mettent à jour). Sondez des APIs, générez des schémas automatiquement, testez avec exécution en direct.
109
-
110
- ### Aire de jeu Fill-in-the-Middle *(nouveau en v0.4.7)*
111
- Complétion de code pour Qwen-Coder, CodeLlama, Codestral, DeepSeek-Coder et StarCoder. Deux zones de texte (préfixe / suffixe), le modèle remplit le trou. Utilise le champ `suffix` d'Ollama sur `/api/generate`. L'aperçu assemblé montre le résultat tel qu'il apparaîtrait dans votre éditeur.
112
-
113
- ### Observatoire de protocoles *(nouveau en v0.4.7)*
114
- Envoyez le même prompt à travers les trois protocoles de service d'Ollama — **natif** `/api/chat`, **compatible OpenAI** `/v1/chat/completions`, et **compatible Anthropic** `/v1/messages` — en parallèle contre votre modèle local. Streaming côte à côte, métriques par protocole, et onglet « envelope diff » qui montre comment chaque protocole encode les raisons de fin, le comptage de tokens et les enveloppes d'erreur. Pas de cloud, pas de clés API — les trois endpoints sont locaux sur `localhost:11434`.
115
-
116
- ### Pipeline d'entraînement IA
117
- Préparez des données d'entraînement à partir de vos conversations. Étiquetez, révisez et exportez en JSONL pour le fine-tuning.
118
-
119
- ### Base de données d'historique IA locale
120
- Chaque expérience (benchmarks, comparaisons, chats, paires d'entraînement) est archivée automatiquement dans une base IndexedDB requêtable avec filtres, tendances, exports et politiques de rétention.
121
-
122
- ### Multilingue
123
- Traductions complètes en anglais, français, serbe (latin + cyrillique), chinois et arabe. Support du layout RTL. Scaffolds communautaires pour l'hébreu et le japonais.
124
-
125
- ---
126
-
127
- ## Compatibilité Ollama
128
-
129
- Testé et vérifié avec **Ollama 0.32.x** (la version stable la plus récente en août 2026). LLMxRay utilise les endpoints Ollama suivants :
130
-
131
- | Endpoint | Utilisation |
132
- |---|---|
133
- | `/api/chat` | Chat streaming (NDJSON, avec `tools`, `think`, schema `format`) |
134
- | `/api/generate` | Génération + Fill-in-the-Middle via `suffix` |
135
- | `/api/tags` | Liste des modèles + capacités, longueur de contexte et largeur d'embedding |
136
- | `/api/show` | Paramètres, template, licence et métadonnées d'architecture |
137
- | `/api/embed` | Embeddings vectoriels pour RAG |
138
- | `/api/pull`, `/api/delete`, `/api/ps`, `/api/version` | Gestion et statut des modèles |
139
- | `/v1/chat/completions` | Chemin compatible OpenAI utilisé par le Benchmark chirurgical pour les vrais logprobs |
140
- | `/v1/messages` | Chemin compatible Anthropic utilisé par l'Observatoire de protocoles |
141
-
142
- **Compatible avec :** Ollama 0.20 et plus récent (les versions antérieures fonctionnent pour chat/generate mais sans `think` ni `format` JSON-schema). **Recommandé :** Ollama 0.32+ — les capacités et la longueur de contexte arrivent avec la liste des modèles, `think` accepte des niveaux d'effort gradués, et les embeddings acceptent une largeur `dimensions`.
143
-
144
- ---
145
-
146
- ## Captures d'écran
147
-
148
- <table>
149
- <tr>
150
- <td width="50%">
151
-
152
- **Chat avec streaming de tokens et confiance**
153
- ![Chat](docs/public/screenshots/chat-diagnostics.png)
154
-
155
- </td>
156
- <td width="50%">
157
-
158
- **Comparaison de modèles — côte à côte**
159
- ![Compare](docs/public/screenshots/compare-sidebyside.png)
160
-
161
- </td>
162
- </tr>
163
- <tr>
164
- <td width="50%">
165
-
166
- **Analyse approfondie d'une session — métriques et timing**
167
- ![Session](docs/public/screenshots/session-details.png)
168
-
169
- </td>
170
- <td width="50%">
171
-
172
- **Benchmark avec radar de confiance**
173
- ![Benchmark](docs/public/screenshots/benchmark.png)
174
-
175
- </td>
176
- </tr>
177
- <tr>
178
- <td width="50%">
179
-
180
- **Embeddings — similarité cosinus**
181
- ![Embeddings](docs/public/screenshots/embed-similarity.png)
182
-
183
- </td>
184
- <td width="50%">
185
-
186
- **Moniteur système — matériel et statut Ollama**
187
- ![System](docs/public/screenshots/my-system.png)
188
-
189
- </td>
190
- </tr>
191
- </table>
192
-
193
- ---
194
-
195
- ## À qui ça s'adresse
196
-
197
- | Vous êtes... | LLMxRay vous aide à... |
198
- |---|---|
199
- | **Développeur** | Déboguer des prompts, profiler la latence, comparer des modèles, inspecter des appels d'outils, suivre les coûts |
200
- | **Chercheur** | Mener des expériences contrôlées avec des paramètres cohérents entre modèles et températures |
201
- | **Étudiant / Enseignant** | Explorer le comportement des modèles visuellement — Kit Éducateurs intégré avec 9 modules interactifs |
202
- | **Responsable d'équipe IA** | Comprendre les tendances de qualité, les motifs d'erreurs et l'utilisation des ressources sur votre parc local |
203
-
204
- ---
205
-
206
- ## Options d'installation
207
-
208
- ### npx (recommandé)
209
- ```bash
210
- npx llmxray
211
- npx llmxray --port 3000
212
- npx llmxray --ollama-url http://192.168.1.50:11434
213
- ```
214
-
215
- ### Docker
216
- ```bash
217
- docker run -p 5174:5174 djovaneli/llmxray
218
- docker run -p 5174:5174 -e OLLAMA_URL=http://host.docker.internal:11434 djovaneli/llmxray
219
- ```
220
-
221
- ### Depuis les sources
222
- ```bash
223
- git clone https://github.com/LogneBudo/llmxray.git
224
- cd llmxray
225
- npm install
226
- npm run dev # http://localhost:5173
227
- ```
228
-
229
- ---
230
-
231
- ## Stack technique
232
-
233
- | Couche | Technologie |
234
- |---|---|
235
- | Framework | Vue 3.5 + Composition API |
236
- | Langage | TypeScript 5.9 (strict) |
237
- | Build | Vite 7.3 |
238
- | Style | Tailwind CSS 4.2 |
239
- | État | Pinia 3 (store par domaine) |
240
- | Graphiques | Chart.js 4, D3.js 7 |
241
- | Canvas | Vue Flow (éditeur de nœuds visuel) |
242
- | Éditeur de code | CodeMirror 6 |
243
- | Stockage | IndexedDB (natif au navigateur) |
244
- | Backend LLM | Ollama (local) |
245
-
246
- ---
247
-
248
- ## Architecture
249
-
250
- **Streaming** — Lit le NDJSON d'Ollama via `fetch()` + `ReadableStream`. Les tokens mettent à jour l'UI de manière réactive à travers les stores Pinia.
251
-
252
- **Confiance des tokens** — Approximée à partir de la latence inter-tokens (plus rapide = plus confiant). Clairement étiquetée comme approximation. Les benchmarks utilisent les vrais logprobs via l'endpoint compatible OpenAI.
253
-
254
- **Store par domaine** — Chaque domaine a son propre store Pinia : tokens, sessions, métriques, raisonnement, comparaison, embeddings, qualité, coût et plus.
255
-
256
- **Détection matérielle** — Plugin Vite personnalisé qui interroge l'OS directement (PowerShell/proc/sysctl) pour des spécifications matérielles précises.
257
-
258
- ---
259
-
260
- ## Développement
261
-
262
- | Commande | Ce qu'elle fait |
263
- |---|---|
264
- | `npm run dev` | Serveur de dev (port 5173) |
265
- | `npm run build` | Vérification de types + build de production |
266
- | `npm run test` | Tests unitaires (Vitest) |
267
- | `npm run test:e2e` | End-to-end (Playwright) |
268
-
269
- ---
270
-
271
- ## Contribuer
272
-
273
- Les contributions sont les bienvenues ! Voir [CONTRIBUTING.md](CONTRIBUTING.md) pour la configuration et les directives.
274
-
275
- **Les traductions communautaires sont particulièrement bienvenues** — fichiers scaffolds prêts pour l'hébreu et le japonais.
276
-
277
- ---
278
-
279
- ## Licence
280
-
281
- [Apache License 2.0](LICENSE)
282
-
283
- ## Marque
284
-
285
- **LLMxRay** est une marque d'Ivan Stankovic ([LogneBudo](https://github.com/LogneBudo)). Voir [TRADEMARK.md](TRADEMARK.md).
286
-
287
- ---
288
-
289
- <p align="center">
290
- <strong>Si LLMxRay vous aide à mieux comprendre votre IA, pensez à lui donner une étoile.</strong><br/>
291
- Ça aide d'autres personnes à découvrir le projet.
292
- </p>
293
-
294
- <p align="center">
295
- <a href="https://github.com/LogneBudo/llmxray">
296
- <img src="https://img.shields.io/github/stars/LogneBudo/llmxray?style=social" alt="GitHub stars" />
297
- </a>
298
- </p>
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/LogneBudo/llmxray/master/public/favicon.svg" alt="LLMxRay" width="80" />
3
+ </p>
4
+
5
+ <h1 align="center">LLMxRay</h1>
6
+ <p align="center"><strong>Voyez ce que votre IA fait réellement.</strong></p>
7
+ <p align="center">
8
+ Streaming de tokens en temps réel, analyse de qualité, profilage des performances et suivi des coûts<br/>
9
+ pour les LLM locaux. Pas de cloud. Pas de clés API. Pas de coût.
10
+ </p>
11
+
12
+ <p align="center">
13
+ <a href="https://www.npmjs.com/package/llmxray"><img src="https://img.shields.io/npm/v/llmxray?color=cb3837&logo=npm&logoColor=white" alt="npm" /></a>
14
+ <a href="https://hub.docker.com/r/djovaneli/llmxray"><img src="https://img.shields.io/docker/pulls/djovaneli/llmxray?color=2496ED&logo=docker&logoColor=white" alt="Docker" /></a>
15
+ <img src="https://img.shields.io/badge/license-Apache%202.0-blue" alt="License" />
16
+ <img src="https://img.shields.io/badge/ollama-local-000?logo=ollama&logoColor=white" alt="Ollama" />
17
+ </p>
18
+
19
+ <p align="center">
20
+ 🌐 <a href="README.md">English</a> &bull;
21
+ <strong>Français</strong> &bull;
22
+ <a href="README.zh-CN.md">中文</a> &bull;
23
+ <a href="README.ar.md">العربية</a> &bull;
24
+ <a href="README.sr.md">Srpski</a>
25
+ </p>
26
+
27
+ <p align="center">
28
+ <a href="#démarrage-rapide">Démarrage rapide</a> &bull;
29
+ <a href="#fonctionnalités">Fonctionnalités</a> &bull;
30
+ <a href="#captures-décran">Captures d'écran</a> &bull;
31
+ <a href="#à-qui-ça-sadresse">À qui ça s'adresse</a> &bull;
32
+ <a href="CHANGELOG.md">Changelog</a>
33
+ </p>
34
+
35
+ <p align="center">
36
+ <img src="docs/public/screenshots/demo.gif" alt="Démo LLMxRay — streaming de tokens en temps réel avec coloration selon la confiance" width="800" />
37
+ </p>
38
+
39
+ ---
40
+
41
+ ## Démarrage rapide
42
+
43
+ **Une commande. 30 secondes.**
44
+
45
+ ```bash
46
+ npx llmxray
47
+ ```
48
+
49
+ Ou avec Docker :
50
+
51
+ ```bash
52
+ docker run -p 5174:5174 djovaneli/llmxray
53
+ ```
54
+
55
+ Ouvrez **http://localhost:5174** et commencez à discuter. C'est tout.
56
+
57
+ > **Prérequis :** [Ollama](https://ollama.com/download) lancé localement avec au moins un modèle téléchargé (`ollama pull llama3.2`).
58
+
59
+ ---
60
+
61
+ ## Pourquoi LLMxRay ?
62
+
63
+ Vous lancez un LLM local. Vous discutez avec lui. Mais que s'est-il réellement passé ?
64
+
65
+ - À quelle vitesse chaque token a-t-il été généré ? Pour lesquels le modèle était-il confiant ?
66
+ - La qualité des réponses se dégrade-t-elle au fil des longues conversations ?
67
+ - Combien ça aurait coûté en cloud ?
68
+ - Le modèle se répète-t-il ? Refuse-t-il ? Génère-t-il du charabia ?
69
+ - Comment la température 0,3 se compare-t-elle à 0,9 sur *le même* prompt ?
70
+
71
+ **LLMxRay répond à tout ça, visuellement, en temps réel, gratuitement.**
72
+
73
+ ---
74
+
75
+ ## Fonctionnalités
76
+
77
+ ### Chat en temps réel avec intelligence par token
78
+ Discutez avec n'importe quel modèle Ollama et observez les tokens arriver avec une **coloration selon la confiance** — chaque token est teinté selon sa vitesse de génération. Supporte Markdown, conversations multi-tours, pièces jointes, modèles vision et commandes slash. Pour les modèles de raisonnement, réglez le budget de réflexion par conversation — désactivé, au choix du modèle, ou un effort explicite faible / moyen / élevé / max.
79
+
80
+ ### Filtres qualité des réponses
81
+ Chaque réponse est analysée automatiquement. Des badges colorés n'apparaissent que lorsqu'il y a un problème :
82
+ - **Répétition** — phrases répétées excessivement (analyse 4-gram)
83
+ - **Refus** — "en tant que modèle de langage" et 7 autres motifs
84
+ - **Charabia** — taux élevé de caractères non-ASCII
85
+ - **Vide** — moins de 10 mots
86
+ - **Tronqué** — limite de tokens atteinte sans conclusion
87
+
88
+ ### Atelier de comparaison de modèles
89
+ Jusqu'à **4 emplacements** avec modèle, température et prompt système indépendants. Streaming côte à côte, surlignage des différences au niveau du mot, comparaison de métriques, et préréglages en un clic (Balayage de température, Paire déterministe, Comparaison de langues avec visualisation de la taxe sur les tokens).
90
+
91
+ ### Analytiques de performance
92
+ - **Percentiles de latence** (P50/P95/P99) pour la durée et le TTFT
93
+ - **Intelligence des erreurs** — classificateur en 7 catégories avec timeline
94
+ - **Heatmap d'utilisation** — grille 7×24 de vos heures actives
95
+ - **Impact des paramètres** — nuages de points température vs tokens/sec
96
+ - Suivi **démarrage à froid vs à chaud** avec historique de chargement des modèles
97
+
98
+ ### Tableau de bord des coûts
99
+ Consommation de tokens par modèle/jour avec estimation du prix équivalent en cloud. Voyez ce que vous *économisez* en restant local.
100
+
101
+ ### Benchmark chirurgical
102
+ Testez les connaissances d'un modèle avec des suites de questions à choix multiples. Utilise les vrais logprobs via l'endpoint compatible OpenAI pour une mesure précise de la confiance. Créez des suites personnalisées visuellement ou laissez l'IA les générer à partir d'un sujet.
103
+
104
+ ### Laboratoire d'embeddings et pipeline RAG
105
+ Embeddez du texte, visualisez les vecteurs, mesurez la similarité cosinus. Demandez un vecteur de sortie plus étroit pour voir ce que coûte la troncature Matryoshka en similarité. Construisez une base de connaissances locale à partir de PDF, DOCX et CSV — découpée, embeddée, recherchable. Stockée dans IndexedDB. Coût zéro.
106
+
107
+ ### Atelier d'outils (canvas visuel)
108
+ Canvas à nœuds en drag-and-drop pour construire des définitions d'outils. Synchronisation bidirectionnelle du code (modifiez les nœuds ou le TypeScript — les deux se mettent à jour). Sondez des APIs, générez des schémas automatiquement, testez avec exécution en direct.
109
+
110
+ ### Aire de jeu Fill-in-the-Middle *(nouveau en v0.4.7)*
111
+ Complétion de code pour Qwen-Coder, CodeLlama, Codestral, DeepSeek-Coder et StarCoder. Deux zones de texte (préfixe / suffixe), le modèle remplit le trou. Utilise le champ `suffix` d'Ollama sur `/api/generate`. L'aperçu assemblé montre le résultat tel qu'il apparaîtrait dans votre éditeur.
112
+
113
+ ### Observatoire de protocoles *(nouveau en v0.4.7)*
114
+ Envoyez le même prompt à travers les trois protocoles de service d'Ollama — **natif** `/api/chat`, **compatible OpenAI** `/v1/chat/completions`, et **compatible Anthropic** `/v1/messages` — en parallèle contre votre modèle local. Streaming côte à côte, métriques par protocole, et onglet « envelope diff » qui montre comment chaque protocole encode les raisons de fin, le comptage de tokens et les enveloppes d'erreur. Pas de cloud, pas de clés API — les trois endpoints sont locaux sur `localhost:11434`.
115
+
116
+ ### Pipeline d'entraînement IA
117
+ Préparez des données d'entraînement à partir de vos conversations. Étiquetez, révisez et exportez en JSONL pour le fine-tuning.
118
+
119
+ ### Base de données d'historique IA locale
120
+ Chaque expérience (benchmarks, comparaisons, chats, paires d'entraînement) est archivée automatiquement dans une base IndexedDB requêtable avec filtres, tendances, exports et politiques de rétention.
121
+
122
+ ### Multilingue
123
+ Traductions complètes en anglais, français, serbe (latin + cyrillique), chinois et arabe. Support du layout RTL. Scaffolds communautaires pour l'hébreu et le japonais.
124
+
125
+ ---
126
+
127
+ ## Compatibilité Ollama
128
+
129
+ Testé et vérifié avec **Ollama 0.33.x** (vérifié sur 0.33.3, septembre 2026). LLMxRay utilise les endpoints Ollama suivants :
130
+
131
+ | Endpoint | Utilisation |
132
+ |---|---|
133
+ | `/api/chat` | Chat streaming (NDJSON, avec `tools`, `think`, schema `format`) |
134
+ | `/api/generate` | Génération + Fill-in-the-Middle via `suffix` |
135
+ | `/api/tags` | Liste des modèles + capacités, longueur de contexte et largeur d'embedding |
136
+ | `/api/show` | Paramètres, template, licence et métadonnées d'architecture |
137
+ | `/api/embed` | Embeddings vectoriels pour RAG |
138
+ | `/api/pull`, `/api/delete`, `/api/ps`, `/api/version` | Gestion et statut des modèles |
139
+ | `/v1/chat/completions` | Chemin compatible OpenAI utilisé par le Benchmark chirurgical pour les vrais logprobs |
140
+ | `/v1/messages` | Chemin compatible Anthropic utilisé par l'Observatoire de protocoles |
141
+
142
+ **Compatible avec :** Ollama 0.20 et plus récent (les versions antérieures fonctionnent pour chat/generate mais sans `think` ni `format` JSON-schema). **Recommandé :** Ollama 0.33.3+ — la réutilisation du cache d'invite est rapportée (`prompt_eval_cached_count`, et `usage.prompt_tokens_details.cached_tokens` sur l'endpoint compatible OpenAI), donc le débit de préremplissage est mesuré sur les tokens réellement évalués. Depuis 0.32 : les capacités et la longueur de contexte arrivent avec la liste des modèles, `think` accepte des niveaux d'effort gradués, et les embeddings acceptent une largeur `dimensions`.
143
+
144
+ ---
145
+
146
+ ## Captures d'écran
147
+
148
+ <table>
149
+ <tr>
150
+ <td width="50%">
151
+
152
+ **Chat avec streaming de tokens et confiance**
153
+ ![Chat](docs/public/screenshots/chat-diagnostics.png)
154
+
155
+ </td>
156
+ <td width="50%">
157
+
158
+ **Comparaison de modèles — côte à côte**
159
+ ![Compare](docs/public/screenshots/compare-sidebyside.png)
160
+
161
+ </td>
162
+ </tr>
163
+ <tr>
164
+ <td width="50%">
165
+
166
+ **Analyse approfondie d'une session — métriques et timing**
167
+ ![Session](docs/public/screenshots/session-details.png)
168
+
169
+ </td>
170
+ <td width="50%">
171
+
172
+ **Benchmark avec radar de confiance**
173
+ ![Benchmark](docs/public/screenshots/benchmark.png)
174
+
175
+ </td>
176
+ </tr>
177
+ <tr>
178
+ <td width="50%">
179
+
180
+ **Embeddings — similarité cosinus**
181
+ ![Embeddings](docs/public/screenshots/embed-similarity.png)
182
+
183
+ </td>
184
+ <td width="50%">
185
+
186
+ **Moniteur système — matériel et statut Ollama**
187
+ ![System](docs/public/screenshots/my-system.png)
188
+
189
+ </td>
190
+ </tr>
191
+ </table>
192
+
193
+ ---
194
+
195
+ ## À qui ça s'adresse
196
+
197
+ | Vous êtes... | LLMxRay vous aide à... |
198
+ |---|---|
199
+ | **Développeur** | Déboguer des prompts, profiler la latence, comparer des modèles, inspecter des appels d'outils, suivre les coûts |
200
+ | **Chercheur** | Mener des expériences contrôlées avec des paramètres cohérents entre modèles et températures |
201
+ | **Étudiant / Enseignant** | Explorer le comportement des modèles visuellement — Kit Éducateurs intégré avec 9 modules interactifs |
202
+ | **Responsable d'équipe IA** | Comprendre les tendances de qualité, les motifs d'erreurs et l'utilisation des ressources sur votre parc local |
203
+
204
+ ---
205
+
206
+ ## Options d'installation
207
+
208
+ ### npx (recommandé)
209
+ ```bash
210
+ npx llmxray
211
+ npx llmxray --port 3000
212
+ npx llmxray --ollama-url http://192.168.1.50:11434
213
+ ```
214
+
215
+ ### Docker
216
+ ```bash
217
+ docker run -p 5174:5174 djovaneli/llmxray
218
+ docker run -p 5174:5174 -e OLLAMA_URL=http://host.docker.internal:11434 djovaneli/llmxray
219
+ ```
220
+
221
+ ### Depuis les sources
222
+ ```bash
223
+ git clone https://github.com/LogneBudo/llmxray.git
224
+ cd llmxray
225
+ npm install
226
+ npm run dev # http://localhost:5173
227
+ ```
228
+
229
+ ---
230
+
231
+ ## Stack technique
232
+
233
+ | Couche | Technologie |
234
+ |---|---|
235
+ | Framework | Vue 3.5 + Composition API |
236
+ | Langage | TypeScript 5.9 (strict) |
237
+ | Build | Vite 7.3 |
238
+ | Style | Tailwind CSS 4.2 |
239
+ | État | Pinia 3 (store par domaine) |
240
+ | Graphiques | Chart.js 4, D3.js 7 |
241
+ | Canvas | Vue Flow (éditeur de nœuds visuel) |
242
+ | Éditeur de code | CodeMirror 6 |
243
+ | Stockage | IndexedDB (natif au navigateur) |
244
+ | Backend LLM | Ollama (local) |
245
+
246
+ ---
247
+
248
+ ## Architecture
249
+
250
+ **Streaming** — Lit le NDJSON d'Ollama via `fetch()` + `ReadableStream`. Les tokens mettent à jour l'UI de manière réactive à travers les stores Pinia.
251
+
252
+ **Confiance des tokens** — Approximée à partir de la latence inter-tokens (plus rapide = plus confiant). Clairement étiquetée comme approximation. Les benchmarks utilisent les vrais logprobs via l'endpoint compatible OpenAI.
253
+
254
+ **Store par domaine** — Chaque domaine a son propre store Pinia : tokens, sessions, métriques, raisonnement, comparaison, embeddings, qualité, coût et plus.
255
+
256
+ **Détection matérielle** — Plugin Vite personnalisé qui interroge l'OS directement (PowerShell/proc/sysctl) pour des spécifications matérielles précises.
257
+
258
+ ---
259
+
260
+ ## Développement
261
+
262
+ | Commande | Ce qu'elle fait |
263
+ |---|---|
264
+ | `npm run dev` | Serveur de dev (port 5173) |
265
+ | `npm run build` | Vérification de types + build de production |
266
+ | `npm run test` | Tests unitaires (Vitest) |
267
+ | `npm run test:e2e` | End-to-end (Playwright) |
268
+
269
+ ---
270
+
271
+ ## Contribuer
272
+
273
+ Les contributions sont les bienvenues ! Voir [CONTRIBUTING.md](CONTRIBUTING.md) pour la configuration et les directives.
274
+
275
+ **Les traductions communautaires sont particulièrement bienvenues** — fichiers scaffolds prêts pour l'hébreu et le japonais.
276
+
277
+ ---
278
+
279
+ ## Licence
280
+
281
+ [Apache License 2.0](LICENSE)
282
+
283
+ ## Marque
284
+
285
+ **LLMxRay** est une marque d'Ivan Stankovic ([LogneBudo](https://github.com/LogneBudo)). Voir [TRADEMARK.md](TRADEMARK.md).
286
+
287
+ ---
288
+
289
+ <p align="center">
290
+ <strong>Si LLMxRay vous aide à mieux comprendre votre IA, pensez à lui donner une étoile.</strong><br/>
291
+ Ça aide d'autres personnes à découvrir le projet.
292
+ </p>
293
+
294
+ <p align="center">
295
+ <a href="https://github.com/LogneBudo/llmxray">
296
+ <img src="https://img.shields.io/github/stars/LogneBudo/llmxray?style=social" alt="GitHub stars" />
297
+ </a>
298
+ </p>