llms-py 2.0.25__py3-none-any.whl → 2.0.27__py3-none-any.whl

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.
llms/ui/markdown.mjs CHANGED
@@ -26,7 +26,7 @@ export const marked = (() => {
26
26
  export function renderMarkdown(content) {
27
27
  if (content) {
28
28
  content = content
29
- .replaceAll(`\\[ \\boxed{`,'\n<span class="inline-block text-xl text-blue-500 bg-blue-50 px-3 py-1 rounded">')
29
+ .replaceAll(`\\[ \\boxed{`,'\n<span class="inline-block text-xl text-blue-500 bg-blue-50 dark:text-blue-400 dark:bg-blue-950 px-3 py-1 rounded">')
30
30
  .replaceAll('} \\]','</span>\n')
31
31
  }
32
32
  return marked.parse(content)
@@ -160,19 +160,19 @@ function thinkTag() {
160
160
 
161
161
  // Create the expandable, scrollable component with Tailwind CSS
162
162
  return `
163
- <div class="my-4 border border-gray-200 rounded-lg shadow-sm">
164
- <button
163
+ <div class="my-4 border border-gray-200 dark:border-gray-700 rounded-lg shadow-sm">
164
+ <button type="button"
165
165
  id="${uniqueId}-toggle"
166
- class="flex justify-between items-center w-full py-2 px-4 text-left text-gray-700 font-medium hover:bg-gray-50 focus:outline-none"
166
+ class="flex justify-between items-center w-full py-2 px-4 text-left text-gray-700 dark:text-gray-300 font-medium hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-none"
167
167
  onclick="toggleThink('${uniqueId}')">
168
168
  <span>Thinking</span>
169
- <svg id="${uniqueId}-icon" class="h-5 w-5 text-gray-500 transform transition-transform" fill="none" viewBox="0 0 24 24" stroke="currentColor">
169
+ <svg id="${uniqueId}-icon" class="h-5 w-5 text-gray-500 dark:text-gray-400 transform transition-transform" fill="none" viewBox="0 0 24 24" stroke="currentColor">
170
170
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
171
171
  </svg>
172
172
  </button>
173
- <div
174
- id="${uniqueId}-content"
175
- class="hidden overflow-auto max-h-64 px-4 border-t border-gray-200 bg-gray-50"
173
+ <div
174
+ id="${uniqueId}-content"
175
+ class="hidden overflow-auto max-h-64 px-4 border-t border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900"
176
176
  style="max-height:16rem;">
177
177
  ${parsedContent}
178
178
  </div>
@@ -43,6 +43,8 @@
43
43
  b, strong { font-weight:600; }
44
44
  ::-webkit-scrollbar{width:8px;height:8px}
45
45
  ::-webkit-scrollbar-thumb{background-color:#ccc}
46
+ .dark ::-webkit-scrollbar{background:#1f2937}
47
+ .dark ::-webkit-scrollbar-thumb{background-color:#4b5563}
46
48
  [role=dialog].z-10 {
47
49
  z-index: 60;
48
50
  }
llms/ui/typography.css CHANGED
@@ -130,10 +130,6 @@
130
130
  .not-prose { max-width: unset; }
131
131
  .prose-table { max-width: 56rem; width: 56rem; padding-left: 1px; overflow-x: auto; }
132
132
  .hide-h2+h2 { display:none }
133
- .hljs, .prose :where(pre):not(:where([class~="not-prose"] *)) .hljs {
134
- color: var(--tw-prose-pre-code) !important;
135
- background-color: var(--tw-prose-pre-bg) !important;
136
- }
137
133
  @media (min-width: 1024px) {
138
134
  .lg\:prose-xl {
139
135
  font-size: 1.25rem;
@@ -285,6 +281,12 @@
285
281
  .prose pre::-webkit-scrollbar-thumb, .prose code::-webkit-scrollbar-thumb {
286
282
  background-color: rgb(100 116 139);
287
283
  }
284
+ .dark .prose pre::-webkit-scrollbar, .dark .prose code::-webkit-scrollbar {
285
+ background: #111827;
286
+ }
287
+ .dark .prose pre::-webkit-scrollbar-thumb, .dark .prose code::-webkit-scrollbar-thumb {
288
+ background-color: rgb(71 85 105);
289
+ }
288
290
 
289
291
  .html-format {
290
292
  max-width: unset;
@@ -390,6 +392,33 @@ h1:hover .header-anchor, h1 .header-anchor:focus, h2:hover .header-anchor, h2 .h
390
392
  font-weight: 600;
391
393
  }
392
394
 
395
+ pre {
396
+ overflow-x: auto;
397
+ font-weight: 400;
398
+ font-size: .875em;
399
+ line-height: 1.7142857;
400
+ margin-top: 1.7142857em;
401
+ margin-bottom: 1.7142857em;
402
+ border-radius: .375rem;
403
+ padding: .8571429em 1.1428571em;
404
+ max-width: calc(100vw - 1rem);
405
+ min-width: fit-content;
406
+ background-color: #282c34;
407
+ }
408
+ pre code.hljs {
409
+ display: block;
410
+ overflow-x: auto;
411
+ padding: 1em;
412
+ }
413
+ .message pre {
414
+ max-width: 100%;
415
+ min-width: auto;
416
+ }
417
+ .message pre code.hljs {
418
+ overflow-x: unset;
419
+ width: 100%;
420
+ }
421
+
393
422
  /* highlight.js - vs.css */
394
423
  .hljs {background:white;color:black}
395
424
  .hljs-comment,.hljs-quote,.hljs-variable{color:#008000}
@@ -413,38 +442,25 @@ pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5p
413
442
  .hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#e6c07b}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}
414
443
  .hljs-link{text-decoration:underline}
415
444
 
416
- /*highlightjs*/
417
- .hljs, .prose :where(pre):not(:where([class~="not-prose"] *)) .hljs {
418
- color: #e5e7eb !important;
419
- background-color: #282c34 !important;
445
+ /* Dark mode overrides for Chat-specific styles */
446
+ .dark .prose blockquote {
447
+ border-left-color: #374151;
448
+ color: #9ca3af;
420
449
  }
421
- .hljs-comment, .hljs-quote {
422
- color: rgb(148 163 184); /*text-slate-400*/
450
+ .dark .prose th,
451
+ .dark .prose td {
452
+ border-color: #374151;
423
453
  }
424
-
425
- pre {
426
- overflow-x: auto;
427
- font-weight: 400;
428
- font-size: .875em;
429
- line-height: 1.7142857;
430
- margin-top: 1.7142857em;
431
- margin-bottom: 1.7142857em;
432
- border-radius: .375rem;
433
- padding: .8571429em 1.1428571em;
434
- max-width: calc(100vw - 1rem);
435
- min-width: fit-content;
436
- background-color: #282c34 !important;
454
+ .dark .prose th {
455
+ background-color: #1f2937;
437
456
  }
438
- pre code.hljs {
439
- display: block;
440
- overflow-x: auto;
441
- padding: 1em;
457
+ .dark .prose td {
458
+ background-color: #111827;
442
459
  }
443
- .message pre {
444
- max-width: 100%;
445
- min-width: auto;
460
+ .hljs-comment, .hljs-quote {
461
+ color: rgb(148 163 184); /*text-slate-400*/
462
+ }
463
+ .dark .prose > pre, .dark .prose pre code.hljs {
464
+ background-color: #111827 !important;
465
+ color: #f3f4f6;
446
466
  }
447
- .message pre code.hljs {
448
- overflow-x: unset;
449
- width: 100%;
450
- }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: llms-py
3
- Version: 2.0.25
3
+ Version: 2.0.27
4
4
  Summary: A lightweight CLI tool and OpenAI-compatible server for querying multiple Large Language Model (LLM) providers
5
5
  Home-page: https://github.com/ServiceStack/llms
6
6
  Author: ServiceStack
@@ -111,56 +111,7 @@ test the response times for all configured providers and models, the results of
111
111
  pip install llms-py
112
112
  ```
113
113
 
114
- ### Using Docker
115
-
116
- **a) Simple - Run in a Docker container:**
117
-
118
- Run the server on port `8000`:
119
-
120
- ```bash
121
- docker run -p 8000:8000 -e GROQ_API_KEY=$GROQ_API_KEY ghcr.io/servicestack/llms:latest
122
- ```
123
-
124
- Get the latest version:
125
-
126
- ```bash
127
- docker pull ghcr.io/servicestack/llms:latest
128
- ```
129
-
130
- Use custom `llms.json` and `ui.json` config files outside of the container (auto created if they don't exist):
131
-
132
- ```bash
133
- docker run -p 8000:8000 -e GROQ_API_KEY=$GROQ_API_KEY \
134
- -v ~/.llms:/home/llms/.llms \
135
- ghcr.io/servicestack/llms:latest
136
- ```
137
-
138
- **b) Recommended - Use Docker Compose:**
139
-
140
- Download and use [docker-compose.yml](https://raw.githubusercontent.com/ServiceStack/llms/refs/heads/main/docker-compose.yml):
141
-
142
- ```bash
143
- curl -O https://raw.githubusercontent.com/ServiceStack/llms/refs/heads/main/docker-compose.yml
144
- ```
145
-
146
- Update API Keys in `docker-compose.yml` then start the server:
147
-
148
- ```bash
149
- docker-compose up -d
150
- ```
151
-
152
- **c) Build and run local Docker image from source:**
153
-
154
- ```bash
155
- git clone https://github.com/ServiceStack/llms
156
-
157
- docker-compose -f docker-compose.local.yml up -d --build
158
- ```
159
-
160
- After the container starts, you can access the UI and API at `http://localhost:8000`.
161
-
162
-
163
- See [DOCKER.md](DOCKER.md) for detailed instructions on customizing configuration files.
114
+ - [Using Docker](#using-docker)
164
115
 
165
116
  ## Quick Start
166
117
 
@@ -224,6 +175,63 @@ llms --disable openrouter_free codestral google_free groq
224
175
  llms --enable openrouter anthropic google openai grok z.ai qwen mistral
225
176
  ```
226
177
 
178
+ ## Using Docker
179
+
180
+ #### a) Simple - Run in a Docker container:
181
+
182
+ Run the server on port `8000`:
183
+
184
+ ```bash
185
+ docker run -p 8000:8000 -e GROQ_API_KEY=$GROQ_API_KEY ghcr.io/servicestack/llms:latest
186
+ ```
187
+
188
+ Get the latest version:
189
+
190
+ ```bash
191
+ docker pull ghcr.io/servicestack/llms:latest
192
+ ```
193
+
194
+ Use custom `llms.json` and `ui.json` config files outside of the container (auto created if they don't exist):
195
+
196
+ ```bash
197
+ docker run -p 8000:8000 -e GROQ_API_KEY=$GROQ_API_KEY \
198
+ -v ~/.llms:/home/llms/.llms \
199
+ ghcr.io/servicestack/llms:latest
200
+ ```
201
+
202
+ #### b) Recommended - Use Docker Compose:
203
+
204
+ Download and use [docker-compose.yml](https://raw.githubusercontent.com/ServiceStack/llms/refs/heads/main/docker-compose.yml):
205
+
206
+ ```bash
207
+ curl -O https://raw.githubusercontent.com/ServiceStack/llms/refs/heads/main/docker-compose.yml
208
+ ```
209
+
210
+ Update API Keys in `docker-compose.yml` then start the server:
211
+
212
+ ```bash
213
+ docker-compose up -d
214
+ ```
215
+
216
+ #### c) Build and run local Docker image from source:
217
+
218
+ ```bash
219
+ git clone https://github.com/ServiceStack/llms
220
+
221
+ docker-compose -f docker-compose.local.yml up -d --build
222
+ ```
223
+
224
+ After the container starts, you can access the UI and API at `http://localhost:8000`.
225
+
226
+
227
+ See [DOCKER.md](DOCKER.md) for detailed instructions on customizing configuration files.
228
+
229
+ ## GitHub OAuth Authentication
230
+
231
+ llms.py supports optional GitHub OAuth authentication to secure your web UI and API endpoints. When enabled, users must sign in with their GitHub account before accessing the application.
232
+
233
+ See [GITHUB_OAUTH_SETUP.md](GITHUB_OAUTH_SETUP.md) for detailed setup instructions.
234
+
227
235
  ## Configuration
228
236
 
229
237
  The configuration file [llms.json](llms/llms.json) is saved to `~/.llms/llms.json` and defines available providers, models, and default settings. Key sections:
@@ -0,0 +1,48 @@
1
+ llms/__init__.py,sha256=Mk6eHi13yoUxLlzhwfZ6A1IjsfSQt9ShhOdbLXTvffU,53
2
+ llms/__main__.py,sha256=hrBulHIt3lmPm1BCyAEVtB6DQ0Hvc3gnIddhHCmJasg,151
3
+ llms/index.html,sha256=_pkjdzCX95HTf19LgE4gMh6tLittcnf7M_jL2hSEbbM,3250
4
+ llms/llms.json,sha256=z9JmihUrqMuup7T4lT47xxLyL2SFC-UNnrLDrHv6nsU,41104
5
+ llms/main.py,sha256=v6N4_EWeGlgQSgpm0BynD5k34ke-LZnokDnrvjajQYQ,82441
6
+ llms/ui.json,sha256=iBOmpNeD5-o8AgUa51ymS-KemovJ7bm9J1fnL0nf8jk,134025
7
+ llms/ui/Analytics.mjs,sha256=2XPuhqm3hEyVR_XFSJFF2uYx7odk4LKswq_7Ri76WCI,71247
8
+ llms/ui/App.mjs,sha256=95pBXexTt3tgaX-Toh5oS0PdFxrVt3ZU8wu8Ywoz6FI,648
9
+ llms/ui/Avatar.mjs,sha256=TgouwV9bN-Ou1Tf2zCDtVaRiUB21TXZZPFCTlFL-xxQ,3387
10
+ llms/ui/Brand.mjs,sha256=kJn7O4Oo3tbZi87Ifbbcq7AZvhfUqbn_ZcXcyv_WI1A,2075
11
+ llms/ui/ChatPrompt.mjs,sha256=gVKBbxMmvIZWq70LWYBWUgWGemY_pnyMUelI9jRQbsI,25417
12
+ llms/ui/Main.mjs,sha256=MTYgkH1lfpzToTvqhmw4zHfZwY9_uCB44kFzoWcu7XE,42230
13
+ llms/ui/ModelSelector.mjs,sha256=iAFp6ZW2pFfS9L1fn07x8a0rJaqqh8w8Tkxej-10pPw,2520
14
+ llms/ui/OAuthSignIn.mjs,sha256=IdA9Tbswlh74a_-9e9YulOpqLfRpodRLGfCZ9sTZ5jU,4879
15
+ llms/ui/ProviderIcon.mjs,sha256=HTjlgtXEpekn8iNN_S0uswbbvL0iGb20N15-_lXdojk,9054
16
+ llms/ui/ProviderStatus.mjs,sha256=v5_Qx5kX-JbnJHD6Or5THiePzcX3Wf9ODcS4Q-kfQbM,6084
17
+ llms/ui/Recents.mjs,sha256=sRoesSktUvBZ7UjfFJwp0btCQj5eQvnTDjSUDzN8ySU,8864
18
+ llms/ui/SettingsDialog.mjs,sha256=vyqLOrACBICwT8qQ10oJAMOYeA1phrAyz93mZygn-9Y,19956
19
+ llms/ui/Sidebar.mjs,sha256=lVhVxC74UeQmBdhv_MxUmbdBJCfjWY0P6rtx1yJHywg,10932
20
+ llms/ui/SignIn.mjs,sha256=df3b-7L3ZIneDGbJWUk93K9RGo40gVeuR5StzT1ZH9g,2324
21
+ llms/ui/SystemPromptEditor.mjs,sha256=PffkNPV6hGbm1QZBKPI7yvWPZSBL7qla0d-JEJ4mxYo,1466
22
+ llms/ui/SystemPromptSelector.mjs,sha256=bxbJc_Ekqr2d7fO_4fOvMyjL3r60T5B-jQDEuwHBVVo,3151
23
+ llms/ui/Welcome.mjs,sha256=r9j7unF9CF3k7gEQBMRMVsa2oSjgHGNn46Oa5l5BwlY,950
24
+ llms/ui/ai.mjs,sha256=KhIXL9aOHgynjB4udbRCKAtb1iqISVPlt831Ys_lCoE,4768
25
+ llms/ui/app.css,sha256=V3wFB01yyC4t6q7e4NIiASjIytNwMBH8m3SVTJaGv30,109606
26
+ llms/ui/fav.svg,sha256=_R6MFeXl6wBFT0lqcUxYQIDWgm246YH_3hSTW0oO8qw,734
27
+ llms/ui/markdown.mjs,sha256=uWSyBZZ8a76Dkt53q6CJzxg7Gkx7uayX089td3Srv8w,6388
28
+ llms/ui/tailwind.input.css,sha256=QInTVDpCR89OTzRo9AePdAa-MX3i66RkhNOfa4_7UAg,12086
29
+ llms/ui/threadStore.mjs,sha256=VeGXAuUlA9-Ie9ZzOsay6InKBK_ewWFK6aTRmLTporg,16543
30
+ llms/ui/typography.css,sha256=hy0aE8XRz6ZbGbzjynpHeKDOahVoZlGqDFYSdZnqAJ0,19618
31
+ llms/ui/utils.mjs,sha256=cYrP17JwpQk7lLqTWNgVTOD_ZZAovbWnx2QSvKzeB24,5333
32
+ llms/ui/lib/chart.js,sha256=dx8FdDX0Rv6OZtZjr9FQh5h-twFsKjfnb-FvFlQ--cU,196176
33
+ llms/ui/lib/charts.mjs,sha256=MNym9qE_2eoH6M7_8Gj9i6e6-Y3b7zw9UQWCUHRF6x0,1088
34
+ llms/ui/lib/color.js,sha256=DDG7Pr-qzJHTPISZNSqP_qJR8UflKHEc_56n6xrBugQ,8273
35
+ llms/ui/lib/highlight.min.mjs,sha256=sG7wq8bF-IKkfie7S4QSyh5DdHBRf0NqQxMOEH8-MT0,127458
36
+ llms/ui/lib/idb.min.mjs,sha256=CeTXyV4I_pB5vnibvJuyXdMs0iVF2ZL0Z7cdm3w_QaI,3853
37
+ llms/ui/lib/marked.min.mjs,sha256=QRHb_VZugcBJRD2EP6gYlVFEsJw5C2fQ8ImMf_pA2_s,39488
38
+ llms/ui/lib/servicestack-client.mjs,sha256=UVafVbzhJ_0N2lzv7rlzIbzwnWpoqXxGk3N3FSKgOOc,54534
39
+ llms/ui/lib/servicestack-vue.mjs,sha256=r_-khYokisXJAIPDLh8Wq6YtcLAY6HNjtJlCZJjLy74,215181
40
+ llms/ui/lib/vue-router.min.mjs,sha256=fR30GHoXI1u81zyZ26YEU105pZgbbAKSXbpnzFKIxls,30418
41
+ llms/ui/lib/vue.min.mjs,sha256=iXh97m5hotl0eFllb3aoasQTImvp7mQoRJ_0HoxmZkw,163811
42
+ llms/ui/lib/vue.mjs,sha256=dS8LKOG01t9CvZ04i0tbFXHqFXOO_Ha4NmM3BytjQAs,537071
43
+ llms_py-2.0.27.dist-info/licenses/LICENSE,sha256=bus9cuAOWeYqBk2OuhSABVV1P4z7hgrEFISpyda_H5w,1532
44
+ llms_py-2.0.27.dist-info/METADATA,sha256=qfd5X3D5bEdJ20PSLIhlApH9sghWeeqD_W0sFgnZv9g,36283
45
+ llms_py-2.0.27.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
46
+ llms_py-2.0.27.dist-info/entry_points.txt,sha256=WswyE7PfnkZMIxboC-MS6flBD6wm-CYU7JSUnMhqMfM,40
47
+ llms_py-2.0.27.dist-info/top_level.txt,sha256=gC7hk9BKSeog8gyg-EM_g2gxm1mKHwFRfK-10BxOsa4,5
48
+ llms_py-2.0.27.dist-info/RECORD,,
@@ -1,47 +0,0 @@
1
- llms/__init__.py,sha256=Mk6eHi13yoUxLlzhwfZ6A1IjsfSQt9ShhOdbLXTvffU,53
2
- llms/__main__.py,sha256=hrBulHIt3lmPm1BCyAEVtB6DQ0Hvc3gnIddhHCmJasg,151
3
- llms/index.html,sha256=OA9mRmgh-dQrPqb0Z2Jv-cwEZ3YLPRxcWUN7ASjxO8s,2658
4
- llms/llms.json,sha256=6ZXd08HsxN9KX_gplD2UsxNKqZ8JxOl5TWDR2lIH07g,40779
5
- llms/main.py,sha256=49ayMoH5IlOOeV4lEOqE3sGU9_ooMJLhadDmDhT4gnE,71372
6
- llms/ui.json,sha256=iBOmpNeD5-o8AgUa51ymS-KemovJ7bm9J1fnL0nf8jk,134025
7
- llms/ui/Analytics.mjs,sha256=mAS5AUQjpnEIMyzGzOGE6fZxwxoVyq5QCitYQSSCEpQ,69151
8
- llms/ui/App.mjs,sha256=hXtUjaL3GrcIHieEK3BzIG72OVzrorBBS4RkE1DOGc4,439
9
- llms/ui/Avatar.mjs,sha256=3rHpxe_LuCDiNP895F3FOjWx4j377JA9rD1FLluvtgA,851
10
- llms/ui/Brand.mjs,sha256=0NN2JBLUC0OWERuLz9myrimlcA7v7D5B_EMd0sQQVDo,1905
11
- llms/ui/ChatPrompt.mjs,sha256=85O_kLVKWbbUDOUlvkuAineam_jrd6lzrj4O00p1XOg,21172
12
- llms/ui/Main.mjs,sha256=3Q6oR-F907EbDn-pv_SDPnErDMJcpOFgnze323lyhIs,40450
13
- llms/ui/ModelSelector.mjs,sha256=ASLTUaqig3cDMiGup01rpubC2RrrZvPd8IFrYcK8GyQ,2565
14
- llms/ui/ProviderIcon.mjs,sha256=HTjlgtXEpekn8iNN_S0uswbbvL0iGb20N15-_lXdojk,9054
15
- llms/ui/ProviderStatus.mjs,sha256=qF_rPdhyt9GffKdPCJdU0yanrDJ3cw1HLPygFP_KjEs,5744
16
- llms/ui/Recents.mjs,sha256=hmj7V-RXVw-DqMXjUr3OhFHTYQTkvkEhuNEDTGBf3Qw,8448
17
- llms/ui/SettingsDialog.mjs,sha256=Jm21s5CcZT97ZEhPc7c1WgnLOLdfSiC1SDroYsh7zM4,18095
18
- llms/ui/Sidebar.mjs,sha256=XPdbJo87H1vgTG0R9Ssqo_8XNhn9umkGwbubLpIOWqY,10519
19
- llms/ui/SignIn.mjs,sha256=df3b-7L3ZIneDGbJWUk93K9RGo40gVeuR5StzT1ZH9g,2324
20
- llms/ui/SystemPromptEditor.mjs,sha256=2CyIUvkIubqYPyIp5zC6_I8CMxvYINuYNjDxvMz4VRU,1265
21
- llms/ui/SystemPromptSelector.mjs,sha256=AuEtRwUf_RkGgene3nVA9bw8AeMb-b5_6ZLJCTWA8KQ,3051
22
- llms/ui/Welcome.mjs,sha256=QFAxN7sjWlhMvOIJCmHjNFCQcvpM_T-b4ze1ld9Hj7I,912
23
- llms/ui/ai.mjs,sha256=uQlTN0SdfC6n8erPfS6j6NwCpCPvfv3ewEUFtDk9UZY,2346
24
- llms/ui/app.css,sha256=e81FHQ-K7TlS7Cr2x_CCHqrvmVvg9I-m0InLQHRT_Dg,98992
25
- llms/ui/fav.svg,sha256=_R6MFeXl6wBFT0lqcUxYQIDWgm246YH_3hSTW0oO8qw,734
26
- llms/ui/markdown.mjs,sha256=O5UspOeD8-E23rxOLWcS4eyy2YejMbPwszCYteVtuoU,6221
27
- llms/ui/tailwind.input.css,sha256=yo_3A50uyiVSUHUWeqAMorXMhCWpZoE5lTO6OJIFlYg,11974
28
- llms/ui/threadStore.mjs,sha256=VeGXAuUlA9-Ie9ZzOsay6InKBK_ewWFK6aTRmLTporg,16543
29
- llms/ui/typography.css,sha256=Z5Fe2IQWnh7bu1CMXniYt0SkaN2fXOFlOuniXUW8oGM,19325
30
- llms/ui/utils.mjs,sha256=cYrP17JwpQk7lLqTWNgVTOD_ZZAovbWnx2QSvKzeB24,5333
31
- llms/ui/lib/chart.js,sha256=dx8FdDX0Rv6OZtZjr9FQh5h-twFsKjfnb-FvFlQ--cU,196176
32
- llms/ui/lib/charts.mjs,sha256=MNym9qE_2eoH6M7_8Gj9i6e6-Y3b7zw9UQWCUHRF6x0,1088
33
- llms/ui/lib/color.js,sha256=DDG7Pr-qzJHTPISZNSqP_qJR8UflKHEc_56n6xrBugQ,8273
34
- llms/ui/lib/highlight.min.mjs,sha256=sG7wq8bF-IKkfie7S4QSyh5DdHBRf0NqQxMOEH8-MT0,127458
35
- llms/ui/lib/idb.min.mjs,sha256=CeTXyV4I_pB5vnibvJuyXdMs0iVF2ZL0Z7cdm3w_QaI,3853
36
- llms/ui/lib/marked.min.mjs,sha256=QRHb_VZugcBJRD2EP6gYlVFEsJw5C2fQ8ImMf_pA2_s,39488
37
- llms/ui/lib/servicestack-client.mjs,sha256=UVafVbzhJ_0N2lzv7rlzIbzwnWpoqXxGk3N3FSKgOOc,54534
38
- llms/ui/lib/servicestack-vue.mjs,sha256=r_-khYokisXJAIPDLh8Wq6YtcLAY6HNjtJlCZJjLy74,215181
39
- llms/ui/lib/vue-router.min.mjs,sha256=fR30GHoXI1u81zyZ26YEU105pZgbbAKSXbpnzFKIxls,30418
40
- llms/ui/lib/vue.min.mjs,sha256=iXh97m5hotl0eFllb3aoasQTImvp7mQoRJ_0HoxmZkw,163811
41
- llms/ui/lib/vue.mjs,sha256=dS8LKOG01t9CvZ04i0tbFXHqFXOO_Ha4NmM3BytjQAs,537071
42
- llms_py-2.0.25.dist-info/licenses/LICENSE,sha256=bus9cuAOWeYqBk2OuhSABVV1P4z7hgrEFISpyda_H5w,1532
43
- llms_py-2.0.25.dist-info/METADATA,sha256=QZtFwWTYyu0Swd4RbeyaPL4jc927X46lD2JEwMtf4ME,35942
44
- llms_py-2.0.25.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
45
- llms_py-2.0.25.dist-info/entry_points.txt,sha256=WswyE7PfnkZMIxboC-MS6flBD6wm-CYU7JSUnMhqMfM,40
46
- llms_py-2.0.25.dist-info/top_level.txt,sha256=gC7hk9BKSeog8gyg-EM_g2gxm1mKHwFRfK-10BxOsa4,5
47
- llms_py-2.0.25.dist-info/RECORD,,