llms-py 3.0.19__py3-none-any.whl → 3.0.21__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/extensions/app/__init__.py +4 -1
- llms/extensions/computer/filesystem.py +37 -6
- llms/extensions/providers/openrouter.py +1 -1
- llms/main.py +15 -6
- llms/providers.json +1 -1
- llms/ui/ai.mjs +1 -1
- llms/ui/app.css +0 -463
- llms/ui/ctx.mjs +16 -3
- llms/ui/index.mjs +2 -2
- llms/ui/lib/servicestack-vue.mjs +3 -3
- llms/ui/markdown.mjs +2 -1
- llms/ui/modules/chat/ChatBody.mjs +3 -1
- llms/ui/utils.mjs +48 -1
- {llms_py-3.0.19.dist-info → llms_py-3.0.21.dist-info}/METADATA +1 -1
- {llms_py-3.0.19.dist-info → llms_py-3.0.21.dist-info}/RECORD +19 -19
- {llms_py-3.0.19.dist-info → llms_py-3.0.21.dist-info}/WHEEL +0 -0
- {llms_py-3.0.19.dist-info → llms_py-3.0.21.dist-info}/entry_points.txt +0 -0
- {llms_py-3.0.19.dist-info → llms_py-3.0.21.dist-info}/licenses/LICENSE +0 -0
- {llms_py-3.0.19.dist-info → llms_py-3.0.21.dist-info}/top_level.txt +0 -0
llms/ui/markdown.mjs
CHANGED
|
@@ -23,7 +23,8 @@ export function createMarked() {
|
|
|
23
23
|
return ret
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export const marked = createMarked()
|
|
26
|
+
export const marked = createMarked()
|
|
27
|
+
export const markedFallback = createMarked()
|
|
27
28
|
|
|
28
29
|
export function renderMarkdown(content) {
|
|
29
30
|
if (Array.isArray(content)) {
|
|
@@ -15,6 +15,7 @@ function hasJsonStructure(str) {
|
|
|
15
15
|
function isEmpty(v) {
|
|
16
16
|
return !v || v === '{}' || v === '[]' || v === 'null' || v === 'undefined' || v === '""' || v === "''" || v === "``"
|
|
17
17
|
}
|
|
18
|
+
|
|
18
19
|
function embedHtml(html) {
|
|
19
20
|
const resizeScript = `<script>
|
|
20
21
|
let lastH = 0;
|
|
@@ -512,7 +513,7 @@ export const ToolArguments = {
|
|
|
512
513
|
<TextViewer prefsName="toolArgs" :text="v" />
|
|
513
514
|
</td>
|
|
514
515
|
<td data-arg="value" v-else class="align-top py-2 px-4 text-sm whitespace-pre-wrap">
|
|
515
|
-
<HtmlFormat :value="v" :classes="$utils.htmlFormatClasses" />
|
|
516
|
+
<HtmlFormat :value="v" :classes="$utils.htmlFormatClasses" :formatText="$utils.sanitizeHtml" />
|
|
516
517
|
</td>
|
|
517
518
|
</tr>
|
|
518
519
|
</table>
|
|
@@ -527,6 +528,7 @@ export const ToolArguments = {
|
|
|
527
528
|
value: String,
|
|
528
529
|
},
|
|
529
530
|
setup(props) {
|
|
531
|
+
const ctx = inject('ctx')
|
|
530
532
|
const refArgs = ref()
|
|
531
533
|
const maximized = ref({})
|
|
532
534
|
const dict = computed(() => {
|
llms/ui/utils.mjs
CHANGED
|
@@ -220,7 +220,7 @@ const htmlEntities = {
|
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
export function encodeHtml(str) {
|
|
223
|
-
if (!str) return ''
|
|
223
|
+
if (typeof str !== 'string' || !str) return ''
|
|
224
224
|
return str.replace(/[&<>"']/g, m => htmlEntities[m]);
|
|
225
225
|
}
|
|
226
226
|
|
|
@@ -242,6 +242,52 @@ function htmlFormatClasses(type, tag, depth, cls, index) {
|
|
|
242
242
|
return cls
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
+
const dangerousTags = [
|
|
246
|
+
'script',
|
|
247
|
+
'iframe',
|
|
248
|
+
'object',
|
|
249
|
+
'embed',
|
|
250
|
+
'link',
|
|
251
|
+
'style',
|
|
252
|
+
'meta',
|
|
253
|
+
'base',
|
|
254
|
+
'frame',
|
|
255
|
+
'frameset',
|
|
256
|
+
'applet',
|
|
257
|
+
'noscript',
|
|
258
|
+
'template'
|
|
259
|
+
]
|
|
260
|
+
const anyDangerousTag = new RegExp(`<(${dangerousTags.join('|')})`, 'i')
|
|
261
|
+
|
|
262
|
+
export function sanitizeHtml(html) {
|
|
263
|
+
if (!html || typeof html !== 'string') return html
|
|
264
|
+
|
|
265
|
+
let result = html
|
|
266
|
+
let lowerResult = result.toLowerCase()
|
|
267
|
+
function updateResult(r) {
|
|
268
|
+
result = r
|
|
269
|
+
lowerResult = result.toLowerCase()
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (anyDangerousTag.test(lowerResult)) {
|
|
273
|
+
for (const tag of dangerousTags) {
|
|
274
|
+
const tagOpen = `<${tag}`
|
|
275
|
+
|
|
276
|
+
if (lowerResult.indexOf(tagOpen) === -1) continue
|
|
277
|
+
|
|
278
|
+
const regex = new RegExp(`<${tag}[^>]*>([\\s\\S]*?)<\\/${tag}>`, 'gi')
|
|
279
|
+
updateResult(result.replace(regex, ''))
|
|
280
|
+
|
|
281
|
+
if (lowerResult.indexOf(tagOpen) !== -1) {
|
|
282
|
+
const selfClosingRegex = new RegExp(`<${tag}[^>]*\\/?>`, 'gi')
|
|
283
|
+
updateResult(result.replace(selfClosingRegex, ''))
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
return result
|
|
289
|
+
}
|
|
290
|
+
|
|
245
291
|
/**
|
|
246
292
|
* Returns an ever-increasing unique integer id.
|
|
247
293
|
*/
|
|
@@ -280,6 +326,7 @@ export function utilsFunctions() {
|
|
|
280
326
|
isHtml,
|
|
281
327
|
htmlFormatClasses,
|
|
282
328
|
encodeHtml,
|
|
329
|
+
sanitizeHtml,
|
|
283
330
|
hashString,
|
|
284
331
|
}
|
|
285
332
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: llms-py
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.21
|
|
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,12 +3,12 @@ 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=
|
|
6
|
+
llms/main.py,sha256=oQdL7MXRAYN0o7T_8AYzCSEkVmwwuRBxecwJuDj1PNY,183939
|
|
7
7
|
llms/providers-extra.json,sha256=_6DmGBiQY9LM6_Y0zOiObYn7ba4g3akSNQfmHcYlENc,11101
|
|
8
|
-
llms/providers.json,sha256=
|
|
8
|
+
llms/providers.json,sha256=wTvlwpLMTGWz1oJWjeX9BfgLKJ2MzF99hbS8srBuUH4,286169
|
|
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
|
-
llms/extensions/app/__init__.py,sha256=
|
|
11
|
+
llms/extensions/app/__init__.py,sha256=W2EHPydQuEQc71FoiCF1FFbKQ7NmB8VdpPGnTcJjNNQ,21002
|
|
12
12
|
llms/extensions/app/db.py,sha256=eVUHkMo5va1pCkd3dP-4_DnkfYGZZ6oxOKOEI8hEKsM,21719
|
|
13
13
|
llms/extensions/app/ui/Recents.mjs,sha256=2ypAKUp9_Oqcive1nUWZ8I2PQTBomBg_Pkjygi4oPgs,9261
|
|
14
14
|
llms/extensions/app/ui/index.mjs,sha256=sB9176LLNuKFsZ28yL-tROA6J4xePNtvxtSrzFcinRo,13271
|
|
@@ -19,7 +19,7 @@ llms/extensions/computer/base.py,sha256=Igio5R6kPQOxIbmpaA7X6j6eC4cpF3jwTTR8rURf
|
|
|
19
19
|
llms/extensions/computer/bash.py,sha256=-xo67wVAdrqxtXgR7MK-iAkJ4Wne7Dm1JmnuHC2xW8o,5953
|
|
20
20
|
llms/extensions/computer/computer.py,sha256=wehwcrYwi9usCRcziE_loMhWDbVgfjLk_T4_4TZa4W4,19642
|
|
21
21
|
llms/extensions/computer/edit.py,sha256=QluhvRhYSSQJfbih4QyfC4M8W8aVqiOApfYXZgZTI5M,12725
|
|
22
|
-
llms/extensions/computer/filesystem.py,sha256=
|
|
22
|
+
llms/extensions/computer/filesystem.py,sha256=DoyCwu8PJxhtstX39MV7cdjXu7uKzWz9yyCEEYXhzqA,21196
|
|
23
23
|
llms/extensions/computer/platform.py,sha256=w5ECar8lM4Lag7rTYUQmU7wEWaqCeejNXwwM3CB8ulQ,14866
|
|
24
24
|
llms/extensions/computer/run.py,sha256=ZIcoYyy2cc3IKR_T4yJgx6IUHu2m7UusIJi9Dx1s7dA,1566
|
|
25
25
|
llms/extensions/core_tools/CALCULATOR.md,sha256=pJRtCVF01BgxFrSNh2Ys_lrRi3SFwLgJzAX93AGh93Q,1944
|
|
@@ -143,7 +143,7 @@ llms/extensions/providers/chutes.py,sha256=5ZrfbqoOhgzKLQy_qULcp4jlvW5WXPR0jP9kN
|
|
|
143
143
|
llms/extensions/providers/google.py,sha256=rRmpmtSjTM04mZGNyEV2jcDxdDM99GNj_X68dNT1H20,27719
|
|
144
144
|
llms/extensions/providers/nvidia.py,sha256=C6cwqn3EufYDfRIgbc8MDkQNyD6w3c7hbjfYaHJSDik,4279
|
|
145
145
|
llms/extensions/providers/openai.py,sha256=n1jTXkWPrboTazCW0FX3zYYaOlsW44rQpIfgKBINyCQ,6382
|
|
146
|
-
llms/extensions/providers/openrouter.py,sha256=
|
|
146
|
+
llms/extensions/providers/openrouter.py,sha256=9V1NSZJblku_lfsDY8Fantr5QFzkp3A0hXFDCYucShM,3344
|
|
147
147
|
llms/extensions/providers/zai.py,sha256=WPJlDxmnjuhxlgWhUXw2MYqgEKYfy14wVQbpQyMMlbU,7736
|
|
148
148
|
llms/extensions/skills/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
|
149
149
|
llms/extensions/skills/__init__.py,sha256=hnbcXTc578zwxJjY3qq56UZtd-cqqVoNHxHLziOBKw4,4352
|
|
@@ -160,15 +160,15 @@ llms/extensions/system_prompts/ui/prompts.json,sha256=t5DD3bird-87wFa4OlW-bC2wdo
|
|
|
160
160
|
llms/extensions/tools/__init__.py,sha256=PRZe0QMfsOymJ3jTqO0VFppNEWI4f2bYSOImK_YrGQM,2036
|
|
161
161
|
llms/extensions/tools/ui/index.mjs,sha256=1TgCn74oX_rUAhxO8w54HlIgNkHnI5ma-GCqXp-qYVY,39434
|
|
162
162
|
llms/ui/App.mjs,sha256=CoUzO9mV__-jV19NKHYIbwHsjWMnO11jyNSbnJhe1gQ,7486
|
|
163
|
-
llms/ui/ai.mjs,sha256
|
|
164
|
-
llms/ui/app.css,sha256=
|
|
165
|
-
llms/ui/ctx.mjs,sha256=
|
|
163
|
+
llms/ui/ai.mjs,sha256=-kGioRe_bMTaIMBcH65W2GaHqwrU2wvj5PBI0j40eWw,6541
|
|
164
|
+
llms/ui/app.css,sha256=bieInaTp18SHaTmyaptUAkTTzq_-CmVhH5q6O66ljSU,188553
|
|
165
|
+
llms/ui/ctx.mjs,sha256=OsAWFUmsudGFE1q5SiDdBoa2fbo67wV6LsH-hP7bv8w,15002
|
|
166
166
|
llms/ui/fav.svg,sha256=_R6MFeXl6wBFT0lqcUxYQIDWgm246YH_3hSTW0oO8qw,734
|
|
167
|
-
llms/ui/index.mjs,sha256=
|
|
168
|
-
llms/ui/markdown.mjs,sha256=
|
|
167
|
+
llms/ui/index.mjs,sha256=mVR9WMuaX0TMxfZx-ZnEg1l9rKtBj9ZbhtT0lKYHlp8,4328
|
|
168
|
+
llms/ui/markdown.mjs,sha256=vr4zI-NrL1-Iaw-aZUD6kWbxq9yeONGO_AePZWPGe50,6692
|
|
169
169
|
llms/ui/tailwind.input.css,sha256=9stg-po5X2-y598_Qw_2rnfRXR2NPjZK--d9xf-tZZE,17277
|
|
170
170
|
llms/ui/typography.css,sha256=6o7pbMIamRVlm2GfzSStpcOG4T5eFCK_WcQ3RIHKAsU,19587
|
|
171
|
-
llms/ui/utils.mjs,sha256=
|
|
171
|
+
llms/ui/utils.mjs,sha256=HAeoyc08uEGNN2ppUfi7idVzz54ROluLS319QwQwYNs,9157
|
|
172
172
|
llms/ui/lib/chart.js,sha256=dx8FdDX0Rv6OZtZjr9FQh5h-twFsKjfnb-FvFlQ--cU,196176
|
|
173
173
|
llms/ui/lib/charts.mjs,sha256=OPFAifcA4MPRv8pw6I7glVh7Xccv8guio0k35zPBDIY,926
|
|
174
174
|
llms/ui/lib/color.js,sha256=DDG7Pr-qzJHTPISZNSqP_qJR8UflKHEc_56n6xrBugQ,8273
|
|
@@ -176,19 +176,19 @@ llms/ui/lib/highlight.min.mjs,sha256=sG7wq8bF-IKkfie7S4QSyh5DdHBRf0NqQxMOEH8-MT0
|
|
|
176
176
|
llms/ui/lib/idb.min.mjs,sha256=CeTXyV4I_pB5vnibvJuyXdMs0iVF2ZL0Z7cdm3w_QaI,3853
|
|
177
177
|
llms/ui/lib/marked.min.mjs,sha256=QRHb_VZugcBJRD2EP6gYlVFEsJw5C2fQ8ImMf_pA2_s,39488
|
|
178
178
|
llms/ui/lib/servicestack-client.mjs,sha256=UVafVbzhJ_0N2lzv7rlzIbzwnWpoqXxGk3N3FSKgOOc,54534
|
|
179
|
-
llms/ui/lib/servicestack-vue.mjs,sha256=
|
|
179
|
+
llms/ui/lib/servicestack-vue.mjs,sha256=S466x0mocUyhgkb7H9QjwO4bWIX1BxEKta4r_whffg0,217141
|
|
180
180
|
llms/ui/lib/vue-router.min.mjs,sha256=fR30GHoXI1u81zyZ26YEU105pZgbbAKSXbpnzFKIxls,30418
|
|
181
181
|
llms/ui/lib/vue.min.mjs,sha256=T1TVu9SFEoLArPLKKEp6gsj_eScmHl5TkUebxGK6ldk,166282
|
|
182
182
|
llms/ui/lib/vue.mjs,sha256=75FuLhUTPk19sncwNIrm0BGEL0_Qw298-_v01fPWYoI,542872
|
|
183
183
|
llms/ui/modules/icons.mjs,sha256=LGcH0ys0QLS2ZKCO42qHpwPYbBV_EssoWLezU4XZEzU,27751
|
|
184
184
|
llms/ui/modules/layout.mjs,sha256=8pAxs8bedQI3b3eRA9nrfpLZznLmrpp4BZvigYAQjpQ,12572
|
|
185
185
|
llms/ui/modules/model-selector.mjs,sha256=6U4rAZ7vmQELFRQGWk4YEtq02v3lyHdMq6yUOp-ArXg,43184
|
|
186
|
-
llms/ui/modules/chat/ChatBody.mjs,sha256=
|
|
186
|
+
llms/ui/modules/chat/ChatBody.mjs,sha256=jusiYUxz8NoN6iYCrEayYW5t2wdOx0So79aLxjk7J9c,58187
|
|
187
187
|
llms/ui/modules/chat/SettingsDialog.mjs,sha256=HMBJTwrapKrRIAstIIqp0QlJL5O-ho4hzgvfagPfsX8,19930
|
|
188
188
|
llms/ui/modules/chat/index.mjs,sha256=nS_L6G1RSuCybgnA6n-q8Sn3OeSbQWL2iW3-zCIFqJk,39548
|
|
189
|
-
llms_py-3.0.
|
|
190
|
-
llms_py-3.0.
|
|
191
|
-
llms_py-3.0.
|
|
192
|
-
llms_py-3.0.
|
|
193
|
-
llms_py-3.0.
|
|
194
|
-
llms_py-3.0.
|
|
189
|
+
llms_py-3.0.21.dist-info/licenses/LICENSE,sha256=bus9cuAOWeYqBk2OuhSABVV1P4z7hgrEFISpyda_H5w,1532
|
|
190
|
+
llms_py-3.0.21.dist-info/METADATA,sha256=b0dmeikPuUr-7H0uHWMi5gpS0M_27kDuVYFelXQPk04,2195
|
|
191
|
+
llms_py-3.0.21.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
192
|
+
llms_py-3.0.21.dist-info/entry_points.txt,sha256=WswyE7PfnkZMIxboC-MS6flBD6wm-CYU7JSUnMhqMfM,40
|
|
193
|
+
llms_py-3.0.21.dist-info/top_level.txt,sha256=gC7hk9BKSeog8gyg-EM_g2gxm1mKHwFRfK-10BxOsa4,5
|
|
194
|
+
llms_py-3.0.21.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|