llms-py 3.0.14__py3-none-any.whl → 3.0.15__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.
@@ -2,7 +2,7 @@
2
2
  import { ref, watch, computed, nextTick, inject } from 'vue'
3
3
  import { $$, createElement, lastRightPart, ApiResult, createErrorStatus } from "@servicestack/client"
4
4
  import SettingsDialog, { useSettings } from './SettingsDialog.mjs'
5
- import { ChatBody, LightboxImage, TypeText, TypeImage, TypeAudio, TypeFile, ViewType, ViewTypes, ViewToolTypes, ToolArguments, ToolOutput, MessageUsage, MessageReasoning } from './ChatBody.mjs'
5
+ import { ChatBody, LightboxImage, TypeText, TypeImage, TypeAudio, TypeFile, ViewType, ViewTypes, ViewToolTypes, TextViewer, ToolArguments, ToolOutput, MessageUsage, MessageReasoning } from './ChatBody.mjs'
6
6
  import { AppContext } from '../../ctx.mjs'
7
7
 
8
8
  const imageExts = 'png,webp,jpg,jpeg,gif,bmp,svg,tiff,ico'.split(',')
@@ -252,23 +252,14 @@ export function useChatPrompt(ctx) {
252
252
  return ctx.createErrorResult({ message: `Model ${request.model || ''} not found`, errorCode: 'NotFound' })
253
253
  }
254
254
 
255
- if (!request.messages) request.messages = []
256
- if (!request.metadata) request.metadata = {}
257
-
258
255
  if (!thread) {
259
256
  const title = getTextContent(request) || 'New Chat'
260
257
  thread = await ctx.threads.startNewThread({ title, model, redirect })
261
258
  }
262
259
 
263
- const threadId = thread?.id
264
-
265
- const ctxRequest = {
266
- request,
267
- thread,
268
- }
260
+ const ctxRequest = ctx.createChatContext({ request, thread })
269
261
  ctx.chatRequestFilters.forEach(f => f(ctxRequest))
270
-
271
- console.debug('completion.request', request)
262
+ ctx.completeChatContext(ctxRequest)
272
263
 
273
264
  // Send to API
274
265
  const startTime = Date.now()
@@ -935,6 +926,7 @@ export default {
935
926
  ViewType,
936
927
  ViewTypes,
937
928
  ViewToolTypes,
929
+ TextViewer,
938
930
  ToolArguments,
939
931
  ToolOutput,
940
932
 
@@ -166,6 +166,16 @@
166
166
  overflow: auto !important;
167
167
  }
168
168
 
169
+ .prose .frontmatter {
170
+ white-space: pre-wrap;
171
+ word-break: break-all;
172
+ margin-bottom: 1em;
173
+ padding: 0.5rem;
174
+ font-size: 0.8rem !important;
175
+ background: #f9fafb;
176
+ border: 1px solid #e5e7eb;
177
+ }
178
+
169
179
  /* highlight.js - vs.css */
170
180
  .hljs {
171
181
  background: white;
llms/ui/utils.mjs CHANGED
@@ -211,6 +211,19 @@ export function isHtml(s) {
211
211
  return isHtml
212
212
  }
213
213
 
214
+ const htmlEntities = {
215
+ '&': '&',
216
+ '<': '&lt;',
217
+ '>': '&gt;',
218
+ '"': '&quot;',
219
+ "'": '&#39;'
220
+ }
221
+
222
+ export function encodeHtml(str) {
223
+ if (!str) return ''
224
+ return str.replace(/[&<>"']/g, m => htmlEntities[m]);
225
+ }
226
+
214
227
  /**
215
228
  * @param {object|array} type
216
229
  * @param {'div'|'table'|'thead'|'th'|'tr'|'td'} tag
@@ -241,6 +254,16 @@ export const nextId = (() => {
241
254
  }
242
255
  })();
243
256
 
257
+ export function fnv1a(str) {
258
+ let hash = 0x811c9dc5
259
+ for (let i = 0; i < str.length; i++) {
260
+ hash ^= str.charCodeAt(i)
261
+ hash = Math.imul(hash, 0x01000193)
262
+ }
263
+ return hash >>> 0
264
+ }
265
+ export const hashString = fnv1a
266
+
244
267
  export function utilsFunctions() {
245
268
  return {
246
269
  nextId,
@@ -256,6 +279,7 @@ export function utilsFunctions() {
256
279
  pluralize,
257
280
  isHtml,
258
281
  htmlFormatClasses,
282
+ encodeHtml,
283
+ hashString,
259
284
  }
260
285
  }
261
-
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: llms-py
3
- Version: 3.0.14
3
+ Version: 3.0.15
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,7 +3,7 @@ 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=GNivNxCaKGzVrFGZ2vqr0RcRRafZBmI9asUgzCGerqk,176342
6
+ llms/main.py,sha256=xEWU18A6dTncIFOroN2PDQdnSDhQ9Yr22OHuBbrCYSU,176425
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
@@ -12,7 +12,8 @@ llms/extensions/app/__init__.py,sha256=aU8Bfliw--Xj1bsKL3PSoX6MY1ZNgweNyMWS1V_YG
12
12
  llms/extensions/app/db.py,sha256=DU8YZ25yFsBI-O6msxh2GgzbwaqKqXkAHJLwQKcmFPI,21533
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
15
- llms/extensions/app/ui/threadStore.mjs,sha256=CLlD-1HBO1yhZBHLfL0ZdA4quT4R07qr1JW4a8igVNc,12287
15
+ llms/extensions/app/ui/threadStore.mjs,sha256=QS6mLqysw9Je_ixUKpbhAELGq-As8aFk6Qm_vO5hvUQ,12515
16
+ llms/extensions/computer_use/README.md,sha256=xGQXMFtTnjOLll9rDeF1b6Msl3uK5UwjvocvW7WCmps,4293
16
17
  llms/extensions/computer_use/__init__.py,sha256=YOMJnMFsIi6vdZ8BpI7_uWubIwiWHAJoLpHflGC9BI0,715
17
18
  llms/extensions/computer_use/base.py,sha256=Igio5R6kPQOxIbmpaA7X6j6eC4cpF3jwTTR8rURfp5E,2386
18
19
  llms/extensions/computer_use/bash.py,sha256=5s_oYqRGnE1xIICe6qVsfUMJFIbp79Ac0X5NVkSrn_c,5929
@@ -143,22 +144,30 @@ llms/extensions/providers/nvidia.py,sha256=C6cwqn3EufYDfRIgbc8MDkQNyD6w3c7hbjfYa
143
144
  llms/extensions/providers/openai.py,sha256=hkE-LVsw6M92_qEbpayuPo17Z1OWKHe7lm2wduLMng8,6138
144
145
  llms/extensions/providers/openrouter.py,sha256=5SfCJKo1aGKoDGez6HXYQe9elMMo9sSEDFqqdxamAgA,3330
145
146
  llms/extensions/providers/zai.py,sha256=WPJlDxmnjuhxlgWhUXw2MYqgEKYfy14wVQbpQyMMlbU,7736
147
+ llms/extensions/skills/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
148
+ llms/extensions/skills/__init__.py,sha256=hnbcXTc578zwxJjY3qq56UZtd-cqqVoNHxHLziOBKw4,4352
149
+ llms/extensions/skills/errors.py,sha256=V4DTFNtzVADDlZ0g7RmoxZRFeG01oaG3zzaPAVdtkfQ,572
150
+ llms/extensions/skills/models.py,sha256=xmRfz8BMeOdzZXhW6MYFjkOVHOKD6bMDynId8aysans,1461
151
+ llms/extensions/skills/parser.py,sha256=Mb4NOtoY3Ip4Nng8ixb26oE8U_Sp5CI3n3l_qxbg1UM,5500
152
+ llms/extensions/skills/validator.py,sha256=te49hTfIPJWcMcLLCApSJ2Ru3lrqVF8ayDXtPEZF9sU,5154
153
+ llms/extensions/skills/ui/index.mjs,sha256=2fE_npjzjaRqEMPmx1JuIxazo9Bv8qmidaKe50GPp-U,15625
154
+ llms/extensions/skills/ui/skills/create-plan/SKILL.md,sha256=g_SLyBid2dwj56FBzh87lZGu1t08edLs0plimT2uNzs,2481
146
155
  llms/extensions/system_prompts/README.md,sha256=ayr18lnSsGp62bunC6kxkvcSvZki775rbZ-8VoMDQEc,597
147
156
  llms/extensions/system_prompts/__init__.py,sha256=TZy1CS2dPkBNBA_Ovf9BlVetZqTt2NgnsrZi6Mtg_C0,1535
148
- llms/extensions/system_prompts/ui/index.mjs,sha256=_pVCreAebSzE9dzcHF2kiYODwP-fDHCqtUQB-X5Io9Q,12107
157
+ llms/extensions/system_prompts/ui/index.mjs,sha256=Ec2dXSzEj6RnEuW2U3HxeXK3LTl_lJrVJIayozquoB4,11981
149
158
  llms/extensions/system_prompts/ui/prompts.json,sha256=t5DD3bird-87wFa4OlW-bC2wdoYDrVzfyc8TO5OaotI,128489
150
159
  llms/extensions/tools/__init__.py,sha256=u76604Cn_sRFQRqeA_pkVEty27V688Mt9Z7Kh63yDr8,4825
151
- llms/extensions/tools/ui/index.mjs,sha256=-Rby2y1Rx83JFcqYqn86uYZjVd_WlF4wSajZ1M31LWg,34997
160
+ llms/extensions/tools/ui/index.mjs,sha256=7hnrieDpdwbLrZ09cs0V_A6RxmjYff4Tg85lvXC8jwI,35006
152
161
  llms/ui/App.mjs,sha256=CoUzO9mV__-jV19NKHYIbwHsjWMnO11jyNSbnJhe1gQ,7486
153
- llms/ui/ai.mjs,sha256=gE3WAMzTEu2m67l1Gh3pn4dsog9xSGDYPLQw9TbG67w,6541
154
- llms/ui/app.css,sha256=ZxdHeOSiZYKQvkP_ydTdrW1Zo8lrD4c_amtj4kOtgzA,186973
155
- llms/ui/ctx.mjs,sha256=X4scgXEQ9bMUfQl36sM4A3o2Ufad3LRwItxfmSu1xwc,12838
162
+ llms/ui/ai.mjs,sha256=rOCaGgwqabs_rrKTocaY8PBy0KmIoDFFeOU5fkyoCGA,6541
163
+ llms/ui/app.css,sha256=ZqR_QJPCYzhCxjiCnNrflYBhEEs3She-_6bq6SDlES0,187709
164
+ llms/ui/ctx.mjs,sha256=g1mmv87bhKCFyMbAImvX6mArmGliAoGPPupFEaMMf7c,14500
156
165
  llms/ui/fav.svg,sha256=_R6MFeXl6wBFT0lqcUxYQIDWgm246YH_3hSTW0oO8qw,734
157
166
  llms/ui/index.mjs,sha256=7GMbFyG3L4k6dxSrQYQ0BLzqL976xw5HeaqKco0THHA,4296
158
167
  llms/ui/markdown.mjs,sha256=ZeGXxX4_UEUCVkLZzmwXlqWBfReSFzBivdxNu8uSgFk,6648
159
- llms/ui/tailwind.input.css,sha256=xOrT0m8HCZRHhnPv4K43HyQCTO_0SpP-tYvxpP8jzYY,17027
168
+ llms/ui/tailwind.input.css,sha256=9stg-po5X2-y598_Qw_2rnfRXR2NPjZK--d9xf-tZZE,17277
160
169
  llms/ui/typography.css,sha256=6o7pbMIamRVlm2GfzSStpcOG4T5eFCK_WcQ3RIHKAsU,19587
161
- llms/ui/utils.mjs,sha256=lurZdnTk4ngR7ziWKeUNvpWVmBg2V6phqngBYWcCL5U,7483
170
+ llms/ui/utils.mjs,sha256=mYLTe5-CncWos4Y4z-hzvXVESKkTuVHDYTRMRGc6Ssc,7993
162
171
  llms/ui/lib/chart.js,sha256=dx8FdDX0Rv6OZtZjr9FQh5h-twFsKjfnb-FvFlQ--cU,196176
163
172
  llms/ui/lib/charts.mjs,sha256=OPFAifcA4MPRv8pw6I7glVh7Xccv8guio0k35zPBDIY,926
164
173
  llms/ui/lib/color.js,sha256=DDG7Pr-qzJHTPISZNSqP_qJR8UflKHEc_56n6xrBugQ,8273
@@ -173,12 +182,12 @@ llms/ui/lib/vue.mjs,sha256=75FuLhUTPk19sncwNIrm0BGEL0_Qw298-_v01fPWYoI,542872
173
182
  llms/ui/modules/icons.mjs,sha256=LGcH0ys0QLS2ZKCO42qHpwPYbBV_EssoWLezU4XZEzU,27751
174
183
  llms/ui/modules/layout.mjs,sha256=8pAxs8bedQI3b3eRA9nrfpLZznLmrpp4BZvigYAQjpQ,12572
175
184
  llms/ui/modules/model-selector.mjs,sha256=6U4rAZ7vmQELFRQGWk4YEtq02v3lyHdMq6yUOp-ArXg,43184
176
- llms/ui/modules/chat/ChatBody.mjs,sha256=l6ANTkOMb6GJSg9-vUBhClndO2pI2RJr8NascPjvMJY,50904
185
+ llms/ui/modules/chat/ChatBody.mjs,sha256=EOBMKmjCY7MK5UHFmKTjaJMkPWTaHeDDjJ9bvCsHprs,54981
177
186
  llms/ui/modules/chat/SettingsDialog.mjs,sha256=HMBJTwrapKrRIAstIIqp0QlJL5O-ho4hzgvfagPfsX8,19930
178
- llms/ui/modules/chat/index.mjs,sha256=FZ0fJ53JXQnTDiSOFhyGp3J5OMuEDQ2YZJGKC5VwS0E,39819
179
- llms_py-3.0.14.dist-info/licenses/LICENSE,sha256=bus9cuAOWeYqBk2OuhSABVV1P4z7hgrEFISpyda_H5w,1532
180
- llms_py-3.0.14.dist-info/METADATA,sha256=bLramlKkA30HvkQwaGmAl9Z_r1Q75UZ0gP3FXv5451s,2195
181
- llms_py-3.0.14.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
182
- llms_py-3.0.14.dist-info/entry_points.txt,sha256=WswyE7PfnkZMIxboC-MS6flBD6wm-CYU7JSUnMhqMfM,40
183
- llms_py-3.0.14.dist-info/top_level.txt,sha256=gC7hk9BKSeog8gyg-EM_g2gxm1mKHwFRfK-10BxOsa4,5
184
- llms_py-3.0.14.dist-info/RECORD,,
187
+ llms/ui/modules/chat/index.mjs,sha256=1UKfjIub7PtPmHtoIdKOqf3j9a1UJZjad8VTxtV_EIw,39667
188
+ llms_py-3.0.15.dist-info/licenses/LICENSE,sha256=bus9cuAOWeYqBk2OuhSABVV1P4z7hgrEFISpyda_H5w,1532
189
+ llms_py-3.0.15.dist-info/METADATA,sha256=In3z5zm1VwL5ycrJac_3tOiIH4gQbVT1hG1qWrJoSvY,2195
190
+ llms_py-3.0.15.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
191
+ llms_py-3.0.15.dist-info/entry_points.txt,sha256=WswyE7PfnkZMIxboC-MS6flBD6wm-CYU7JSUnMhqMfM,40
192
+ llms_py-3.0.15.dist-info/top_level.txt,sha256=gC7hk9BKSeog8gyg-EM_g2gxm1mKHwFRfK-10BxOsa4,5
193
+ llms_py-3.0.15.dist-info/RECORD,,