llms-py 3.0.7__py3-none-any.whl → 3.0.8__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.
@@ -351,6 +351,44 @@
351
351
  padding: 1em;
352
352
  }
353
353
 
354
+ /* Tool Description Code Blocks - Light Mode by default */
355
+ .tool-description pre {
356
+ background-color: #f8fafc !important;
357
+ color: #1f2937 !important;
358
+ border: 1px solid #e2e8f0;
359
+ border-radius: 0.5rem;
360
+ padding: 0.75rem 1rem;
361
+ margin: 0.75rem 0;
362
+ overflow-x: auto;
363
+ }
364
+
365
+ .tool-description code {
366
+ color: inherit !important;
367
+ }
368
+
369
+ .tool-description code.hljs {
370
+ background: transparent !important;
371
+ padding: 0;
372
+ font-size: 0.85em;
373
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
374
+ }
375
+
376
+
377
+ /* Dark Mode Overrides */
378
+ .dark .tool-description pre {
379
+ background-color: #1f2937 !important;
380
+ border-color: #374151;
381
+ color: #e5e7eb !important;
382
+ }
383
+
384
+ .dark .tool-description code {
385
+ color: inherit !important;
386
+ }
387
+
388
+ .dark .tool-description code.hljs {
389
+ color: #e5e7eb;
390
+ }
391
+
354
392
  .message pre {
355
393
  max-width: 100%;
356
394
  min-width: auto;
@@ -662,12 +700,20 @@
662
700
  .message pre {
663
701
  max-width: 500px !important;
664
702
  }
703
+
704
+ .has-iframes {
705
+ min-width: 640px;
706
+ }
665
707
  }
666
708
 
667
709
  @media (min-width: 768px) {
668
710
  .message pre {
669
711
  max-width: 600px !important;
670
712
  }
713
+
714
+ .has-iframes {
715
+ min-width: 640px;
716
+ }
671
717
  }
672
718
 
673
719
  @media (min-width: 1024px) {
@@ -676,6 +722,10 @@
676
722
  .message .prose pre {
677
723
  max-width: 700px !important;
678
724
  }
725
+
726
+ .has-iframes {
727
+ min-width: 740px;
728
+ }
679
729
  }
680
730
 
681
731
  @media (min-width: 1280px) {
@@ -684,5 +734,9 @@
684
734
  .message .prose pre {
685
735
  max-width: 800px !important;
686
736
  }
737
+
738
+ .has-iframes {
739
+ min-width: 840px;
740
+ }
687
741
  }
688
742
  }
llms/ui/utils.mjs CHANGED
@@ -123,6 +123,7 @@ export function tokensTitle(usage) {
123
123
  return title.join('\n')
124
124
  }
125
125
 
126
+
126
127
  // Accessible in views via $fmt
127
128
  export function utilsFormatters() {
128
129
  function relativeTime(timestamp) {
@@ -202,6 +203,32 @@ export function utilsFormatters() {
202
203
  }
203
204
  }
204
205
 
206
+ const htmlStartTags = ['<!doctype', '<html', '<head', '<body', '<script', '<style', '<link']
207
+ export function isHtml(s) {
208
+ if (!s || typeof s != 'string') return false
209
+ const lower = s.toLowerCase().trim()
210
+ const isHtml = htmlStartTags.some(tag => lower.startsWith(tag))
211
+ return isHtml
212
+ }
213
+
214
+ /**
215
+ * @param {object|array} type
216
+ * @param {'div'|'table'|'thead'|'th'|'tr'|'td'} tag
217
+ * @param {number} depth
218
+ * @param {string} cls
219
+ * @param {number} index
220
+ */
221
+ function htmlFormatClasses(type, tag, depth, cls, index) {
222
+ cls = cls.replace('shadow ring-1 ring-black/5 md:rounded-lg', '')
223
+ if (tag == 'th') {
224
+ cls += ' lowercase'
225
+ }
226
+ if (tag == 'td') {
227
+ cls += ' whitespace-pre-wrap'
228
+ }
229
+ return cls
230
+ }
231
+
205
232
  /**
206
233
  * Returns an ever-increasing unique integer id.
207
234
  */
@@ -227,6 +254,8 @@ export function utilsFunctions() {
227
254
  deepClone,
228
255
  toModelInfo,
229
256
  pluralize,
257
+ isHtml,
258
+ htmlFormatClasses,
230
259
  }
231
260
  }
232
261
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: llms-py
3
- Version: 3.0.7
3
+ Version: 3.0.8
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
@@ -3,18 +3,18 @@ llms/__main__.py,sha256=hrBulHIt3lmPm1BCyAEVtB6DQ0Hvc3gnIddhHCmJasg,151
3
3
  llms/db.py,sha256=oozp5I5lECVO8oZEFwcZl3ES5mARqWeR1BkoqG5kSqM,11687
4
4
  llms/index.html,sha256=nGk1Djtn9p7l6LuKp4Kg0JIB9fCzxtTWXFfmDb4ggpc,1658
5
5
  llms/llms.json,sha256=NEr9kJRkUGZ2YZHbWC-haGPlVVL2Qtnx4kKZENGH1wk,11494
6
- llms/main.py,sha256=sVKouu2hGMbXnQ9fQwmz7TgX5LBBfqhSCSYdkvynKKw,157499
6
+ llms/main.py,sha256=fqfG6QqflDwvsqUIscSMIc-15GetyBeRY4YJAIqCnSs,169747
7
7
  llms/providers-extra.json,sha256=_6DmGBiQY9LM6_Y0zOiObYn7ba4g3akSNQfmHcYlENc,11101
8
8
  llms/providers.json,sha256=yjhDurlwo70xqfV0HNLiZaCpw3WvtIgkjoLahQIKX2w,282530
9
9
  llms/extensions/analytics/ui/index.mjs,sha256=m1XwaqYCLwK267JAUCAltkN_nOXep0GxfpvGNS5i4_w,69547
10
10
  llms/extensions/app/README.md,sha256=TKoblZpHlheLCh_dfXOxqTc5OvxlgMBa-vKo8Hqb2gg,1370
11
11
  llms/extensions/app/__init__.py,sha256=aU8Bfliw--Xj1bsKL3PSoX6MY1ZNgweNyMWS1V_YG4s,20855
12
12
  llms/extensions/app/db.py,sha256=CqpHReXXjrLXXNxINo-wsnBJenKZVVHKlWlhtXFWj08,21503
13
- llms/extensions/app/ui/Recents.mjs,sha256=HT9R2IEus3dGEqtKPGrgX1eMp4EQ2j2jLwv-Fn1Us5E,9253
13
+ llms/extensions/app/ui/Recents.mjs,sha256=2ypAKUp9_Oqcive1nUWZ8I2PQTBomBg_Pkjygi4oPgs,9261
14
14
  llms/extensions/app/ui/index.mjs,sha256=sB9176LLNuKFsZ28yL-tROA6J4xePNtvxtSrzFcinRo,13271
15
- llms/extensions/app/ui/threadStore.mjs,sha256=5qZv3maUfpLXnoEQN6EPYXUbe3B_OCgT_ttoBpvA4Dk,12192
15
+ llms/extensions/app/ui/threadStore.mjs,sha256=CLlD-1HBO1yhZBHLfL0ZdA4quT4R07qr1JW4a8igVNc,12287
16
16
  llms/extensions/core_tools/CALCULATOR.md,sha256=pJRtCVF01BgxFrSNh2Ys_lrRi3SFwLgJzAX93AGh93Q,1944
17
- llms/extensions/core_tools/__init__.py,sha256=SkBBjNYM0Vxq2ftAW_0HaA1brl-VrI3rYUcjvtpEBQ4,23078
17
+ llms/extensions/core_tools/__init__.py,sha256=Y5ZlcSg5yVXxIGX_FVbDcHyeXx3ex_rzRQ2hli6Nk38,23280
18
18
  llms/extensions/core_tools/ui/index.mjs,sha256=KycJ2FcQ6BieBY7fjWGxVBGHN6WuFx712OFrO6flXww,31770
19
19
  llms/extensions/core_tools/ui/codemirror/codemirror.css,sha256=60lOqXLSZh74b39qxlbdZ4bXIeScnBtG4euWfktvm_M,8720
20
20
  llms/extensions/core_tools/ui/codemirror/codemirror.js,sha256=7cA89SlK249o7tVfiEWIiqDEA6ZEWxX4CoZmofVA14s,402008
@@ -131,7 +131,7 @@ llms/extensions/providers/__init__.py,sha256=C5zOBQEOB2L96rAZdjV42fPVk_dZxSh2Dv3
131
131
  llms/extensions/providers/anthropic.py,sha256=LAOdpa_cP1zBUvSQ-ct3kVjRga-nPJ1U_KBb99N4IEk,10429
132
132
  llms/extensions/providers/cerebras.py,sha256=HaeFW0GwbD6V6Zrrwqyv78kQb0VXg9oHmykvJfIOOYE,1417
133
133
  llms/extensions/providers/chutes.py,sha256=5ZrfbqoOhgzKLQy_qULcp4jlvW5WXPR0jP9kN2Jzb9g,6229
134
- llms/extensions/providers/google.py,sha256=JBC9KZtjlwykPU4N7FpXZJH7sgsZf4B6RNRhNL79juw,24413
134
+ llms/extensions/providers/google.py,sha256=9P90bEefRA18tpjfEuAz1T5YpwzdOngrTFhw-LI3eXg,24434
135
135
  llms/extensions/providers/nvidia.py,sha256=C6cwqn3EufYDfRIgbc8MDkQNyD6w3c7hbjfYaHJSDik,4279
136
136
  llms/extensions/providers/openai.py,sha256=hkE-LVsw6M92_qEbpayuPo17Z1OWKHe7lm2wduLMng8,6138
137
137
  llms/extensions/providers/openrouter.py,sha256=5SfCJKo1aGKoDGez6HXYQe9elMMo9sSEDFqqdxamAgA,3330
@@ -140,18 +140,18 @@ llms/extensions/system_prompts/README.md,sha256=ayr18lnSsGp62bunC6kxkvcSvZki775r
140
140
  llms/extensions/system_prompts/__init__.py,sha256=TZy1CS2dPkBNBA_Ovf9BlVetZqTt2NgnsrZi6Mtg_C0,1535
141
141
  llms/extensions/system_prompts/ui/index.mjs,sha256=_pVCreAebSzE9dzcHF2kiYODwP-fDHCqtUQB-X5Io9Q,12107
142
142
  llms/extensions/system_prompts/ui/prompts.json,sha256=t5DD3bird-87wFa4OlW-bC2wdoYDrVzfyc8TO5OaotI,128489
143
- llms/extensions/tools/__init__.py,sha256=yfIK7dVqYiZGX5VeJ3x7HQWLPQfuPqeNYJsd0lpZUM4,120
144
- llms/extensions/tools/ui/index.mjs,sha256=Nu69U6odCUh8uu1i8d5f8ryO4Lj_OFbPX2LnVyYu1fk,9602
145
- llms/ui/App.mjs,sha256=zU-GtbcSMREizjUS9nWiMK6m_oT14MNJ-p_RCz2RVqA,7445
146
- llms/ui/ai.mjs,sha256=uuAoDpjTwjRsMX9Ru1R6imK9pTUbFk0D9j4RUORN20A,6540
147
- llms/ui/app.css,sha256=4vn_t3-8gEFcVi_hNMgpjmI7pxvIFPqXaSdFCmltLDs,181153
148
- llms/ui/ctx.mjs,sha256=eFTkWzVBKRU5YDFFVUq3ZDd6eMPa4VRQpE3q0O5Sfgg,12337
143
+ llms/extensions/tools/__init__.py,sha256=u76604Cn_sRFQRqeA_pkVEty27V688Mt9Z7Kh63yDr8,4825
144
+ llms/extensions/tools/ui/index.mjs,sha256=IbGB2FQJ5VL4a8arwoR9C79vUCNrz8VIyQnHZ4vxU9o,34486
145
+ llms/ui/App.mjs,sha256=CoUzO9mV__-jV19NKHYIbwHsjWMnO11jyNSbnJhe1gQ,7486
146
+ llms/ui/ai.mjs,sha256=HViKrogWE2PWiu70qz7M-svbHKi1zVibdI8K2QrR6_0,6540
147
+ llms/ui/app.css,sha256=s74IHYR4RYoe8S13_yiqmHUG58M9AbDccbQ3HfdFdkg,186262
148
+ llms/ui/ctx.mjs,sha256=X4scgXEQ9bMUfQl36sM4A3o2Ufad3LRwItxfmSu1xwc,12838
149
149
  llms/ui/fav.svg,sha256=_R6MFeXl6wBFT0lqcUxYQIDWgm246YH_3hSTW0oO8qw,734
150
- llms/ui/index.mjs,sha256=o-J2GVYYGFtfV4Pzlj-kjK4UrVP6ovTre5jD44gAiIc,4316
150
+ llms/ui/index.mjs,sha256=7GMbFyG3L4k6dxSrQYQ0BLzqL976xw5HeaqKco0THHA,4296
151
151
  llms/ui/markdown.mjs,sha256=ZeGXxX4_UEUCVkLZzmwXlqWBfReSFzBivdxNu8uSgFk,6648
152
- llms/ui/tailwind.input.css,sha256=ZneSjo_uNcvqMT8cAU837yUZoLZ_sWfgr5Gto7TNJPc,15786
152
+ llms/ui/tailwind.input.css,sha256=xOrT0m8HCZRHhnPv4K43HyQCTO_0SpP-tYvxpP8jzYY,17027
153
153
  llms/ui/typography.css,sha256=6o7pbMIamRVlm2GfzSStpcOG4T5eFCK_WcQ3RIHKAsU,19587
154
- llms/ui/utils.mjs,sha256=puVg5PHMW6GQP3ZSAj9eEgFdA10aHjCDd6ty4-wMeBw,6700
154
+ llms/ui/utils.mjs,sha256=lurZdnTk4ngR7ziWKeUNvpWVmBg2V6phqngBYWcCL5U,7483
155
155
  llms/ui/lib/chart.js,sha256=dx8FdDX0Rv6OZtZjr9FQh5h-twFsKjfnb-FvFlQ--cU,196176
156
156
  llms/ui/lib/charts.mjs,sha256=OPFAifcA4MPRv8pw6I7glVh7Xccv8guio0k35zPBDIY,926
157
157
  llms/ui/lib/color.js,sha256=DDG7Pr-qzJHTPISZNSqP_qJR8UflKHEc_56n6xrBugQ,8273
@@ -166,12 +166,12 @@ llms/ui/lib/vue.mjs,sha256=75FuLhUTPk19sncwNIrm0BGEL0_Qw298-_v01fPWYoI,542872
166
166
  llms/ui/modules/icons.mjs,sha256=LGcH0ys0QLS2ZKCO42qHpwPYbBV_EssoWLezU4XZEzU,27751
167
167
  llms/ui/modules/layout.mjs,sha256=8pAxs8bedQI3b3eRA9nrfpLZznLmrpp4BZvigYAQjpQ,12572
168
168
  llms/ui/modules/model-selector.mjs,sha256=6U4rAZ7vmQELFRQGWk4YEtq02v3lyHdMq6yUOp-ArXg,43184
169
- llms/ui/modules/chat/ChatBody.mjs,sha256=u1K8UfG-YNi_5lyyWdpcXekyXUWihNe25IsjcCDnT1E,42889
169
+ llms/ui/modules/chat/ChatBody.mjs,sha256=8k81r1HTxrkmLsG7xvDmYMInThiZ37xVQBfld1tLWW0,50366
170
170
  llms/ui/modules/chat/SettingsDialog.mjs,sha256=HMBJTwrapKrRIAstIIqp0QlJL5O-ho4hzgvfagPfsX8,19930
171
- llms/ui/modules/chat/index.mjs,sha256=BzfDMVVV33kQgJvwFMiTCYUy76g7lfc9JYuRytiwfU0,39314
172
- llms_py-3.0.7.dist-info/licenses/LICENSE,sha256=bus9cuAOWeYqBk2OuhSABVV1P4z7hgrEFISpyda_H5w,1532
173
- llms_py-3.0.7.dist-info/METADATA,sha256=o9PwqaR6lxJbKkn-HJjxVN1f8TMM8LGSxaGeQosYvgk,2191
174
- llms_py-3.0.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
175
- llms_py-3.0.7.dist-info/entry_points.txt,sha256=WswyE7PfnkZMIxboC-MS6flBD6wm-CYU7JSUnMhqMfM,40
176
- llms_py-3.0.7.dist-info/top_level.txt,sha256=gC7hk9BKSeog8gyg-EM_g2gxm1mKHwFRfK-10BxOsa4,5
177
- llms_py-3.0.7.dist-info/RECORD,,
171
+ llms/ui/modules/chat/index.mjs,sha256=lfSbERMaM3bLsKhdJJPWwL4-FGr8U_ftlvqW5vC3T1s,39762
172
+ llms_py-3.0.8.dist-info/licenses/LICENSE,sha256=bus9cuAOWeYqBk2OuhSABVV1P4z7hgrEFISpyda_H5w,1532
173
+ llms_py-3.0.8.dist-info/METADATA,sha256=cRqd2LtGH_jsnLN4IzvCvUQ3qnPKBLpsJTc_qDuQE1A,2191
174
+ llms_py-3.0.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
175
+ llms_py-3.0.8.dist-info/entry_points.txt,sha256=WswyE7PfnkZMIxboC-MS6flBD6wm-CYU7JSUnMhqMfM,40
176
+ llms_py-3.0.8.dist-info/top_level.txt,sha256=gC7hk9BKSeog8gyg-EM_g2gxm1mKHwFRfK-10BxOsa4,5
177
+ llms_py-3.0.8.dist-info/RECORD,,