llms-py 3.0.0b1__py3-none-any.whl → 3.0.0b2__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 (39) hide show
  1. llms/__pycache__/__init__.cpython-312.pyc +0 -0
  2. llms/__pycache__/__init__.cpython-313.pyc +0 -0
  3. llms/__pycache__/__init__.cpython-314.pyc +0 -0
  4. llms/__pycache__/__main__.cpython-312.pyc +0 -0
  5. llms/__pycache__/__main__.cpython-314.pyc +0 -0
  6. llms/__pycache__/llms.cpython-312.pyc +0 -0
  7. llms/__pycache__/main.cpython-312.pyc +0 -0
  8. llms/__pycache__/main.cpython-313.pyc +0 -0
  9. llms/__pycache__/main.cpython-314.pyc +0 -0
  10. llms/__pycache__/plugins.cpython-314.pyc +0 -0
  11. llms/index.html +25 -56
  12. llms/llms.json +2 -2
  13. llms/main.py +452 -93
  14. llms/providers.json +1 -1
  15. llms/ui/App.mjs +25 -4
  16. llms/ui/Avatar.mjs +3 -2
  17. llms/ui/ChatPrompt.mjs +43 -52
  18. llms/ui/Main.mjs +87 -98
  19. llms/ui/OAuthSignIn.mjs +2 -33
  20. llms/ui/ProviderStatus.mjs +7 -8
  21. llms/ui/Recents.mjs +10 -9
  22. llms/ui/Sidebar.mjs +2 -1
  23. llms/ui/SignIn.mjs +7 -6
  24. llms/ui/ai.mjs +9 -41
  25. llms/ui/app.css +137 -138
  26. llms/ui/index.mjs +213 -0
  27. llms/ui/{ModelSelector.mjs → model-selector.mjs} +193 -200
  28. llms/ui/tailwind.input.css +441 -79
  29. llms/ui/threadStore.mjs +17 -6
  30. llms/ui/utils.mjs +1 -0
  31. {llms_py-3.0.0b1.dist-info → llms_py-3.0.0b2.dist-info}/METADATA +1 -1
  32. llms_py-3.0.0b2.dist-info/RECORD +58 -0
  33. llms/ui/SystemPromptEditor.mjs +0 -31
  34. llms/ui/SystemPromptSelector.mjs +0 -56
  35. llms_py-3.0.0b1.dist-info/RECORD +0 -49
  36. {llms_py-3.0.0b1.dist-info → llms_py-3.0.0b2.dist-info}/WHEEL +0 -0
  37. {llms_py-3.0.0b1.dist-info → llms_py-3.0.0b2.dist-info}/entry_points.txt +0 -0
  38. {llms_py-3.0.0b1.dist-info → llms_py-3.0.0b2.dist-info}/licenses/LICENSE +0 -0
  39. {llms_py-3.0.0b1.dist-info → llms_py-3.0.0b2.dist-info}/top_level.txt +0 -0
llms/ui/threadStore.mjs CHANGED
@@ -8,6 +8,13 @@ const currentThread = ref(null)
8
8
  const isLoading = ref(false)
9
9
 
10
10
  let db = null
11
+ let ctx = null
12
+
13
+ export default {
14
+ install(context) {
15
+ ctx = context
16
+ }
17
+ }
11
18
 
12
19
  // Initialize IndexedDB
13
20
  async function initDB() {
@@ -103,20 +110,22 @@ async function logRequest(threadId, model, request, response) {
103
110
  }
104
111
 
105
112
  // Create a new thread
106
- async function createThread(title = 'New Chat', model = null, systemPrompt = '') {
113
+ async function createThread(args = {}) {
107
114
  await initDB()
108
115
 
109
116
  const thread = {
110
117
  id: generateThreadId(),
111
- title: title,
112
- model: model?.id ?? '',
113
- info: toModelInfo(model),
114
- systemPrompt: systemPrompt,
115
118
  messages: [],
116
119
  createdAt: new Date().toISOString(),
117
- updatedAt: new Date().toISOString()
120
+ updatedAt: new Date().toISOString(),
121
+ ...args
122
+ }
123
+ if (!thread.title) {
124
+ thread.title = 'New Chat'
118
125
  }
119
126
 
127
+ ctx.createThreadFilters.forEach(f => f(thread))
128
+
120
129
  try {
121
130
  const tx = db.transaction(['threads'], 'readwrite')
122
131
  await tx.objectStore('threads').add(thread)
@@ -148,6 +157,8 @@ async function updateThread(threadId, updates) {
148
157
  updatedAt: new Date().toISOString()
149
158
  }
150
159
 
160
+ ctx.updateThreadFilters.forEach(f => f(updatedThread))
161
+
151
162
  await store.put(updatedThread)
152
163
  await tx.complete
153
164
 
llms/ui/utils.mjs CHANGED
@@ -118,6 +118,7 @@ export function deepClone(o) {
118
118
  return structuredClone(o)
119
119
  } catch (e) {
120
120
  console.warn('structuredClone failed, falling back to JSON:', e)
121
+ console.log(JSON.stringify(o, undefined, 2))
121
122
  }
122
123
  }
123
124
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: llms-py
3
- Version: 3.0.0b1
3
+ Version: 3.0.0b2
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,58 @@
1
+ llms/__init__.py,sha256=DKwTZDsyYL_wHe7yvLw49Nf8PSgPSyWaeVdotUqSvrQ,84
2
+ llms/__main__.py,sha256=hrBulHIt3lmPm1BCyAEVtB6DQ0Hvc3gnIddhHCmJasg,151
3
+ llms/index.html,sha256=K-kQuV8Qk-ZdD0iyWbLBGxuo7jY8dXLlSY-cXFHv84c,2079
4
+ llms/llms.json,sha256=e9CDUaABFuNxcsF6lOlKBTJcX3MKAGY3jED7CgCUZF0,9699
5
+ llms/main.py,sha256=Gl69g6oNo7tRohJxZgCK27qtelhNxnmj1Li_uEoadrE,130839
6
+ llms/providers.json,sha256=_0YEqStJhnXKjQuXssayj8CH12VFAuQWuvyrBQtCWr4,226852
7
+ llms/ui.json,sha256=iBOmpNeD5-o8AgUa51ymS-KemovJ7bm9J1fnL0nf8jk,134025
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=EZZmS1VitUA1zdiwfIYW-b4cpEsbrFESNdGJRcv3vHU,164343
17
+ llms/__pycache__/plugins.cpython-314.pyc,sha256=fer8nTkidG_vQSx80tL2bAvMS0opDom93bewjseFcyg,3560
18
+ llms/ui/Analytics.mjs,sha256=LfWbUlpb__0EEYtHu6e4r8AeyhsNQeAxrg44RuNSR0M,73261
19
+ llms/ui/App.mjs,sha256=JMxFtsJ03sZZYmHseCOG3mei0TyB5WSCsqlLlnGCLDU,4478
20
+ llms/ui/Avatar.mjs,sha256=VdTFpzD1ZpYW6WhcLjmOkEtMGJGgG4RaeLd8GUKpBcU,3416
21
+ llms/ui/Brand.mjs,sha256=JLN_lPirNXqS332g0B_WVOlFRVg3lNe1Q56TRnpj0zQ,3411
22
+ llms/ui/ChatPrompt.mjs,sha256=Bpvp9ANq_nnZBpmzMbOnYp_rPATla1Xa9qMZzMegXFk,26588
23
+ llms/ui/Main.mjs,sha256=KlIUA-tj7yBKl2rTyzbLn2xp2MLlowMWI3XtSM2UR6I,45258
24
+ llms/ui/OAuthSignIn.mjs,sha256=3WzJ4mhwHgN2ymkb5cmYHpJi961KgctwAbM_uJ7Cq8k,3504
25
+ llms/ui/ProviderIcon.mjs,sha256=XdEJRm90Zaeu7AlcxfLTXqh_jj2F5JvFkug0XexZeQc,22900
26
+ llms/ui/ProviderStatus.mjs,sha256=aeYN0Rr2oYpEKGAAkqmdp618tY504rRgTSPbOaLCSzU,6081
27
+ llms/ui/Recents.mjs,sha256=asQgduWj1eP0o1ft5CnlS85jDpP60mkUD4xtmQpTxmo,8902
28
+ llms/ui/SettingsDialog.mjs,sha256=vyqLOrACBICwT8qQ10oJAMOYeA1phrAyz93mZygn-9Y,19956
29
+ llms/ui/Sidebar.mjs,sha256=bIRafgZRpNzxZwTxElJ1hM-zry2oz3DMp_aX8VRK1rU,11211
30
+ llms/ui/SignIn.mjs,sha256=hJ-lCZtt4GfVBv8ylGsZ7CB1yJLcZVhHqEdfGLjKKN4,2340
31
+ llms/ui/Welcome.mjs,sha256=r9j7unF9CF3k7gEQBMRMVsa2oSjgHGNn46Oa5l5BwlY,950
32
+ llms/ui/ai.mjs,sha256=k4kqD33Rx-lHVOqmVlFmAyqV3pKA5SyCjnD5Pmr69yU,3346
33
+ llms/ui/app.css,sha256=Qavq-7xEfzKZ67-LDIsmVpNbgaRkmiBP0HOrMhXpA6M,118798
34
+ llms/ui/fav.svg,sha256=_R6MFeXl6wBFT0lqcUxYQIDWgm246YH_3hSTW0oO8qw,734
35
+ llms/ui/index.mjs,sha256=O7DCCFQ0ozCkDIeTkp_Jk1lbwO_lxYm_jx_NClKA1zU,6353
36
+ llms/ui/markdown.mjs,sha256=0LUF2Tyvpv88ic-MjdUjAAdd1Rt8LYA_d7VRA-kBFuM,6518
37
+ llms/ui/model-selector.mjs,sha256=wREYMzM0ItfEVhNyKS16BA08jJCfo8MXWNoPY4mHrUI,35619
38
+ llms/ui/tailwind.input.css,sha256=5PiDdc5nyPE9Fheg_PgLnz3RR3C0o5x6M3M-KWVFo-4,14403
39
+ llms/ui/threadStore.mjs,sha256=r5KWZnQ3yf06cseFfwaIHFUrm190GhIrVEZ_vo8VHbM,16821
40
+ llms/ui/typography.css,sha256=6o7pbMIamRVlm2GfzSStpcOG4T5eFCK_WcQ3RIHKAsU,19587
41
+ llms/ui/utils.mjs,sha256=Lw2MSuN4qYSJsf0HwBOCgSI2i5o-hi_nEgFycd2DI0g,7340
42
+ llms/ui/lib/chart.js,sha256=dx8FdDX0Rv6OZtZjr9FQh5h-twFsKjfnb-FvFlQ--cU,196176
43
+ llms/ui/lib/charts.mjs,sha256=MNym9qE_2eoH6M7_8Gj9i6e6-Y3b7zw9UQWCUHRF6x0,1088
44
+ llms/ui/lib/color.js,sha256=DDG7Pr-qzJHTPISZNSqP_qJR8UflKHEc_56n6xrBugQ,8273
45
+ llms/ui/lib/highlight.min.mjs,sha256=sG7wq8bF-IKkfie7S4QSyh5DdHBRf0NqQxMOEH8-MT0,127458
46
+ llms/ui/lib/idb.min.mjs,sha256=CeTXyV4I_pB5vnibvJuyXdMs0iVF2ZL0Z7cdm3w_QaI,3853
47
+ llms/ui/lib/marked.min.mjs,sha256=QRHb_VZugcBJRD2EP6gYlVFEsJw5C2fQ8ImMf_pA2_s,39488
48
+ llms/ui/lib/servicestack-client.mjs,sha256=UVafVbzhJ_0N2lzv7rlzIbzwnWpoqXxGk3N3FSKgOOc,54534
49
+ llms/ui/lib/servicestack-vue.mjs,sha256=unTA8lM0tKy2PwZiJ8UEvrTuGmei8jNZnmmuQ5MKyV4,216753
50
+ llms/ui/lib/vue-router.min.mjs,sha256=fR30GHoXI1u81zyZ26YEU105pZgbbAKSXbpnzFKIxls,30418
51
+ llms/ui/lib/vue.min.mjs,sha256=iXh97m5hotl0eFllb3aoasQTImvp7mQoRJ_0HoxmZkw,163811
52
+ llms/ui/lib/vue.mjs,sha256=dS8LKOG01t9CvZ04i0tbFXHqFXOO_Ha4NmM3BytjQAs,537071
53
+ llms_py-3.0.0b2.dist-info/licenses/LICENSE,sha256=bus9cuAOWeYqBk2OuhSABVV1P4z7hgrEFISpyda_H5w,1532
54
+ llms_py-3.0.0b2.dist-info/METADATA,sha256=D8vEf8jkSvsAu3jOgJ-SIj8j3HsFqXjpJy5d2s_dT-o,2193
55
+ llms_py-3.0.0b2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
56
+ llms_py-3.0.0b2.dist-info/entry_points.txt,sha256=WswyE7PfnkZMIxboC-MS6flBD6wm-CYU7JSUnMhqMfM,40
57
+ llms_py-3.0.0b2.dist-info/top_level.txt,sha256=gC7hk9BKSeog8gyg-EM_g2gxm1mKHwFRfK-10BxOsa4,5
58
+ llms_py-3.0.0b2.dist-info/RECORD,,
@@ -1,31 +0,0 @@
1
- export default {
2
- template:`
3
- <div class="border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800 px-6 py-4">
4
- <div class="max-w-6xl mx-auto">
5
- <label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
6
- System Prompt
7
- <span v-if="selected" class="text-gray-500 dark:text-gray-400 font-normal">
8
- ({{ prompts.find(p => p.id === selected.id)?.name || 'Custom' }})
9
- </span>
10
- </label>
11
- <textarea
12
- :value="modelValue" @input="$emit('update:modelValue', $event.target.value)"
13
- placeholder="Enter a system prompt to guide AI's behavior..."
14
- rows="6"
15
- class="block w-full resize-vertical rounded-md border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-900 text-gray-900 dark:text-gray-100 px-3 py-2 text-sm placeholder-gray-500 dark:placeholder-gray-400 focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500"
16
- ></textarea>
17
- <div class="mt-2 text-xs text-gray-500 dark:text-gray-400">
18
- You can modify this system prompt before sending messages. Changes will only apply to new conversations.
19
- </div>
20
- </div>
21
- </div>
22
- `,
23
- emits: ['update:modelValue'],
24
- props: {
25
- prompts: Array,
26
- selected: Object,
27
- modelValue: String,
28
- },
29
- setup() {
30
- }
31
- }
@@ -1,56 +0,0 @@
1
- import { ref, onMounted, onUnmounted } from "vue"
2
- export default {
3
- template:`
4
- <button v-if="modelValue" type="button" title="Clear System Prompt" @click="$emit('update:modelValue', null)">
5
- <svg class="size-4 text-gray-500 dark:text-gray-400" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12z"/></svg>
6
- </button>
7
-
8
- <Autocomplete ref="refSelector" id="prompt" :options="prompts" label=""
9
- :modelValue="modelValue" @update:modelValue="$emit('update:modelValue', $event)"
10
- class="w-68 xl:w-84"
11
- :match="(x, value) => x.name.toLowerCase().includes(value.toLowerCase())"
12
- placeholder="Select a System Prompt...">
13
- <template #item="{ value }">
14
- <div class="truncate max-w-72" :title="value">{{value}}</div>
15
- </template>
16
- </Autocomplete>
17
-
18
- <!-- Toggle System Prompt Visibility -->
19
- <button type="button"
20
- @click="$emit('toggle')"
21
- :class="show ? 'text-blue-700 dark:text-blue-400' : 'text-gray-600 dark:text-gray-400'"
22
- class="p-1 rounded-md hover:bg-blue-100 dark:hover:bg-blue-900/30 hover:text-blue-700 dark:hover:text-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"
23
- :title="show ? 'Hide system prompt' : 'Show system prompt'"
24
- >
25
- <svg v-if="!show" class="size-6" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="currentColor" d="M33.62 17.53c-3.37-6.23-9.28-10-15.82-10S5.34 11.3 2 17.53l-.28.47l.26.48c3.37 6.23 9.28 10 15.82 10s12.46-3.72 15.82-10l.26-.48Zm-15.82 8.9C12.17 26.43 7 23.29 4 18c3-5.29 8.17-8.43 13.8-8.43S28.54 12.72 31.59 18c-3.05 5.29-8.17 8.43-13.79 8.43"/><path fill="currentColor" d="M18.09 11.17A6.86 6.86 0 1 0 25 18a6.86 6.86 0 0 0-6.91-6.83m0 11.72A4.86 4.86 0 1 1 23 18a4.87 4.87 0 0 1-4.91 4.89"/><path fill="none" d="M0 0h36v36H0z"/></svg>
26
- <svg v-else class="size-6" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="currentColor" d="M25.19 20.4a6.8 6.8 0 0 0 .43-2.4a6.86 6.86 0 0 0-6.86-6.86a6.8 6.8 0 0 0-2.37.43L18 13.23a5 5 0 0 1 .74-.06A4.87 4.87 0 0 1 23.62 18a5 5 0 0 1-.06.74Z" class="clr-i-outline clr-i-outline-path-1"/><path fill="currentColor" d="M34.29 17.53c-3.37-6.23-9.28-10-15.82-10a16.8 16.8 0 0 0-5.24.85L14.84 10a14.8 14.8 0 0 1 3.63-.47c5.63 0 10.75 3.14 13.8 8.43a17.8 17.8 0 0 1-4.37 5.1l1.42 1.42a19.9 19.9 0 0 0 5-6l.26-.48Z"/><path fill="currentColor" d="m4.87 5.78l4.46 4.46a19.5 19.5 0 0 0-6.69 7.29l-.26.47l.26.48c3.37 6.23 9.28 10 15.82 10a16.9 16.9 0 0 0 7.37-1.69l5 5l1.75-1.5l-26-26Zm9.75 9.75l6.65 6.65a4.8 4.8 0 0 1-2.5.72A4.87 4.87 0 0 1 13.9 18a4.8 4.8 0 0 1 .72-2.47m-1.45-1.45a6.85 6.85 0 0 0 9.55 9.55l1.6 1.6a14.9 14.9 0 0 1-5.86 1.2c-5.63 0-10.75-3.14-13.8-8.43a17.3 17.3 0 0 1 6.12-6.3Z"/><path fill="none" d="M0 0h36v36H0z"/></svg>
27
- </button>
28
- `,
29
- emits: ['updated', 'update:modelValue', 'toggle'],
30
- props: {
31
- prompts: Array,
32
- modelValue: Object,
33
- show: Boolean,
34
- },
35
- setup() {
36
- const refSelector = ref()
37
-
38
- function collapse(e) {
39
- // call toggle when clicking outside of the Autocomplete component
40
- if (refSelector.value && !refSelector.value.$el.contains(e.target)) {
41
- refSelector.value.toggle(false)
42
- }
43
- }
44
-
45
- onMounted(() => {
46
- document.addEventListener('click', collapse)
47
- })
48
- onUnmounted(() => {
49
- document.removeEventListener('click', collapse)
50
- })
51
-
52
- return {
53
- refSelector,
54
- }
55
- }
56
- }
@@ -1,49 +0,0 @@
1
- llms/__init__.py,sha256=DKwTZDsyYL_wHe7yvLw49Nf8PSgPSyWaeVdotUqSvrQ,84
2
- llms/__main__.py,sha256=hrBulHIt3lmPm1BCyAEVtB6DQ0Hvc3gnIddhHCmJasg,151
3
- llms/index.html,sha256=_pkjdzCX95HTf19LgE4gMh6tLittcnf7M_jL2hSEbbM,3250
4
- llms/llms.json,sha256=Y_J3Usw0tt96fc7Dp_fY41wjHrIRKbx0gS0-gk2Uoqk,9697
5
- llms/main.py,sha256=knAHWd0WZO_nSLrAqDVTziPa0CjQfS8Ahsk9vuw510M,117476
6
- llms/providers.json,sha256=meE6G2vyzfKYmwdml9-O8Pm_uGc520bj891SUjQmsLY,215127
7
- llms/ui.json,sha256=iBOmpNeD5-o8AgUa51ymS-KemovJ7bm9J1fnL0nf8jk,134025
8
- llms/ui/Analytics.mjs,sha256=LfWbUlpb__0EEYtHu6e4r8AeyhsNQeAxrg44RuNSR0M,73261
9
- llms/ui/App.mjs,sha256=L8Zn7b7YVqR5jgVQKvo_txijSd1T7jq6QOQEt7Q0eB0,3811
10
- llms/ui/Avatar.mjs,sha256=TgouwV9bN-Ou1Tf2zCDtVaRiUB21TXZZPFCTlFL-xxQ,3387
11
- llms/ui/Brand.mjs,sha256=JLN_lPirNXqS332g0B_WVOlFRVg3lNe1Q56TRnpj0zQ,3411
12
- llms/ui/ChatPrompt.mjs,sha256=vu05EC_mHdiEBYRHUNMJrmyupfhHVo-MZh4QgvNhrsM,26892
13
- llms/ui/Main.mjs,sha256=Z5RQfFF7AaXZ-SSMHBnWeiKnXbZP6po1HY28mBGH9Ro,45867
14
- llms/ui/ModelSelector.mjs,sha256=8WoPrlWXr_kSJN6TFJfGjk6M_GzoEm-trswvprDCwK0,37507
15
- llms/ui/OAuthSignIn.mjs,sha256=IdA9Tbswlh74a_-9e9YulOpqLfRpodRLGfCZ9sTZ5jU,4879
16
- llms/ui/ProviderIcon.mjs,sha256=XdEJRm90Zaeu7AlcxfLTXqh_jj2F5JvFkug0XexZeQc,22900
17
- llms/ui/ProviderStatus.mjs,sha256=Dsr_kzjdYuXNLNIwpcQe3URB4nmBdEEFeU8DgOfWu20,6144
18
- llms/ui/Recents.mjs,sha256=sRoesSktUvBZ7UjfFJwp0btCQj5eQvnTDjSUDzN8ySU,8864
19
- llms/ui/SettingsDialog.mjs,sha256=vyqLOrACBICwT8qQ10oJAMOYeA1phrAyz93mZygn-9Y,19956
20
- llms/ui/Sidebar.mjs,sha256=93wCzrbY4F9VBFGiWujNIj5ynxP_9bmv5pJQOGdybIc,11183
21
- llms/ui/SignIn.mjs,sha256=df3b-7L3ZIneDGbJWUk93K9RGo40gVeuR5StzT1ZH9g,2324
22
- llms/ui/SystemPromptEditor.mjs,sha256=PffkNPV6hGbm1QZBKPI7yvWPZSBL7qla0d-JEJ4mxYo,1466
23
- llms/ui/SystemPromptSelector.mjs,sha256=UgoeuscFes0B1oFkx74dFwC0JgRib37VM4Gy3-kCVDQ,3769
24
- llms/ui/Welcome.mjs,sha256=r9j7unF9CF3k7gEQBMRMVsa2oSjgHGNn46Oa5l5BwlY,950
25
- llms/ui/ai.mjs,sha256=GpYD7np2mFb4FX49dzHZCUUrB9-Aj676zf_1ejVp4tA,4839
26
- llms/ui/app.css,sha256=WrCjd6lJTS6DWuQKUMGPwmrIYCTfauDS_m-ghkoR2qA,119287
27
- llms/ui/fav.svg,sha256=_R6MFeXl6wBFT0lqcUxYQIDWgm246YH_3hSTW0oO8qw,734
28
- llms/ui/markdown.mjs,sha256=0LUF2Tyvpv88ic-MjdUjAAdd1Rt8LYA_d7VRA-kBFuM,6518
29
- llms/ui/tailwind.input.css,sha256=QInTVDpCR89OTzRo9AePdAa-MX3i66RkhNOfa4_7UAg,12086
30
- llms/ui/threadStore.mjs,sha256=CL-dTxnMJsk9ORDiN80FSgdsdDQEmKsZDKI5fAGCr-o,16706
31
- llms/ui/typography.css,sha256=6o7pbMIamRVlm2GfzSStpcOG4T5eFCK_WcQ3RIHKAsU,19587
32
- llms/ui/utils.mjs,sha256=dzBBhltx8bUPasFAM3VRsobbDOesBd2M3mjuYdwAExA,7283
33
- llms/ui/lib/chart.js,sha256=dx8FdDX0Rv6OZtZjr9FQh5h-twFsKjfnb-FvFlQ--cU,196176
34
- llms/ui/lib/charts.mjs,sha256=MNym9qE_2eoH6M7_8Gj9i6e6-Y3b7zw9UQWCUHRF6x0,1088
35
- llms/ui/lib/color.js,sha256=DDG7Pr-qzJHTPISZNSqP_qJR8UflKHEc_56n6xrBugQ,8273
36
- llms/ui/lib/highlight.min.mjs,sha256=sG7wq8bF-IKkfie7S4QSyh5DdHBRf0NqQxMOEH8-MT0,127458
37
- llms/ui/lib/idb.min.mjs,sha256=CeTXyV4I_pB5vnibvJuyXdMs0iVF2ZL0Z7cdm3w_QaI,3853
38
- llms/ui/lib/marked.min.mjs,sha256=QRHb_VZugcBJRD2EP6gYlVFEsJw5C2fQ8ImMf_pA2_s,39488
39
- llms/ui/lib/servicestack-client.mjs,sha256=UVafVbzhJ_0N2lzv7rlzIbzwnWpoqXxGk3N3FSKgOOc,54534
40
- llms/ui/lib/servicestack-vue.mjs,sha256=unTA8lM0tKy2PwZiJ8UEvrTuGmei8jNZnmmuQ5MKyV4,216753
41
- llms/ui/lib/vue-router.min.mjs,sha256=fR30GHoXI1u81zyZ26YEU105pZgbbAKSXbpnzFKIxls,30418
42
- llms/ui/lib/vue.min.mjs,sha256=iXh97m5hotl0eFllb3aoasQTImvp7mQoRJ_0HoxmZkw,163811
43
- llms/ui/lib/vue.mjs,sha256=dS8LKOG01t9CvZ04i0tbFXHqFXOO_Ha4NmM3BytjQAs,537071
44
- llms_py-3.0.0b1.dist-info/licenses/LICENSE,sha256=bus9cuAOWeYqBk2OuhSABVV1P4z7hgrEFISpyda_H5w,1532
45
- llms_py-3.0.0b1.dist-info/METADATA,sha256=jS7M9B8ThKrqFC_Uzuk_fYmbzo3eNNDqiAj6aJY7cZw,2193
46
- llms_py-3.0.0b1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
47
- llms_py-3.0.0b1.dist-info/entry_points.txt,sha256=WswyE7PfnkZMIxboC-MS6flBD6wm-CYU7JSUnMhqMfM,40
48
- llms_py-3.0.0b1.dist-info/top_level.txt,sha256=gC7hk9BKSeog8gyg-EM_g2gxm1mKHwFRfK-10BxOsa4,5
49
- llms_py-3.0.0b1.dist-info/RECORD,,