llmxray 0.4.7 → 0.4.9
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 +301 -0
- package/README.fr.md +297 -0
- package/README.md +8 -0
- package/README.sr.md +297 -0
- package/README.zh-CN.md +297 -0
- package/dist/assets/{AITrainingPage-CsvXVCl4.js → AITrainingPage-E1g8rBQe.js} +1 -1
- package/dist/assets/{AnalyticsPage-vkaPSUTM.js → AnalyticsPage-B-axxCjX.js} +1 -1
- package/dist/assets/{BenchmarkPage-D0OBLy2p.js → BenchmarkPage-CMa0Q0wR.js} +1 -1
- package/dist/assets/{ComparisonPage-yjlQyMSr.js → ComparisonPage-phs59_G2.js} +1 -1
- package/dist/assets/{CostDashboardPage--NlorE5h.js → CostDashboardPage-DmXvNxoW.js} +1 -1
- package/dist/assets/{DashboardPage-C7HpWzo0.js → DashboardPage-CFydBLae.js} +1 -1
- package/dist/assets/{EmbeddingsPage-BjI-MRAa.js → EmbeddingsPage-Dr4zAK3P.js} +1 -1
- package/dist/assets/{FimPlaygroundPage-DFbVhKk_.js → FimPlaygroundPage-DuzUaxaO.js} +1 -1
- package/dist/assets/{GoogleCallbackPage-CtnaMbov.js → GoogleCallbackPage-B_wKPxTY.js} +1 -1
- package/dist/assets/{JsonTreeNode-D4tXijI2.js → JsonTreeNode-C3GvpFIv.js} +1 -1
- package/dist/assets/{ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-Cj2LskB0.js → ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-tkg1H--1.js} +1 -1
- package/dist/assets/{ProtocolObservatoryPage-BCBMa4BZ.js → ProtocolObservatoryPage-C5NU7kv4.js} +1 -1
- package/dist/assets/{RAGPage-DhajwBAP.js → RAGPage-DGFy-b60.js} +1 -1
- package/dist/assets/{SessionPage-D9yVmDvL.js → SessionPage-C4oWNW2u.js} +1 -1
- package/dist/assets/{SettingsPage-CMAnCevk.js → SettingsPage-CFSn9lUW.js} +1 -1
- package/dist/assets/{StatusBadge.vue_vue_type_script_setup_true_lang-n7TTYhNJ.js → StatusBadge.vue_vue_type_script_setup_true_lang-W3vS9xKq.js} +1 -1
- package/dist/assets/{StorageGauge.vue_vue_type_style_index_0_lang-BKb4VKNU.js → StorageGauge.vue_vue_type_style_index_0_lang-NsFsiU2e.js} +1 -1
- package/dist/assets/{SystemPage-D4Zziyum.js → SystemPage-tBgC5G3-.js} +2 -2
- package/dist/assets/{TabBar.vue_vue_type_script_setup_true_lang-DQpdkass.js → TabBar.vue_vue_type_script_setup_true_lang-DL7akl1T.js} +1 -1
- package/dist/assets/{TokenStreamDisplay.vue_vue_type_script_setup_true_lang-Bkp4Zqzc.js → TokenStreamDisplay.vue_vue_type_script_setup_true_lang-B2xlTJuS.js} +1 -1
- package/dist/assets/{ToolWorkshopPage-Bi-P9pPj.js → ToolWorkshopPage-BAQPeIGP.js} +1 -1
- package/dist/assets/{agent-store-uNRCwO3m.js → agent-store-CPoOtsp1.js} +1 -1
- package/dist/assets/{canvas-ai-db-vwusn4PB.js → canvas-ai-db-DkGslnpm.js} +1 -1
- package/dist/assets/{download-CE6FVTgu.js → download-ChpH3xF_.js} +1 -1
- package/dist/assets/{generate-service-CYQ8kwVP.js → generate-service-CzzxTSzU.js} +1 -1
- package/dist/assets/{google-auth-store-Dz06BePf.js → google-auth-store-CWJyfJot.js} +1 -1
- package/dist/assets/{index-FRDa6LAg.js → index-BkYEc6g3.js} +1 -1
- package/dist/assets/{index-Dv-x214f.js → index-BqaWqS5R.js} +1 -1
- package/dist/assets/{index-BwnEclbR.js → index-CE4LM5vl.js} +8 -8
- package/dist/assets/{info-DnW3KRin.js → info-D5-JTLE0.js} +1 -1
- package/dist/assets/{metrics-store-BDn0738m.js → metrics-store--HW_Yktg.js} +1 -1
- package/dist/assets/{papaparse.min-DzDO_wBU.js → papaparse.min-B9Ijd5eE.js} +1 -1
- package/dist/assets/{pencil-clhQxwX0.js → pencil-CsKrNJEo.js} +1 -1
- package/dist/assets/{play-4DIDJWWS.js → play-nicSMl5X.js} +1 -1
- package/dist/assets/{rag-store-Do5yRDAH.js → rag-store-CEuRiXlx.js} +3 -3
- package/dist/assets/{session-store-DRoQgYmX.js → session-store-Dt5jLOgV.js} +1 -1
- package/dist/assets/{share-2-DmfX3XRE.js → share-2-BdqfbjHE.js} +1 -1
- package/dist/assets/{square-BSrc21IW.js → square-KUkPfYFT.js} +1 -1
- package/dist/assets/{storage-store-BNeLgzhr.js → storage-store-ColSqJM3.js} +1 -1
- package/dist/assets/{stream-handler-m2cr76ko.js → stream-handler-DHKXR5XU.js} +1 -1
- package/dist/assets/{tool-workshop-store-CvrmwDRz.js → tool-workshop-store-CpWKGa76.js} +1 -1
- package/dist/assets/{toolcall-store-EOcmOTQ4.js → toolcall-store-C3ghhPw3.js} +1 -1
- package/dist/assets/{trash-2-DghOHCMp.js → trash-2-DnAmbFuB.js} +1 -1
- package/dist/index.html +1 -1
- package/package.json +89 -89
package/README.sr.md
ADDED
|
@@ -0,0 +1,297 @@
|
|
|
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>Vidi šta tvoj AI zaista radi.</strong></p>
|
|
7
|
+
<p align="center">
|
|
8
|
+
Strimovanje tokena u realnom vremenu, analiza kvaliteta, profilisanje performansi i praćenje troškova<br/>
|
|
9
|
+
za lokalne LLM-ove. Bez clouda. Bez API ključeva. Bez troškova.
|
|
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
|
+
<a href="README.fr.md">Français</a> •
|
|
22
|
+
<a href="README.zh-CN.md">中文</a> •
|
|
23
|
+
<a href="README.ar.md">العربية</a> •
|
|
24
|
+
<strong>Srpski</strong>
|
|
25
|
+
</p>
|
|
26
|
+
|
|
27
|
+
<p align="center">
|
|
28
|
+
<a href="#brzi-start">Brzi start</a> •
|
|
29
|
+
<a href="#mogućnosti">Mogućnosti</a> •
|
|
30
|
+
<a href="#snimci-ekrana">Snimci ekrana</a> •
|
|
31
|
+
<a href="#kome-je-namenjeno">Kome je namenjeno</a> •
|
|
32
|
+
<a href="CHANGELOG.md">Changelog</a>
|
|
33
|
+
</p>
|
|
34
|
+
|
|
35
|
+
<p align="center">
|
|
36
|
+
<img src="docs/public/screenshots/demo.gif" alt="LLMxRay demo — strimovanje tokena u realnom vremenu sa bojenjem prema poverenju" width="800" />
|
|
37
|
+
</p>
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Brzi start
|
|
42
|
+
|
|
43
|
+
**Jedna komanda. 30 sekundi.**
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npx llmxray
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Ili sa Docker-om:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
docker run -p 5174:5174 djovaneli/llmxray
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Otvori **http://localhost:5174** i počni razgovor. To je sve.
|
|
56
|
+
|
|
57
|
+
> **Preduslov:** [Ollama](https://ollama.com/download) pokrenut lokalno sa bar jednim povučenim modelom (`ollama pull llama3.2`).
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Zašto LLMxRay?
|
|
62
|
+
|
|
63
|
+
Pokrenuo si lokalni LLM. Razgovaraš sa njim. Ali šta se zaista desilo?
|
|
64
|
+
|
|
65
|
+
- Koliko je svaki token bio brz? U koje je model bio siguran?
|
|
66
|
+
- Da li kvalitet odgovora opada tokom dugih razgovora?
|
|
67
|
+
- Koliko bi ovo koštalo da si ga pokrenuo u cloudu?
|
|
68
|
+
- Da li se model ponavlja? Odbija? Generiše besmislice?
|
|
69
|
+
- Kako se temperatura 0.3 poredi sa 0.9 na *istom* promptu?
|
|
70
|
+
|
|
71
|
+
**LLMxRay odgovara na sve ovo — vizuelno, u realnom vremenu, besplatno.**
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Mogućnosti
|
|
76
|
+
|
|
77
|
+
### Razgovor u realnom vremenu sa inteligencijom tokena
|
|
78
|
+
Pričaj sa bilo kojim Ollama modelom i posmatraj tokene kako pristižu sa **bojenjem prema poverenju** — svaki token je obojen prema brzini generisanja. Podržava Markdown, razgovore u više rundi, priloge datoteka, vision modele i slash komande.
|
|
79
|
+
|
|
80
|
+
### Kapije kvaliteta odgovora
|
|
81
|
+
Svaki odgovor se automatski analizira. Obojene oznake se pojavljuju samo kada nešto nije u redu:
|
|
82
|
+
- **Ponavljanje** — preterano ponavljanje fraza (4-gram analiza)
|
|
83
|
+
- **Odbijanje** — "kao AI jezički model" i još 7 obrazaca
|
|
84
|
+
- **Besmislice** — visok udeo ne-ASCII karaktera
|
|
85
|
+
- **Prazno** — manje od 10 reči
|
|
86
|
+
- **Sečenje** — dostigao limit tokena bez završetka
|
|
87
|
+
|
|
88
|
+
### Radionica za poređenje modela
|
|
89
|
+
Do **4 slota** sa nezavisnim modelom, temperaturom i sistemskim promptom. Mogućnosti uključuju strimovanje uporedo, isticanje razlika na nivou reči, poređenje metrika i jedno-klik preset-e (Temperature Sweep, Deterministic Pair, Language Compare sa vizualizacijom Token Tax-a).
|
|
90
|
+
|
|
91
|
+
### Analitika performansi
|
|
92
|
+
- **Percentili latencije** (P50/P95/P99) za trajanje i TTFT
|
|
93
|
+
- **Inteligencija grešaka** — klasifikator sa 7 kategorija i vremenska osa
|
|
94
|
+
- **Toplotna mapa korišćenja** — 7×24 mreža tvojih aktivnih sati
|
|
95
|
+
- **Uticaj podešavanja** — scatter dijagrami temperature naspram tokena/sec
|
|
96
|
+
- Praćenje **hladnog i toplog starta** sa istorijom učitavanja modela
|
|
97
|
+
|
|
98
|
+
### Tabla troškova
|
|
99
|
+
Potrošnja tokena po modelu/danu sa procenom ekvivalentne cene u cloudu. Vidi koliko *štediš* tako što pokrećeš lokalno.
|
|
100
|
+
|
|
101
|
+
### Hirurški benchmark
|
|
102
|
+
Testiraj znanje modela skupovima pitanja sa višestrukim izborom. Koristi prave logprobs preko OpenAI-kompatibilnog endpointa za tačno merenje poverenja. Pravi custom skupove vizuelno ili pusti AI da ih generiše iz teme.
|
|
103
|
+
|
|
104
|
+
### Embeddings Lab i RAG pipeline
|
|
105
|
+
Embeduj tekst, vizualizuj vektore, meri kosinusnu sličnost. Izgradi lokalnu bazu znanja iz PDF, DOCX i CSV fajlova — podeljeno na delove, embedovano i pretraživo. Sve smešteno u IndexedDB. Bez troškova.
|
|
106
|
+
|
|
107
|
+
### Tool Workshop (vizuelno platno)
|
|
108
|
+
Drag-and-drop platno sa čvorovima za pravljenje definicija alata. Dvosmerna sinhronizacija koda (uređuj čvorove ili TypeScript — oba se ažuriraju). Sondiraj API-je, automatski generiši šeme, testiraj uživo.
|
|
109
|
+
|
|
110
|
+
### Fill-in-the-Middle Playground *(novo u v0.4.7)*
|
|
111
|
+
Dopuna koda za Qwen-Coder, CodeLlama, Codestral, DeepSeek-Coder i StarCoder. Dva polja (prefiks / sufiks), model popunjava prazninu. Koristi Ollama `suffix` polje na `/api/generate`. Spojeni pregled pokazuje rezultat kao što bi izgledao u tvom editoru.
|
|
112
|
+
|
|
113
|
+
### Protocol Observatory *(novo u v0.4.7)*
|
|
114
|
+
Pošalji isti prompt kroz tri Ollama protokola posluživanja — **nativni** `/api/chat`, **OpenAI-compat** `/v1/chat/completions` i **Anthropic-compat** `/v1/messages` — paralelno protiv tvog lokalnog modela. Strimovanje uporedo, metrike po protokolu i tab za poređenje envelope-a koji pokazuje kako svaki protokol uobličava razloge završetka, brojeve tokena i envelope grešaka. Bez clouda, bez API ključeva — sva tri endpointa su lokalna na `localhost:11434`.
|
|
115
|
+
|
|
116
|
+
### AI Training Pipeline
|
|
117
|
+
Pripremi podatke za obuku iz svojih razgovora. Označavaj, pregledaj i izvozi kao JSONL za fine-tuning.
|
|
118
|
+
|
|
119
|
+
### Lokalna AI baza istorije
|
|
120
|
+
Svaki eksperiment (benchmark-i, poređenja, razgovori, parovi za obuku) se automatski arhivira u pretraživu IndexedDB bazu sa filterima, trendovima, izvozom i pravilima zadržavanja.
|
|
121
|
+
|
|
122
|
+
### Višejezičnost
|
|
123
|
+
Potpuni prevodi na engleskom, francuskom, srpskom (latinica + ćirilica), kineskom i arapskom. Podrška za RTL raspored. Skele zajednice za hebrejski i japanski.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Ollama kompatibilnost
|
|
128
|
+
|
|
129
|
+
Testirano i verifikovano sa **Ollama 0.24.0** (trenutno najnovija stabilna verzija u maju 2026). LLMxRay koristi sledeće Ollama endpointe:
|
|
130
|
+
|
|
131
|
+
| Endpoint | Za šta se koristi |
|
|
132
|
+
|---|---|
|
|
133
|
+
| `/api/chat` | Strimovan chat (NDJSON, sa `tools`, `think`, `format` schema) |
|
|
134
|
+
| `/api/generate` | Generisanje + Fill-in-the-Middle preko `suffix` |
|
|
135
|
+
| `/api/tags`, `/api/show` | Lista modela + detekcija sposobnosti (`thinking`, `tools`, `vision`) |
|
|
136
|
+
| `/api/embed` | Vektorski embeddings za RAG |
|
|
137
|
+
| `/api/pull`, `/api/delete`, `/api/ps`, `/api/version` | Upravljanje modelima + status |
|
|
138
|
+
| `/v1/chat/completions` | OpenAI-compat putanja koju Surgical Benchmark koristi za prave logprobs |
|
|
139
|
+
| `/v1/messages` | Anthropic-compat putanja koju koristi Protocol Observatory |
|
|
140
|
+
|
|
141
|
+
**Kompatibilno sa:** Ollama 0.20 i novijim (starije verzije rade za chat/generate, ali nemaju `think` i JSON-schema `format`). **Preporučeno:** Ollama 0.24+ za potpunu paritetnost funkcija, uključujući Anthropic-compat endpoint (dodat u 0.23) i `think: "max"` režim (dodat u 0.21.3).
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Snimci ekrana
|
|
146
|
+
|
|
147
|
+
<table>
|
|
148
|
+
<tr>
|
|
149
|
+
<td width="50%">
|
|
150
|
+
|
|
151
|
+
**Chat sa strimovanjem tokena i poverenjem**
|
|
152
|
+

|
|
153
|
+
|
|
154
|
+
</td>
|
|
155
|
+
<td width="50%">
|
|
156
|
+
|
|
157
|
+
**Poređenje modela — uporedo**
|
|
158
|
+

|
|
159
|
+
|
|
160
|
+
</td>
|
|
161
|
+
</tr>
|
|
162
|
+
<tr>
|
|
163
|
+
<td width="50%">
|
|
164
|
+
|
|
165
|
+
**Detaljni pregled sesije — metrike i tajming**
|
|
166
|
+

|
|
167
|
+
|
|
168
|
+
</td>
|
|
169
|
+
<td width="50%">
|
|
170
|
+
|
|
171
|
+
**Benchmark sa radarom poverenja**
|
|
172
|
+

|
|
173
|
+
|
|
174
|
+
</td>
|
|
175
|
+
</tr>
|
|
176
|
+
<tr>
|
|
177
|
+
<td width="50%">
|
|
178
|
+
|
|
179
|
+
**Embeddings — kosinusna sličnost**
|
|
180
|
+

|
|
181
|
+
|
|
182
|
+
</td>
|
|
183
|
+
<td width="50%">
|
|
184
|
+
|
|
185
|
+
**Monitor sistema — hardver i Ollama status**
|
|
186
|
+

|
|
187
|
+
|
|
188
|
+
</td>
|
|
189
|
+
</tr>
|
|
190
|
+
</table>
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Kome je namenjeno
|
|
195
|
+
|
|
196
|
+
| Ti si... | LLMxRay ti pomaže da... |
|
|
197
|
+
|---|---|
|
|
198
|
+
| **Developer** | Debaguješ promptove, profilišeš latenciju, porediš modele, pregledaš tool pozive, pratiš troškove |
|
|
199
|
+
| **Istraživač** | Pokrećeš kontrolisane eksperimente sa konzistentnim podešavanjima kroz modele i temperature |
|
|
200
|
+
| **Student / Edukator** | Istražuješ ponašanje modela vizuelno — ugrađeni Educators Kit sa 9 interaktivnih modula |
|
|
201
|
+
| **Vođa AI tima** | Razumeš trendove kvaliteta, obrasce grešaka i potrošnju resursa kroz svoju lokalnu flotu |
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Opcije instalacije
|
|
206
|
+
|
|
207
|
+
### npx (preporučeno)
|
|
208
|
+
```bash
|
|
209
|
+
npx llmxray
|
|
210
|
+
npx llmxray --port 3000
|
|
211
|
+
npx llmxray --ollama-url http://192.168.1.50:11434
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Docker
|
|
215
|
+
```bash
|
|
216
|
+
docker run -p 5174:5174 djovaneli/llmxray
|
|
217
|
+
docker run -p 5174:5174 -e OLLAMA_URL=http://host.docker.internal:11434 djovaneli/llmxray
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Iz izvornog koda
|
|
221
|
+
```bash
|
|
222
|
+
git clone https://github.com/LogneBudo/llmxray.git
|
|
223
|
+
cd llmxray
|
|
224
|
+
npm install
|
|
225
|
+
npm run dev # http://localhost:5173
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Tehnološki stek
|
|
231
|
+
|
|
232
|
+
| Sloj | Tehnologija |
|
|
233
|
+
|---|---|
|
|
234
|
+
| Framework | Vue 3.5 + Composition API |
|
|
235
|
+
| Jezik | TypeScript 5.9 (strict) |
|
|
236
|
+
| Build | Vite 7.3 |
|
|
237
|
+
| Stilizovanje | Tailwind CSS 4.2 |
|
|
238
|
+
| State | Pinia 3 (store po domenu) |
|
|
239
|
+
| Grafici | Chart.js 4, D3.js 7 |
|
|
240
|
+
| Canvas | Vue Flow (vizuelni node editor) |
|
|
241
|
+
| Editor koda | CodeMirror 6 |
|
|
242
|
+
| Skladištenje | IndexedDB (nativan u browseru) |
|
|
243
|
+
| LLM Backend | Ollama (lokalno) |
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Arhitektura
|
|
248
|
+
|
|
249
|
+
**Strimovanje** — Čita Ollama NDJSON preko `fetch()` + `ReadableStream`. Tokeni reaktivno ažuriraju UI kroz Pinia store-ove.
|
|
250
|
+
|
|
251
|
+
**Poverenje tokena** — Aproksimirano iz latencije između tokena (brže = sigurnije). Jasno označeno kao aproksimacija. Benchmark-i koriste prave logprobs preko OpenAI-kompatibilnog endpointa.
|
|
252
|
+
|
|
253
|
+
**Store po domenu** — Svaki domen ima svoj Pinia store: tokens, sessions, metrics, reasoning, comparison, embeddings, quality, cost i drugi.
|
|
254
|
+
|
|
255
|
+
**Detekcija hardvera** — Custom Vite plugin direktno ispituje OS (PowerShell/proc/sysctl) za tačne hardverske specifikacije.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Razvoj
|
|
260
|
+
|
|
261
|
+
| Komanda | Šta radi |
|
|
262
|
+
|---|---|
|
|
263
|
+
| `npm run dev` | Dev server (port 5173) |
|
|
264
|
+
| `npm run build` | Provera tipova + production build |
|
|
265
|
+
| `npm run test` | Unit testovi (Vitest) |
|
|
266
|
+
| `npm run test:e2e` | End-to-end (Playwright) |
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Doprinosi
|
|
271
|
+
|
|
272
|
+
Doprinosi su dobrodošli! Pogledaj [CONTRIBUTING.md](CONTRIBUTING.md) za podešavanje i smernice.
|
|
273
|
+
|
|
274
|
+
**Prevodi zajednice su posebno dobrodošli** — skele su spremne za hebrejski i japanski.
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Licenca
|
|
279
|
+
|
|
280
|
+
[Apache License 2.0](LICENSE)
|
|
281
|
+
|
|
282
|
+
## Žig
|
|
283
|
+
|
|
284
|
+
**LLMxRay** je žig Ivana Stankovića ([LogneBudo](https://github.com/LogneBudo)). Pogledaj [TRADEMARK.md](TRADEMARK.md).
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
<p align="center">
|
|
289
|
+
<strong>Ako ti LLMxRay pomaže da bolje razumeš svoj AI, razmisli da daš zvezdicu.</strong><br/>
|
|
290
|
+
To pomaže drugima da otkriju projekat.
|
|
291
|
+
</p>
|
|
292
|
+
|
|
293
|
+
<p align="center">
|
|
294
|
+
<a href="https://github.com/LogneBudo/llmxray">
|
|
295
|
+
<img src="https://img.shields.io/github/stars/LogneBudo/llmxray?style=social" alt="GitHub stars" />
|
|
296
|
+
</a>
|
|
297
|
+
</p>
|
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,297 @@
|
|
|
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>看清您本地 AI 的真实运行状态。</strong></p>
|
|
7
|
+
<p align="center">
|
|
8
|
+
面向本地大语言模型的实时词元流、质量分析、性能剖析与成本跟踪。<br/>
|
|
9
|
+
无云端。无 API 密钥。无费用。
|
|
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
|
+
<a href="README.fr.md">Français</a> •
|
|
22
|
+
<strong>中文</strong> •
|
|
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="#快速开始">快速开始</a> •
|
|
29
|
+
<a href="#功能特性">功能特性</a> •
|
|
30
|
+
<a href="#界面截图">界面截图</a> •
|
|
31
|
+
<a href="#适用人群">适用人群</a> •
|
|
32
|
+
<a href="CHANGELOG.md">更新日志</a>
|
|
33
|
+
</p>
|
|
34
|
+
|
|
35
|
+
<p align="center">
|
|
36
|
+
<img src="docs/public/screenshots/demo.gif" alt="LLMxRay 演示 — 带置信度着色的实时词元流" width="800" />
|
|
37
|
+
</p>
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 快速开始
|
|
42
|
+
|
|
43
|
+
**一条命令,30 秒搞定。**
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npx llmxray
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
或使用 Docker:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
docker run -p 5174:5174 djovaneli/llmxray
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
打开 **http://localhost:5174** 即可开始对话。就这么简单。
|
|
56
|
+
|
|
57
|
+
> **前置条件:** 本地运行 [Ollama](https://ollama.com/download),并至少拉取一个模型(`ollama pull llama3.2`)。
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 为什么选择 LLMxRay?
|
|
62
|
+
|
|
63
|
+
您运行了一个本地大语言模型,与它对话,但实际发生了什么?
|
|
64
|
+
|
|
65
|
+
- 每个词元生成有多快?模型对哪些词元更有信心?
|
|
66
|
+
- 长对话中响应质量是否在下降?
|
|
67
|
+
- 如果在云端运行,这次对话要花多少钱?
|
|
68
|
+
- 模型是否在重复自己?拒绝回答?生成乱码?
|
|
69
|
+
- 在**相同提示**下,温度 0.3 与 0.9 有何区别?
|
|
70
|
+
|
|
71
|
+
**LLMxRay 用可视化方式实时免费回答以上所有问题。**
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 功能特性
|
|
76
|
+
|
|
77
|
+
### 实时对话与词元智能
|
|
78
|
+
与任何 Ollama 模型对话,观察词元到达时的**置信度着色** —— 每个词元根据生成速度被染色。支持 Markdown、多轮对话、文件附件、视觉模型与斜杠命令。
|
|
79
|
+
|
|
80
|
+
### 响应质量门禁
|
|
81
|
+
每条响应都会被自动分析。仅在出现问题时才显示彩色徽章:
|
|
82
|
+
- **重复** —— 短语过度重复(4-gram 分析)
|
|
83
|
+
- **拒绝** —— "作为一个 AI 语言模型" 等 7 种模式
|
|
84
|
+
- **乱码** —— 非 ASCII 比例过高
|
|
85
|
+
- **空响应** —— 少于 10 个词
|
|
86
|
+
- **截断** —— 在完成前触及词元上限
|
|
87
|
+
|
|
88
|
+
### 模型对比工作台
|
|
89
|
+
最多 **4 个槽位**,每个槽位独立配置模型、温度与系统提示。功能包括并排流式输出、词级别差异高亮、指标对比,以及一键预设(温度扫描、确定性配对、带词元税可视化的语言对比)。
|
|
90
|
+
|
|
91
|
+
### 性能分析
|
|
92
|
+
- **延迟百分位**(P50/P95/P99),涵盖总时长与首词元时间
|
|
93
|
+
- **错误情报** —— 7 类分类器与时间轴
|
|
94
|
+
- **使用热力图** —— 您活跃时段的 7×24 网格
|
|
95
|
+
- **设置影响** —— 温度与每秒词元数的散点图
|
|
96
|
+
- **冷启动与热启动**跟踪,含模型加载历史
|
|
97
|
+
|
|
98
|
+
### 成本仪表板
|
|
99
|
+
按模型/日统计词元用量,估算等效云端价格。看看您本地运行**节省**了多少。
|
|
100
|
+
|
|
101
|
+
### 外科手术式基准测试
|
|
102
|
+
用多选题套件测试模型知识。通过 OpenAI 兼容端点使用真实 logprobs 进行准确的置信度测量。可视化构建自定义题组,或让 AI 根据主题自动生成。
|
|
103
|
+
|
|
104
|
+
### 嵌入实验室与 RAG 流水线
|
|
105
|
+
嵌入文本、可视化向量、测量余弦相似度。从 PDF、DOCX 与 CSV 构建本地知识库 —— 分块、嵌入、可搜索。全部存储在 IndexedDB。零成本。
|
|
106
|
+
|
|
107
|
+
### 工具工坊(可视化画布)
|
|
108
|
+
拖拽式节点画布用于构建工具定义。双向代码同步(编辑节点或 TypeScript —— 两边同步更新)。探测 API、自动生成 schema、实时执行测试。
|
|
109
|
+
|
|
110
|
+
### 中段填充游乐场 *(v0.4.7 新增)*
|
|
111
|
+
为 Qwen-Coder、CodeLlama、Codestral、DeepSeek-Coder 与 StarCoder 提供代码补全。两个文本框(前缀 / 后缀),模型填补中间空缺。使用 Ollama 的 `/api/generate` 的 `suffix` 字段。拼接预览展示编辑器中的最终效果。
|
|
112
|
+
|
|
113
|
+
### 协议观察台 *(v0.4.7 新增)*
|
|
114
|
+
将同一提示并行发送至 Ollama 的三种服务协议 —— **原生** `/api/chat`、**OpenAI 兼容** `/v1/chat/completions`、**Anthropic 兼容** `/v1/messages` —— 全部针对您的本地模型运行。并排流式输出、各协议指标对比,以及信封差异标签页,展示各协议如何封装结束原因、词元计数与错误信封。无云端、无 API 密钥 —— 三个端点全部位于 `localhost:11434`。
|
|
115
|
+
|
|
116
|
+
### AI 训练流水线
|
|
117
|
+
从您的对话中筛选训练数据。标记、审查并导出为 JSONL 用于微调。
|
|
118
|
+
|
|
119
|
+
### 本地 AI 历史数据库
|
|
120
|
+
每次实验(基准测试、对比、对话、训练对)都会自动归档到可查询的 IndexedDB 数据库中,支持过滤、趋势、导出与保留策略。
|
|
121
|
+
|
|
122
|
+
### 多语言支持
|
|
123
|
+
完整翻译涵盖英语、法语、塞尔维亚语(拉丁与西里尔)、中文与阿拉伯语。支持 RTL 布局。希伯来语与日语的社区脚手架已就绪。
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Ollama 兼容性
|
|
128
|
+
|
|
129
|
+
针对 **Ollama 0.24.0**(2026 年 5 月最新稳定版)进行了测试与验证。LLMxRay 使用以下 Ollama 端点:
|
|
130
|
+
|
|
131
|
+
| 端点 | 用途 |
|
|
132
|
+
|---|---|
|
|
133
|
+
| `/api/chat` | 流式对话(NDJSON,支持 `tools`、`think`、`format` schema) |
|
|
134
|
+
| `/api/generate` | 生成与中段填充(通过 `suffix`) |
|
|
135
|
+
| `/api/tags`、`/api/show` | 模型列表与能力检测(`thinking`、`tools`、`vision`) |
|
|
136
|
+
| `/api/embed` | RAG 的向量嵌入 |
|
|
137
|
+
| `/api/pull`、`/api/delete`、`/api/ps`、`/api/version` | 模型管理与状态 |
|
|
138
|
+
| `/v1/chat/completions` | OpenAI 兼容路径,外科手术式基准测试用于获取真实 logprobs |
|
|
139
|
+
| `/v1/messages` | Anthropic 兼容路径,协议观察台使用 |
|
|
140
|
+
|
|
141
|
+
**兼容版本:** Ollama 0.20 及更新版本(更早版本支持对话/生成但缺少 `think` 与 JSON-schema `format`)。**推荐版本:** Ollama 0.24+,可获得完整功能,包括 Anthropic 兼容端点(0.23 新增)与 `think: "max"` 模式(0.21.3 新增)。
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 界面截图
|
|
146
|
+
|
|
147
|
+
<table>
|
|
148
|
+
<tr>
|
|
149
|
+
<td width="50%">
|
|
150
|
+
|
|
151
|
+
**带词元流与置信度的对话**
|
|
152
|
+

|
|
153
|
+
|
|
154
|
+
</td>
|
|
155
|
+
<td width="50%">
|
|
156
|
+
|
|
157
|
+
**模型对比 — 并排**
|
|
158
|
+

|
|
159
|
+
|
|
160
|
+
</td>
|
|
161
|
+
</tr>
|
|
162
|
+
<tr>
|
|
163
|
+
<td width="50%">
|
|
164
|
+
|
|
165
|
+
**会话深度分析 — 指标与时序**
|
|
166
|
+

|
|
167
|
+
|
|
168
|
+
</td>
|
|
169
|
+
<td width="50%">
|
|
170
|
+
|
|
171
|
+
**基准测试与置信度雷达**
|
|
172
|
+

|
|
173
|
+
|
|
174
|
+
</td>
|
|
175
|
+
</tr>
|
|
176
|
+
<tr>
|
|
177
|
+
<td width="50%">
|
|
178
|
+
|
|
179
|
+
**嵌入 — 余弦相似度**
|
|
180
|
+

|
|
181
|
+
|
|
182
|
+
</td>
|
|
183
|
+
<td width="50%">
|
|
184
|
+
|
|
185
|
+
**系统监视器 — 硬件与 Ollama 状态**
|
|
186
|
+

|
|
187
|
+
|
|
188
|
+
</td>
|
|
189
|
+
</tr>
|
|
190
|
+
</table>
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## 适用人群
|
|
195
|
+
|
|
196
|
+
| 您是... | LLMxRay 帮您... |
|
|
197
|
+
|---|---|
|
|
198
|
+
| **开发者** | 调试提示、剖析延迟、对比模型、检视工具调用、跟踪成本 |
|
|
199
|
+
| **研究者** | 在跨模型与温度的一致设置下运行受控实验 |
|
|
200
|
+
| **学生 / 教育者** | 可视化探索模型行为 —— 内置教育者工具包含 9 个交互式模块 |
|
|
201
|
+
| **AI 团队负责人** | 了解本地集群的质量趋势、错误模式与资源使用情况 |
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 安装方式
|
|
206
|
+
|
|
207
|
+
### npx(推荐)
|
|
208
|
+
```bash
|
|
209
|
+
npx llmxray
|
|
210
|
+
npx llmxray --port 3000
|
|
211
|
+
npx llmxray --ollama-url http://192.168.1.50:11434
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Docker
|
|
215
|
+
```bash
|
|
216
|
+
docker run -p 5174:5174 djovaneli/llmxray
|
|
217
|
+
docker run -p 5174:5174 -e OLLAMA_URL=http://host.docker.internal:11434 djovaneli/llmxray
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### 从源码构建
|
|
221
|
+
```bash
|
|
222
|
+
git clone https://github.com/LogneBudo/llmxray.git
|
|
223
|
+
cd llmxray
|
|
224
|
+
npm install
|
|
225
|
+
npm run dev # http://localhost:5173
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 技术栈
|
|
231
|
+
|
|
232
|
+
| 层级 | 技术 |
|
|
233
|
+
|---|---|
|
|
234
|
+
| 框架 | Vue 3.5 + Composition API |
|
|
235
|
+
| 语言 | TypeScript 5.9(严格模式) |
|
|
236
|
+
| 构建 | Vite 7.3 |
|
|
237
|
+
| 样式 | Tailwind CSS 4.2 |
|
|
238
|
+
| 状态管理 | Pinia 3(按关注点拆分 store) |
|
|
239
|
+
| 图表 | Chart.js 4、D3.js 7 |
|
|
240
|
+
| 画布 | Vue Flow(可视化节点编辑器) |
|
|
241
|
+
| 代码编辑器 | CodeMirror 6 |
|
|
242
|
+
| 存储 | IndexedDB(浏览器原生) |
|
|
243
|
+
| LLM 后端 | Ollama(本地) |
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## 架构
|
|
248
|
+
|
|
249
|
+
**流式传输** —— 通过 `fetch()` + `ReadableStream` 读取 Ollama NDJSON。词元通过 Pinia store 响应式地更新 UI。
|
|
250
|
+
|
|
251
|
+
**词元置信度** —— 根据词元间延迟近似计算(越快 = 越有信心)。明确标注为近似值。基准测试通过 OpenAI 兼容端点使用真实 logprobs。
|
|
252
|
+
|
|
253
|
+
**按关注点拆分 store** —— 每个领域都有自己的 Pinia store:tokens、sessions、metrics、reasoning、comparison、embeddings、quality、cost 等。
|
|
254
|
+
|
|
255
|
+
**硬件检测** —— 自定义 Vite 插件直接查询操作系统(PowerShell/proc/sysctl)获取准确的硬件规格。
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## 开发
|
|
260
|
+
|
|
261
|
+
| 命令 | 作用 |
|
|
262
|
+
|---|---|
|
|
263
|
+
| `npm run dev` | 开发服务器(端口 5173) |
|
|
264
|
+
| `npm run build` | 类型检查 + 生产构建 |
|
|
265
|
+
| `npm run test` | 单元测试(Vitest) |
|
|
266
|
+
| `npm run test:e2e` | 端到端测试(Playwright) |
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## 贡献
|
|
271
|
+
|
|
272
|
+
欢迎贡献!请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解设置与指南。
|
|
273
|
+
|
|
274
|
+
**特别欢迎社区翻译** —— 希伯来语与日语的脚手架文件已就绪。
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## 许可证
|
|
279
|
+
|
|
280
|
+
[Apache License 2.0](LICENSE)
|
|
281
|
+
|
|
282
|
+
## 商标
|
|
283
|
+
|
|
284
|
+
**LLMxRay** 是 Ivan Stankovic([LogneBudo](https://github.com/LogneBudo))的商标。请参阅 [TRADEMARK.md](TRADEMARK.md)。
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
<p align="center">
|
|
289
|
+
<strong>如果 LLMxRay 帮助您更好地理解您的 AI,请考虑给项目点亮一颗星。</strong><br/>
|
|
290
|
+
这能帮助更多人发现这个项目。
|
|
291
|
+
</p>
|
|
292
|
+
|
|
293
|
+
<p align="center">
|
|
294
|
+
<a href="https://github.com/LogneBudo/llmxray">
|
|
295
|
+
<img src="https://img.shields.io/github/stars/LogneBudo/llmxray?style=social" alt="GitHub stars" />
|
|
296
|
+
</a>
|
|
297
|
+
</p>
|