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.
- package/README.ar.md +302 -302
- package/README.fr.md +298 -298
- package/README.md +298 -298
- package/README.sr.md +298 -298
- package/README.zh-CN.md +298 -298
- package/dist/assets/{AITrainingPage-BGxiNftI.js → AITrainingPage-Cb771S8Z.js} +1 -1
- package/dist/assets/{AnalyticsPage-Ct-sjfwM.js → AnalyticsPage-D4bgNoXM.js} +1 -1
- package/dist/assets/BenchmarkPage-BTfBJXIj.js +31 -0
- package/dist/assets/{ComparisonPage-BnJNpxsl.js → ComparisonPage-DMcD9JL0.js} +1 -1
- package/dist/assets/{CostDashboardPage-B4NDxJsX.js → CostDashboardPage-BjUiVjlg.js} +1 -1
- package/dist/assets/{DashboardPage-BGQp7-l9.js → DashboardPage-xgeJtl-Q.js} +1 -1
- package/dist/assets/{EmbeddingsPage-VBfXkb7Z.js → EmbeddingsPage-DY1JKxCN.js} +1 -1
- package/dist/assets/{FimPlaygroundPage-DLoI_Bvm.js → FimPlaygroundPage-BWSlc3k7.js} +1 -1
- package/dist/assets/{GoogleCallbackPage-Cs3tBy_I.js → GoogleCallbackPage-C9xQpfMW.js} +1 -1
- package/dist/assets/{JsonTreeNode-BSiw1fzq.js → JsonTreeNode-D9YzXU8h.js} +1 -1
- 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
- package/dist/assets/ProtocolObservatoryPage-D7szMZuY.js +2 -0
- package/dist/assets/{RAGPage-CnnZW7un.js → RAGPage-C7awGOKp.js} +1 -1
- package/dist/assets/SessionPage-8CBF4JLG.js +15 -0
- package/dist/assets/{SettingsPage-DTpQIrlG.js → SettingsPage-MEHyheCY.js} +1 -1
- 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
- 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
- package/dist/assets/{SystemPage-BEGyNOxu.js → SystemPage-mElnkuG4.js} +2 -2
- 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
- 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
- package/dist/assets/{ToolWorkshopPage-CNhpkdiG.js → ToolWorkshopPage-3Za0iXSV.js} +1 -1
- package/dist/assets/{agent-store-Ak5tH3gE.js → agent-store-Cboc3nde.js} +1 -1
- package/dist/assets/{canvas-ai-db-Bw1M5Zgc.js → canvas-ai-db-Dy65jrST.js} +1 -1
- package/dist/assets/{download-DgBo5doZ.js → download-Cipln2ej.js} +1 -1
- package/dist/assets/format-CKxSMkvr.js +1 -0
- package/dist/assets/{generate-service-D1KjeWIo.js → generate-service-C8to1Kz5.js} +1 -1
- package/dist/assets/{google-auth-store-Db6JKC8L.js → google-auth-store-8ShUecGK.js} +1 -1
- package/dist/assets/{index-S2vqeDf7.js → index-DAqgYcEq.js} +12 -12
- package/dist/assets/{index-YmhR__TY.js → index-DlTtfQCm.js} +1 -1
- package/dist/assets/{index-BM7fRtY0.js → index-NGfHHJ7k.js} +1 -1
- package/dist/assets/{index-aU4tMz4Z.css → index-UYM0582r.css} +1 -1
- package/dist/assets/{info-47X0r1B2.js → info-BzNBY8Xz.js} +1 -1
- package/dist/assets/{metrics-store-DzujlkfW.js → metrics-store-DLxxEHpn.js} +1 -1
- package/dist/assets/{papaparse.min-D0aQsTQw.js → papaparse.min-BMNThItx.js} +1 -1
- package/dist/assets/{pencil-B-eZ2Kq9.js → pencil-c-VIQAV1.js} +1 -1
- package/dist/assets/{play-DT41vD7M.js → play-CyV4NPEG.js} +1 -1
- package/dist/assets/{rag-store-gqowRN8t.js → rag-store-7BNJiZff.js} +3 -3
- package/dist/assets/{session-store-BO1u_qJQ.js → session-store-DJJV_fRl.js} +1 -1
- package/dist/assets/{share-2-IBretU3M.js → share-2-DTMUvOzC.js} +1 -1
- package/dist/assets/{square-CbKkOlNA.js → square-CVjmHbTf.js} +1 -1
- package/dist/assets/{storage-store-GsT1cPEh.js → storage-store-CAp_Ass2.js} +1 -1
- package/dist/assets/stream-handler-DVtwM8Et.js +4 -0
- package/dist/assets/{tool-workshop-store-BLoF0Gob.js → tool-workshop-store-C_snrdcI.js} +1 -1
- package/dist/assets/{toolcall-store-BEFdRqL-.js → toolcall-store-DVrrMX0Y.js} +1 -1
- package/dist/assets/{trash-2-BdlHNMOp.js → trash-2-DfEdg6Up.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/dist/assets/BenchmarkPage-q41YsHY8.js +0 -31
- package/dist/assets/ProtocolObservatoryPage-CgunJ_Wi.js +0 -2
- package/dist/assets/SessionPage-NE_x02_4.js +0 -15
- package/dist/assets/format-BqVZ9rwM.js +0 -1
- 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> •
|
|
21
|
-
<strong>Français</strong> •
|
|
22
|
-
<a href="README.zh-CN.md">中文</a> •
|
|
23
|
-
<a href="README.ar.md">العربية</a> •
|
|
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> •
|
|
29
|
-
<a href="#fonctionnalités">Fonctionnalités</a> •
|
|
30
|
-
<a href="#captures-décran">Captures d'écran</a> •
|
|
31
|
-
<a href="#à-qui-ça-sadresse">À qui ça s'adresse</a> •
|
|
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.
|
|
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.
|
|
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
|
-

|
|
154
|
-
|
|
155
|
-
</td>
|
|
156
|
-
<td width="50%">
|
|
157
|
-
|
|
158
|
-
**Comparaison de modèles — côte à côte**
|
|
159
|
-

|
|
160
|
-
|
|
161
|
-
</td>
|
|
162
|
-
</tr>
|
|
163
|
-
<tr>
|
|
164
|
-
<td width="50%">
|
|
165
|
-
|
|
166
|
-
**Analyse approfondie d'une session — métriques et timing**
|
|
167
|
-

|
|
168
|
-
|
|
169
|
-
</td>
|
|
170
|
-
<td width="50%">
|
|
171
|
-
|
|
172
|
-
**Benchmark avec radar de confiance**
|
|
173
|
-

|
|
174
|
-
|
|
175
|
-
</td>
|
|
176
|
-
</tr>
|
|
177
|
-
<tr>
|
|
178
|
-
<td width="50%">
|
|
179
|
-
|
|
180
|
-
**Embeddings — similarité cosinus**
|
|
181
|
-

|
|
182
|
-
|
|
183
|
-
</td>
|
|
184
|
-
<td width="50%">
|
|
185
|
-
|
|
186
|
-
**Moniteur système — matériel et statut Ollama**
|
|
187
|
-

|
|
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> •
|
|
21
|
+
<strong>Français</strong> •
|
|
22
|
+
<a href="README.zh-CN.md">中文</a> •
|
|
23
|
+
<a href="README.ar.md">العربية</a> •
|
|
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> •
|
|
29
|
+
<a href="#fonctionnalités">Fonctionnalités</a> •
|
|
30
|
+
<a href="#captures-décran">Captures d'écran</a> •
|
|
31
|
+
<a href="#à-qui-ça-sadresse">À qui ça s'adresse</a> •
|
|
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
|
+

|
|
154
|
+
|
|
155
|
+
</td>
|
|
156
|
+
<td width="50%">
|
|
157
|
+
|
|
158
|
+
**Comparaison de modèles — côte à côte**
|
|
159
|
+

|
|
160
|
+
|
|
161
|
+
</td>
|
|
162
|
+
</tr>
|
|
163
|
+
<tr>
|
|
164
|
+
<td width="50%">
|
|
165
|
+
|
|
166
|
+
**Analyse approfondie d'une session — métriques et timing**
|
|
167
|
+

|
|
168
|
+
|
|
169
|
+
</td>
|
|
170
|
+
<td width="50%">
|
|
171
|
+
|
|
172
|
+
**Benchmark avec radar de confiance**
|
|
173
|
+

|
|
174
|
+
|
|
175
|
+
</td>
|
|
176
|
+
</tr>
|
|
177
|
+
<tr>
|
|
178
|
+
<td width="50%">
|
|
179
|
+
|
|
180
|
+
**Embeddings — similarité cosinus**
|
|
181
|
+

|
|
182
|
+
|
|
183
|
+
</td>
|
|
184
|
+
<td width="50%">
|
|
185
|
+
|
|
186
|
+
**Moniteur système — matériel et statut Ollama**
|
|
187
|
+

|
|
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>
|