llms-py 3.0.0b5__py3-none-any.whl → 3.0.0b7__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.
Files changed (55) hide show
  1. llms/__pycache__/main.cpython-314.pyc +0 -0
  2. llms/{ui/modules/analytics.mjs → extensions/analytics/ui/index.mjs} +4 -2
  3. llms/extensions/core_tools/__init__.py +358 -0
  4. llms/extensions/core_tools/__pycache__/__init__.cpython-314.pyc +0 -0
  5. llms/extensions/gallery/__init__.py +61 -0
  6. llms/extensions/gallery/__pycache__/__init__.cpython-314.pyc +0 -0
  7. llms/extensions/gallery/__pycache__/db.cpython-314.pyc +0 -0
  8. llms/extensions/gallery/db.py +298 -0
  9. llms/extensions/gallery/ui/index.mjs +480 -0
  10. llms/extensions/providers/__init__.py +18 -0
  11. llms/extensions/providers/__pycache__/__init__.cpython-314.pyc +0 -0
  12. llms/{providers → extensions/providers}/__pycache__/anthropic.cpython-314.pyc +0 -0
  13. llms/extensions/providers/__pycache__/chutes.cpython-314.pyc +0 -0
  14. llms/extensions/providers/__pycache__/google.cpython-314.pyc +0 -0
  15. llms/{providers → extensions/providers}/__pycache__/nvidia.cpython-314.pyc +0 -0
  16. llms/{providers → extensions/providers}/__pycache__/openai.cpython-314.pyc +0 -0
  17. llms/extensions/providers/__pycache__/openrouter.cpython-314.pyc +0 -0
  18. llms/{providers → extensions/providers}/anthropic.py +1 -4
  19. llms/{providers → extensions/providers}/chutes.py +21 -18
  20. llms/{providers → extensions/providers}/google.py +99 -27
  21. llms/{providers → extensions/providers}/nvidia.py +6 -8
  22. llms/{providers → extensions/providers}/openai.py +3 -6
  23. llms/{providers → extensions/providers}/openrouter.py +12 -10
  24. llms/extensions/system_prompts/__init__.py +45 -0
  25. llms/extensions/system_prompts/__pycache__/__init__.cpython-314.pyc +0 -0
  26. llms/extensions/system_prompts/ui/index.mjs +284 -0
  27. llms/extensions/system_prompts/ui/prompts.json +1067 -0
  28. llms/{ui/modules/tools.mjs → extensions/tools/ui/index.mjs} +4 -2
  29. llms/llms.json +17 -1
  30. llms/main.py +407 -175
  31. llms/providers-extra.json +0 -32
  32. llms/ui/App.mjs +17 -18
  33. llms/ui/ai.mjs +10 -3
  34. llms/ui/app.css +1553 -24
  35. llms/ui/ctx.mjs +70 -12
  36. llms/ui/index.mjs +13 -8
  37. llms/ui/modules/chat/ChatBody.mjs +11 -248
  38. llms/ui/modules/chat/HomeTools.mjs +254 -0
  39. llms/ui/modules/chat/SettingsDialog.mjs +1 -1
  40. llms/ui/modules/chat/index.mjs +278 -174
  41. llms/ui/modules/layout.mjs +2 -26
  42. llms/ui/modules/model-selector.mjs +1 -1
  43. llms/ui/modules/threads/index.mjs +5 -11
  44. llms/ui/modules/threads/threadStore.mjs +56 -2
  45. llms/ui/utils.mjs +21 -3
  46. {llms_py-3.0.0b5.dist-info → llms_py-3.0.0b7.dist-info}/METADATA +1 -1
  47. llms_py-3.0.0b7.dist-info/RECORD +80 -0
  48. llms/providers/__pycache__/chutes.cpython-314.pyc +0 -0
  49. llms/providers/__pycache__/google.cpython-314.pyc +0 -0
  50. llms/providers/__pycache__/openrouter.cpython-314.pyc +0 -0
  51. llms_py-3.0.0b5.dist-info/RECORD +0 -66
  52. {llms_py-3.0.0b5.dist-info → llms_py-3.0.0b7.dist-info}/WHEEL +0 -0
  53. {llms_py-3.0.0b5.dist-info → llms_py-3.0.0b7.dist-info}/entry_points.txt +0 -0
  54. {llms_py-3.0.0b5.dist-info → llms_py-3.0.0b7.dist-info}/licenses/LICENSE +0 -0
  55. {llms_py-3.0.0b5.dist-info → llms_py-3.0.0b7.dist-info}/top_level.txt +0 -0
@@ -135,7 +135,7 @@ const GroupedThreads = {
135
135
  const ThreadsSidebar = {
136
136
  template: `
137
137
  <div class="flex flex-col h-full">
138
- <Brand @home="goToInitialState" @toggle-sidebar="$emit('toggle-sidebar')" />
138
+ <Brand />
139
139
  <!-- Thread List -->
140
140
  <div class="flex-1 overflow-y-auto">
141
141
  <div v-if="isLoading" class="p-4 text-center text-gray-500 dark:text-gray-400">
@@ -169,8 +169,7 @@ const ThreadsSidebar = {
169
169
  </div>
170
170
  </div>
171
171
  `,
172
- emits: ['thread-selected', 'toggle-sidebar'],
173
- setup(props, { emit }) {
172
+ setup(props) {
174
173
  const ctx = inject('ctx')
175
174
  const ai = ctx.ai
176
175
  const router = useRouter()
@@ -191,7 +190,6 @@ const ThreadsSidebar = {
191
190
 
192
191
  const selectThread = async (threadId) => {
193
192
  router.push(`${ai.base}/c/${threadId}`)
194
- emit('thread-selected')
195
193
  }
196
194
 
197
195
  const deleteThread = async (threadId) => {
@@ -205,20 +203,16 @@ const ThreadsSidebar = {
205
203
  }
206
204
 
207
205
  const createNewThread = async () => {
208
- const newThread = await createThread()
209
- router.push(`${ai.base}/c/${newThread.id}`)
210
- emit('thread-selected')
206
+ ctx.threads.startNewThread({ title: 'New Chat', model: ctx.chat.getSelectedModel() })
211
207
  }
212
208
 
213
209
  const goToInitialState = () => {
214
210
  clearCurrentThread()
215
- router.push(`${ai.base}/`)
216
- emit('thread-selected')
211
+ ctx.to(`/`)
217
212
  }
218
213
 
219
214
  const goToAnalytics = () => {
220
- router.push(`${ai.base}/analytics`)
221
- emit('thread-selected')
215
+ ctx.to(`/analytics`)
222
216
  }
223
217
 
224
218
  return {
@@ -1,4 +1,4 @@
1
- import { ref, computed, unref } from 'vue'
1
+ import { ref, computed } from 'vue'
2
2
  import { openDB } from 'idb'
3
3
  import { nextId } from '../../utils.mjs'
4
4
 
@@ -62,7 +62,7 @@ async function logRequest(threadId, model, request, response) {
62
62
  const lastUserContent = request.messages?.slice().reverse().find(m => m.role === 'user')?.content
63
63
  const content = Array.isArray(lastUserContent)
64
64
  ? lastUserContent.filter(c => c?.text).map(c => c.text).join(' ')
65
- : lastUserContent
65
+ : lastUserContent || ''
66
66
  const title = content.slice(0, 100) + (content.length > 100 ? '...' : '')
67
67
  const inputTokens = usage?.prompt_tokens ?? 0
68
68
  const outputTokens = usage?.completion_tokens ?? 0
@@ -117,6 +117,9 @@ async function createThread(args = {}) {
117
117
  if (!thread.title) {
118
118
  thread.title = 'New Chat'
119
119
  }
120
+ if (thread.title.length > 200) {
121
+ thread.title = thread.title.slice(0, 200) + '...'
122
+ }
120
123
 
121
124
  ctx.createThreadFilters.forEach(f => f(thread))
122
125
 
@@ -541,6 +544,53 @@ async function deleteRequest(requestId) {
541
544
  await tx.complete
542
545
  }
543
546
 
547
+ function getLatestCachedThread() {
548
+ return threads.value[0]
549
+ }
550
+ async function getLatestThread() {
551
+ await initDB()
552
+ const tx = db.transaction(['threads'], 'readonly')
553
+ const store = tx.objectStore('threads')
554
+ // Open cursor in reverse order (prev = previous/descending)
555
+ const cursor = await store.openCursor(null, 'prev');
556
+ return cursor ? cursor.value : null;
557
+ }
558
+
559
+ async function startNewThread({ title, model }) {
560
+ if (!model) {
561
+ console.error('No model selected')
562
+ return
563
+ }
564
+ if (!title) {
565
+ title = 'New Chat'
566
+ }
567
+ const latestThread = getLatestCachedThread()
568
+
569
+ console.log('startNewThread', title, model.name, ctx.router.currentRoute.value?.path, latestThread?.messages?.length)
570
+ ctx.setLayout({ left: 'ThreadsSidebar' })
571
+
572
+ if (latestThread && latestThread.title == title && !latestThread.messages?.length) {
573
+ if (ctx.router.currentRoute.value?.path != `/c/${latestThread.id}`) {
574
+ ctx.to(`/c/${latestThread.id}`)
575
+ }
576
+ return latestThread
577
+ }
578
+ const newThread = await createThread({
579
+ title,
580
+ model: model.name,
581
+ info: ctx.utils.toModelInfo(model),
582
+ })
583
+
584
+ console.log('newThread', newThread, model)
585
+ // Navigate to the new thread URL
586
+ ctx.to(`/c/${newThread.id}`)
587
+
588
+ // Get the thread to check for duplicates
589
+ let thread = await getThread(newThread.id)
590
+ return thread
591
+ }
592
+
593
+
544
594
  // Export the store
545
595
  export function useThreadStore() {
546
596
  return {
@@ -573,6 +623,10 @@ export function useThreadStore() {
573
623
  deleteRequest,
574
624
  getAllRequestIds,
575
625
  getAllThreadIds,
626
+ getLatestThread,
627
+ getLatestCachedThread,
628
+ generateThreadId,
629
+ startNewThread,
576
630
  }
577
631
  }
578
632
 
llms/ui/utils.mjs CHANGED
@@ -1,3 +1,4 @@
1
+ import { toRaw } from "vue"
1
2
  import { rightPart } from "@servicestack/client"
2
3
 
3
4
  export function toJsonArray(json) {
@@ -59,7 +60,6 @@ export function serializedClone(obj) {
59
60
  }
60
61
  }
61
62
 
62
-
63
63
  export function deepClone(o) {
64
64
  if (o === null || typeof o !== 'object') return o
65
65
 
@@ -73,7 +73,8 @@ export function deepClone(o) {
73
73
  return structuredClone(o)
74
74
  } catch (e) {
75
75
  console.warn('structuredClone failed, falling back to JSON:', e)
76
- console.log(JSON.stringify(o, undefined, 2))
76
+ console.log(o)
77
+ // console.log(JSON.stringify(o, undefined, 2))
77
78
  }
78
79
  }
79
80
 
@@ -81,6 +82,14 @@ export function deepClone(o) {
81
82
  return serializedClone(o)
82
83
  }
83
84
 
85
+ export function toModelInfo(model) {
86
+ if (!model) return undefined
87
+ const props = ['id', 'name', 'provider', 'cost', 'modalities']
88
+ const to = {}
89
+ props.forEach(k => to[k] = toRaw(model[k]))
90
+ return deepClone(to)
91
+ }
92
+
84
93
  export function pluralize(word, count) {
85
94
  return count === 1 ? word : word + 's'
86
95
  }
@@ -150,6 +159,14 @@ export function utilsFormatters() {
150
159
  })
151
160
  }
152
161
 
162
+ function shortDate(ts) {
163
+ if (!ts) return ''
164
+ const date = typeof ts === 'number' ? new Date(ts * 1000) : new Date(ts)
165
+ return date.toLocaleDateString(undefined, {
166
+ month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit'
167
+ })
168
+ }
169
+
153
170
 
154
171
  return {
155
172
  currFmt: currFmt2,
@@ -161,6 +178,7 @@ export function utilsFormatters() {
161
178
  relativeTime,
162
179
  time,
163
180
  pluralize,
181
+ shortDate,
164
182
  }
165
183
  }
166
184
 
@@ -179,7 +197,6 @@ export const nextId = (() => {
179
197
  export function utilsFunctions() {
180
198
  return {
181
199
  nextId,
182
- deepClone,
183
200
  toJsonArray,
184
201
  toJsonObject,
185
202
  storageArray,
@@ -188,6 +205,7 @@ export function utilsFunctions() {
188
205
  fileToDataUri,
189
206
  serializedClone,
190
207
  deepClone,
208
+ toModelInfo,
191
209
  pluralize,
192
210
  }
193
211
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: llms-py
3
- Version: 3.0.0b5
3
+ Version: 3.0.0b7
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
@@ -0,0 +1,80 @@
1
+ llms/__init__.py,sha256=DKwTZDsyYL_wHe7yvLw49Nf8PSgPSyWaeVdotUqSvrQ,84
2
+ llms/__main__.py,sha256=hrBulHIt3lmPm1BCyAEVtB6DQ0Hvc3gnIddhHCmJasg,151
3
+ llms/index.html,sha256=gABCGg8ALHyB8OSH745HXx7U0SrXuNtJry9buUbVDik,2117
4
+ llms/llms.json,sha256=jAPVz6Wj-_VStQPXWHFSO9262rB_Jsa1fx2Tnnhexeg,11094
5
+ llms/main.py,sha256=cbKe-4ElHmfU8e3GeeanKwe_iNyiIeFit4PdSMR2L-A,138490
6
+ llms/providers-extra.json,sha256=w7_5gB0YUPK0PJNeViM7vRDfNGChXUKMHfGHenVxEkM,10165
7
+ llms/providers.json,sha256=mP4vQ37LeRAZCpT3WPO2GZaZ3YsXodXBV5OVbVMBAmo,256222
8
+ llms/__pycache__/__init__.cpython-312.pyc,sha256=lg2oFc0aKgj536NOJxcIpbCpEWi47ptF8NufPphgUUk,204
9
+ llms/__pycache__/__init__.cpython-313.pyc,sha256=DvmykIYAjV4Xjv5NeC70BA0JIX8qtwEWP2dfzmOBrps,173
10
+ llms/__pycache__/__init__.cpython-314.pyc,sha256=9CxeBz41D_-ezno6pIOsnoMAFzdRX2uZjKkBLUm25RQ,206
11
+ llms/__pycache__/__main__.cpython-312.pyc,sha256=fcu9LVl5nfdSzg9HqoKyDGoDvENeIXKkjygN7FENEGE,321
12
+ llms/__pycache__/__main__.cpython-314.pyc,sha256=IFxtGVpJq_3whKuM5Ln7YMweKFNbHVp8M7VSrLK5h2A,324
13
+ llms/__pycache__/llms.cpython-312.pyc,sha256=S5dFI79JdUe2dQW4ogdB-CCNhudQeFaFGcfKxgJGBms,72080
14
+ llms/__pycache__/main.cpython-312.pyc,sha256=HrqApYAiiBmYN73HIx_Hl2-Xm1Gy7I_0zuR5j86qoRM,104940
15
+ llms/__pycache__/main.cpython-313.pyc,sha256=6NQ__SJ2rC9ItFLKLHL5ewb5RqxLzZabwgczA9wZd-w,74814
16
+ llms/__pycache__/main.cpython-314.pyc,sha256=sdT6gQFbLWGduly6za6Js6UktlzqaqBTOZ-98zqUB48,179527
17
+ llms/__pycache__/plugins.cpython-314.pyc,sha256=fer8nTkidG_vQSx80tL2bAvMS0opDom93bewjseFcyg,3560
18
+ llms/extensions/analytics/ui/index.mjs,sha256=lz9V9LZsqzpeX2pFnwViL3qn4nRZ5iAtmEGs_Zcj-JU,74234
19
+ llms/extensions/core_tools/__init__.py,sha256=VTVM69yICL9h7G0mkhknQIu-sCS3isdtBJ5NbDIdWLo,11678
20
+ llms/extensions/core_tools/__pycache__/__init__.cpython-314.pyc,sha256=iNbia3YPk8yozeknF-55IwwBG5yKzbVB9ZCIbyTEWf8,19243
21
+ llms/extensions/gallery/__init__.py,sha256=6YrgWsrfQXviFsJETFJxDlaEf0DAaPPBzokPxeK6AvU,1583
22
+ llms/extensions/gallery/db.py,sha256=xPoY5qFKifOqVmChuISsAQZH7Vnwn0bQTB2BtcmeH6k,11440
23
+ llms/extensions/gallery/__pycache__/__init__.cpython-314.pyc,sha256=qVYj7_SMudEoxz7BJKsUN_BNEfm9COYKArAIrl30Ynw,3384
24
+ llms/extensions/gallery/__pycache__/db.cpython-314.pyc,sha256=d59mYpqBhTuYjK88G-CmbgpIdyKDos2bvSY1sXzSW8c,15712
25
+ llms/extensions/gallery/ui/index.mjs,sha256=SQMKNWYwGuXI-b9mb8MWQbXXcI4YOMEfve-SWtN-ASU,28234
26
+ llms/extensions/providers/__init__.py,sha256=b20NLETAlDFnKQfGj0YviUA0L0EvDpYJQFK_W-A2_WU,419
27
+ llms/extensions/providers/anthropic.py,sha256=DOMpH074CV4hi0Yz-5TMscv9qpf2slWRoumF6GtJwkI,8077
28
+ llms/extensions/providers/chutes.py,sha256=mdPFwPyK1j2k3HbD-44LD20XYicUZDdyG4RFI4DzmbM,6317
29
+ llms/extensions/providers/google.py,sha256=khH8F9uQueHdqMdMx9SvnD1AbBUp_KSZBVwH1up_E6o,19344
30
+ llms/extensions/providers/nvidia.py,sha256=AokVo18QBqB9xAbIWkcum4SefrwHflhtoIxGWuBycIM,4366
31
+ llms/extensions/providers/openai.py,sha256=qC5o-On3enNS_zSNNfGNHzDa0-Ca50Moz-7kilxd0q0,6234
32
+ llms/extensions/providers/openrouter.py,sha256=gVUIa1DhbrEG7S8_-Qkxa0kdtHT8Doj3El0DO-q_tcQ,3253
33
+ llms/extensions/providers/__pycache__/__init__.cpython-314.pyc,sha256=_V6L2wMvy-HQMmz7bvnegp4NjxmTgP7_AR-d9SUN3dc,797
34
+ llms/extensions/providers/__pycache__/anthropic.cpython-314.pyc,sha256=qVIPsEdBkBIgHMyf_XABw3Dz7RByLzJzvf6GyQXsqJI,9194
35
+ llms/extensions/providers/__pycache__/chutes.cpython-314.pyc,sha256=QH2fiGb6VueqWNjN0RwizVpPOeqdN78s2rp_WoR0DrA,7367
36
+ llms/extensions/providers/__pycache__/google.cpython-314.pyc,sha256=STxidyM6xp0vwkCLO29wDTIw1jXluDBIB4KLNKf4c14,17473
37
+ llms/extensions/providers/__pycache__/nvidia.cpython-314.pyc,sha256=UOsgdqA2-9E5jVo2CbytViJxrk5AEdXJvH9X0gmK_mA,6216
38
+ llms/extensions/providers/__pycache__/openai.cpython-314.pyc,sha256=mu8QC52_OUwtFX89FN_WXZgkgoFglvF1gDukN4ge8Rk,8735
39
+ llms/extensions/providers/__pycache__/openrouter.cpython-314.pyc,sha256=LknnfQPVrXB2-7GCKVHoXIk6mW2ghRlQmn8piwQCv3I,5335
40
+ llms/extensions/system_prompts/__init__.py,sha256=TZy1CS2dPkBNBA_Ovf9BlVetZqTt2NgnsrZi6Mtg_C0,1535
41
+ llms/extensions/system_prompts/__pycache__/__init__.cpython-314.pyc,sha256=mftPdTu1qDLxifGSy9TkAAYPXxOkuNv7dUmQoZBC5Uk,2168
42
+ llms/extensions/system_prompts/ui/index.mjs,sha256=AOqai6X7kEe_sINoP8Ta-71Rj3RHEoXwZcgf9GTCs10,12158
43
+ llms/extensions/system_prompts/ui/prompts.json,sha256=eu7h4i2XAEcrID2Zr2ma0pweg2WfFehDAvTPaToqcBk,128484
44
+ llms/extensions/tools/ui/index.mjs,sha256=GoC_2LPbxohN4p89lXZNp6g6p2LbYsnxQjM7leo8JrI,9479
45
+ llms/ui/App.mjs,sha256=3DiXiodIsd5qImLXvQz9BHhcPKYd4KlrI3-ALB8Gkn4,7468
46
+ llms/ui/ai.mjs,sha256=hr7SQLuxs5nR_vicrHnUPWS00gretbLipsqXqX8J2w8,5541
47
+ llms/ui/app.css,sha256=-fzqnqcKSa-pnW5iCVI6BdFb7DmmTUvgqbkBFYStbEs,179072
48
+ llms/ui/ctx.mjs,sha256=Ed9ZqMvpXKWnmBdDyKtihZHxtcUD2t2GSVLUeurgoNU,8167
49
+ llms/ui/fav.svg,sha256=_R6MFeXl6wBFT0lqcUxYQIDWgm246YH_3hSTW0oO8qw,734
50
+ llms/ui/index.mjs,sha256=Bt71PTJxK0kv2leNrAHtpUzLs49kNaTgNSxH4gOqQsI,4329
51
+ llms/ui/markdown.mjs,sha256=WcYnT7xZFOc-TXbghVGSBjQJdLGTXq9vZ1LEIaYdcao,6611
52
+ llms/ui/tailwind.input.css,sha256=1CMKv3_YkX9q2w0yNAjmvcOIHArvLtreoSt6TZ7OM1w,15067
53
+ llms/ui/typography.css,sha256=6o7pbMIamRVlm2GfzSStpcOG4T5eFCK_WcQ3RIHKAsU,19587
54
+ llms/ui/utils.mjs,sha256=TYsZ7zQNyBNpu_QvojbVwXR6rYUvadirCphnrLaViDk,5996
55
+ llms/ui/lib/chart.js,sha256=dx8FdDX0Rv6OZtZjr9FQh5h-twFsKjfnb-FvFlQ--cU,196176
56
+ llms/ui/lib/charts.mjs,sha256=OPFAifcA4MPRv8pw6I7glVh7Xccv8guio0k35zPBDIY,926
57
+ llms/ui/lib/color.js,sha256=DDG7Pr-qzJHTPISZNSqP_qJR8UflKHEc_56n6xrBugQ,8273
58
+ llms/ui/lib/highlight.min.mjs,sha256=sG7wq8bF-IKkfie7S4QSyh5DdHBRf0NqQxMOEH8-MT0,127458
59
+ llms/ui/lib/idb.min.mjs,sha256=CeTXyV4I_pB5vnibvJuyXdMs0iVF2ZL0Z7cdm3w_QaI,3853
60
+ llms/ui/lib/marked.min.mjs,sha256=QRHb_VZugcBJRD2EP6gYlVFEsJw5C2fQ8ImMf_pA2_s,39488
61
+ llms/ui/lib/servicestack-client.mjs,sha256=UVafVbzhJ_0N2lzv7rlzIbzwnWpoqXxGk3N3FSKgOOc,54534
62
+ llms/ui/lib/servicestack-vue.mjs,sha256=4XxQLaKm26aexbY7lYTSMRmjZmBRzZgq7F8GZquuGrs,216947
63
+ llms/ui/lib/vue-router.min.mjs,sha256=fR30GHoXI1u81zyZ26YEU105pZgbbAKSXbpnzFKIxls,30418
64
+ llms/ui/lib/vue.min.mjs,sha256=iXh97m5hotl0eFllb3aoasQTImvp7mQoRJ_0HoxmZkw,163811
65
+ llms/ui/lib/vue.mjs,sha256=dS8LKOG01t9CvZ04i0tbFXHqFXOO_Ha4NmM3BytjQAs,537071
66
+ llms/ui/modules/layout.mjs,sha256=ft5dOT-fBegSmSPQKnktHKfpbmNFan8ZN44z25T8ig8,10892
67
+ llms/ui/modules/model-selector.mjs,sha256=Olz9bFGKYfB_N9IsgnW8iafzPybJORoGfeLYAmvsvj8,67475
68
+ llms/ui/modules/chat/ChatBody.mjs,sha256=ykNYidZYkwSDq8f9v46bQ9C7efn9lqHTiZY7a4GQ8V4,41799
69
+ llms/ui/modules/chat/HomeTools.mjs,sha256=DH4Btl-fy_L5mxzrWpGu-3ehx323D-EbAonE9oKv5Jw,11206
70
+ llms/ui/modules/chat/SettingsDialog.mjs,sha256=HMBJTwrapKrRIAstIIqp0QlJL5O-ho4hzgvfagPfsX8,19930
71
+ llms/ui/modules/chat/index.mjs,sha256=Ol9HNFeXJRDyOh_z5-FA2P82M6MZstb1cOvf4yQWWKw,36974
72
+ llms/ui/modules/threads/Recents.mjs,sha256=xiN5K9SYc0oJug60m6g_lPVw-75lNkp1ATuVUYgIgX8,8826
73
+ llms/ui/modules/threads/index.mjs,sha256=rMemKxwo7WzmbBR28K6AE7qhweAeCuGOpWLhu6bxyg0,11087
74
+ llms/ui/modules/threads/threadStore.mjs,sha256=_1f6XZSDzz5DB6orA8cNsk2iPA_Kt2KHSf_1mg4TsWo,18504
75
+ llms_py-3.0.0b7.dist-info/licenses/LICENSE,sha256=bus9cuAOWeYqBk2OuhSABVV1P4z7hgrEFISpyda_H5w,1532
76
+ llms_py-3.0.0b7.dist-info/METADATA,sha256=1Z3sr1wlxl0EbhX4FzfQOqnoSwXbSnbGaiulGIUz--0,2193
77
+ llms_py-3.0.0b7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
78
+ llms_py-3.0.0b7.dist-info/entry_points.txt,sha256=WswyE7PfnkZMIxboC-MS6flBD6wm-CYU7JSUnMhqMfM,40
79
+ llms_py-3.0.0b7.dist-info/top_level.txt,sha256=gC7hk9BKSeog8gyg-EM_g2gxm1mKHwFRfK-10BxOsa4,5
80
+ llms_py-3.0.0b7.dist-info/RECORD,,
@@ -1,66 +0,0 @@
1
- llms/__init__.py,sha256=DKwTZDsyYL_wHe7yvLw49Nf8PSgPSyWaeVdotUqSvrQ,84
2
- llms/__main__.py,sha256=hrBulHIt3lmPm1BCyAEVtB6DQ0Hvc3gnIddhHCmJasg,151
3
- llms/index.html,sha256=gABCGg8ALHyB8OSH745HXx7U0SrXuNtJry9buUbVDik,2117
4
- llms/llms.json,sha256=j7CmFdMpzNeo0nCPHHR4djYfzH_AFKKYIAH3cL3TKT8,10641
5
- llms/main.py,sha256=-eTSDChJ3s_fkeImBnBv1tEK8-xPVqg4UyhUwEBYikw,129665
6
- llms/providers-extra.json,sha256=rBVTg46s5bJ6ou9H45FW0RW1mvbW_cKMnjWQBgz-gUI,11107
7
- llms/providers.json,sha256=mP4vQ37LeRAZCpT3WPO2GZaZ3YsXodXBV5OVbVMBAmo,256222
8
- llms/__pycache__/__init__.cpython-312.pyc,sha256=lg2oFc0aKgj536NOJxcIpbCpEWi47ptF8NufPphgUUk,204
9
- llms/__pycache__/__init__.cpython-313.pyc,sha256=DvmykIYAjV4Xjv5NeC70BA0JIX8qtwEWP2dfzmOBrps,173
10
- llms/__pycache__/__init__.cpython-314.pyc,sha256=9CxeBz41D_-ezno6pIOsnoMAFzdRX2uZjKkBLUm25RQ,206
11
- llms/__pycache__/__main__.cpython-312.pyc,sha256=fcu9LVl5nfdSzg9HqoKyDGoDvENeIXKkjygN7FENEGE,321
12
- llms/__pycache__/__main__.cpython-314.pyc,sha256=IFxtGVpJq_3whKuM5Ln7YMweKFNbHVp8M7VSrLK5h2A,324
13
- llms/__pycache__/llms.cpython-312.pyc,sha256=S5dFI79JdUe2dQW4ogdB-CCNhudQeFaFGcfKxgJGBms,72080
14
- llms/__pycache__/main.cpython-312.pyc,sha256=HrqApYAiiBmYN73HIx_Hl2-Xm1Gy7I_0zuR5j86qoRM,104940
15
- llms/__pycache__/main.cpython-313.pyc,sha256=6NQ__SJ2rC9ItFLKLHL5ewb5RqxLzZabwgczA9wZd-w,74814
16
- llms/__pycache__/main.cpython-314.pyc,sha256=METGiXfh3xSME50Nm63-oTkoCqcbCsfwuseLVzDyLp8,166873
17
- llms/__pycache__/plugins.cpython-314.pyc,sha256=fer8nTkidG_vQSx80tL2bAvMS0opDom93bewjseFcyg,3560
18
- llms/providers/anthropic.py,sha256=KBwIPkGFkNCJxlLAY5MzFpEj7AB4d0WwpaOfZfvCrk0,8091
19
- llms/providers/chutes.py,sha256=TTDfWviHOoNfk2cXnY5UJK_fciRJ2drfz48u67TDmCM,6171
20
- llms/providers/google.py,sha256=aK9t7iPLmziUx7q6blF_G2MQUHFA1h8t461euxWWtVc,15104
21
- llms/providers/nvidia.py,sha256=HRcI1-fgMGq5_9s6br9YHVVOIaXRtOGCgUPSCHXB-_0,4355
22
- llms/providers/openai.py,sha256=zQqxXyF9v7CplmzebFIXd-Xfj7AcP_bIK6G8fPZh2p8,6355
23
- llms/providers/openrouter.py,sha256=unXvR2KMsosWJe8_7k-JhDM8V_XtVUtnNO2psgtkTNk,3055
24
- llms/providers/__pycache__/anthropic.cpython-314.pyc,sha256=tRLB3xJoPi0dLXY85JgXcD_DHIwhBcScx08NiHTiwdw,9158
25
- llms/providers/__pycache__/chutes.cpython-314.pyc,sha256=TFAoyWV3rwvmcVi17ACgdqPY0Vh_kITFJ-IOGAtZp8w,7404
26
- llms/providers/__pycache__/google.cpython-314.pyc,sha256=mprVq3i-Ma9La9EgUcUh7AXUaPWTBn6STM-w2LZN2Tc,13858
27
- llms/providers/__pycache__/nvidia.cpython-314.pyc,sha256=pE2P5sz0EjRp3DYy-MiEAf_kq3Ns03Q0f-DQGa8UOXQ,6155
28
- llms/providers/__pycache__/openai.cpython-314.pyc,sha256=-OnbDtGalUx3NtRU_sAwRL_TvrnKOworTliwS164IUY,8705
29
- llms/providers/__pycache__/openrouter.cpython-314.pyc,sha256=5zAegKxy40P1uX87T9KhaE5s54UXSq9fjsG0i2n84tc,5078
30
- llms/ui/App.mjs,sha256=PYdiU3hkn7nHbRVURpN0ruLMfPDulTCWb-BIe0-PT_I,7188
31
- llms/ui/ai.mjs,sha256=qLfTTi96LARr0GxH0VdOFg-pOdR80nONqOaIJSqvBXA,5315
32
- llms/ui/app.css,sha256=Tc3JVtpEkXnE0H2cyAmE5bhF96eUsVzBHFqAJAODawc,124819
33
- llms/ui/ctx.mjs,sha256=j8zHy08DWAXkmaNBBkcr6Fs-D7uApTIArsA0QqXl7OM,6395
34
- llms/ui/fav.svg,sha256=_R6MFeXl6wBFT0lqcUxYQIDWgm246YH_3hSTW0oO8qw,734
35
- llms/ui/index.mjs,sha256=-GTK8ftHEiCygv3dWVUdHlqGW7JoE0aLURYQmJ706aY,4171
36
- llms/ui/markdown.mjs,sha256=WcYnT7xZFOc-TXbghVGSBjQJdLGTXq9vZ1LEIaYdcao,6611
37
- llms/ui/tailwind.input.css,sha256=1CMKv3_YkX9q2w0yNAjmvcOIHArvLtreoSt6TZ7OM1w,15067
38
- llms/ui/typography.css,sha256=6o7pbMIamRVlm2GfzSStpcOG4T5eFCK_WcQ3RIHKAsU,19587
39
- llms/ui/utils.mjs,sha256=gbv8oCHP39GHEKt-oLZ-ZBMrkGd7bPRuTkYu4ggim1k,5401
40
- llms/ui/lib/chart.js,sha256=dx8FdDX0Rv6OZtZjr9FQh5h-twFsKjfnb-FvFlQ--cU,196176
41
- llms/ui/lib/charts.mjs,sha256=OPFAifcA4MPRv8pw6I7glVh7Xccv8guio0k35zPBDIY,926
42
- llms/ui/lib/color.js,sha256=DDG7Pr-qzJHTPISZNSqP_qJR8UflKHEc_56n6xrBugQ,8273
43
- llms/ui/lib/highlight.min.mjs,sha256=sG7wq8bF-IKkfie7S4QSyh5DdHBRf0NqQxMOEH8-MT0,127458
44
- llms/ui/lib/idb.min.mjs,sha256=CeTXyV4I_pB5vnibvJuyXdMs0iVF2ZL0Z7cdm3w_QaI,3853
45
- llms/ui/lib/marked.min.mjs,sha256=QRHb_VZugcBJRD2EP6gYlVFEsJw5C2fQ8ImMf_pA2_s,39488
46
- llms/ui/lib/servicestack-client.mjs,sha256=UVafVbzhJ_0N2lzv7rlzIbzwnWpoqXxGk3N3FSKgOOc,54534
47
- llms/ui/lib/servicestack-vue.mjs,sha256=4XxQLaKm26aexbY7lYTSMRmjZmBRzZgq7F8GZquuGrs,216947
48
- llms/ui/lib/vue-router.min.mjs,sha256=fR30GHoXI1u81zyZ26YEU105pZgbbAKSXbpnzFKIxls,30418
49
- llms/ui/lib/vue.min.mjs,sha256=iXh97m5hotl0eFllb3aoasQTImvp7mQoRJ_0HoxmZkw,163811
50
- llms/ui/lib/vue.mjs,sha256=dS8LKOG01t9CvZ04i0tbFXHqFXOO_Ha4NmM3BytjQAs,537071
51
- llms/ui/modules/analytics.mjs,sha256=uDotilFz7V4Bl-tCFaOnCvx-S0SGnM5vvPZ1xEytIAk,74167
52
- llms/ui/modules/layout.mjs,sha256=WTy85_8rSyBQooo2f5baw98RzNhpecw4pDpfhEgKv4s,12105
53
- llms/ui/modules/model-selector.mjs,sha256=dekgCdaqoWX_9fnpI8mhd6lU25JV7vxBoVQVVuF2p-I,67474
54
- llms/ui/modules/tools.mjs,sha256=ciFtujb60iIVjxAq-emEDs06iygZ6rSyMGwL0BG4xWI,9472
55
- llms/ui/modules/chat/ChatBody.mjs,sha256=5xbBLQShRtBXZjM_bShihZu1Pr7UpPS3vjw47vSvgU8,52861
56
- llms/ui/modules/chat/SettingsDialog.mjs,sha256=N_Xnd9eXkXuw8cVaKR77k16TgOitB9btInW8Qp-WK7U,19929
57
- llms/ui/modules/chat/index.mjs,sha256=AIgAffafq027vviAD26wtxHZ5mP2wiVgTtb4kwAs3yU,34387
58
- llms/ui/modules/threads/Recents.mjs,sha256=xiN5K9SYc0oJug60m6g_lPVw-75lNkp1ATuVUYgIgX8,8826
59
- llms/ui/modules/threads/index.mjs,sha256=0ZwVb6W2BT3mwK5bwKgtlJEGJ9IAnQr7qk3XNG1LnFU,11397
60
- llms/ui/modules/threads/threadStore.mjs,sha256=cGm6g4dn5q0u_K6Bu5xuoAmBuURquubK7R4ahSKNC_E,16886
61
- llms_py-3.0.0b5.dist-info/licenses/LICENSE,sha256=bus9cuAOWeYqBk2OuhSABVV1P4z7hgrEFISpyda_H5w,1532
62
- llms_py-3.0.0b5.dist-info/METADATA,sha256=L9f33EXDWAR9OPkc3No8-mFbXDmi-7HMuyR92E36hSo,2193
63
- llms_py-3.0.0b5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
64
- llms_py-3.0.0b5.dist-info/entry_points.txt,sha256=WswyE7PfnkZMIxboC-MS6flBD6wm-CYU7JSUnMhqMfM,40
65
- llms_py-3.0.0b5.dist-info/top_level.txt,sha256=gC7hk9BKSeog8gyg-EM_g2gxm1mKHwFRfK-10BxOsa4,5
66
- llms_py-3.0.0b5.dist-info/RECORD,,