llms-py 2.0.5__py3-none-any.whl → 2.0.6__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.py +1 -1
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/Main.mjs +177 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/app.css +8 -0
- {llms_py-2.0.5.dist-info → llms_py-2.0.6.dist-info}/METADATA +1 -1
- llms_py-2.0.6.dist-info/RECORD +30 -0
- llms_py-2.0.5.dist-info/RECORD +0 -30
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/index.html +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/llms.json +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/requirements.txt +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/App.mjs +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/ChatPrompt.mjs +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/Recents.mjs +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/Sidebar.mjs +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/fav.svg +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/lib/highlight.min.mjs +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/lib/idb.min.mjs +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/lib/marked.min.mjs +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/lib/servicestack-client.min.mjs +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/lib/servicestack-vue.min.mjs +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/lib/vue-router.min.mjs +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/lib/vue.min.mjs +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/markdown.mjs +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/tailwind.input.css +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/threadStore.mjs +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/typography.css +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui/utils.mjs +0 -0
- {llms_py-2.0.5.data → llms_py-2.0.6.data}/data/ui.json +0 -0
- {llms_py-2.0.5.dist-info → llms_py-2.0.6.dist-info}/WHEEL +0 -0
- {llms_py-2.0.5.dist-info → llms_py-2.0.6.dist-info}/entry_points.txt +0 -0
- {llms_py-2.0.5.dist-info → llms_py-2.0.6.dist-info}/licenses/LICENSE +0 -0
- {llms_py-2.0.5.dist-info → llms_py-2.0.6.dist-info}/top_level.txt +0 -0
llms.py
CHANGED
|
@@ -197,6 +197,51 @@ export default {
|
|
|
197
197
|
<div class="max-w-2xl mx-auto">
|
|
198
198
|
<ChatPrompt :model="selectedModel" :systemPrompt="currentSystemPrompt" />
|
|
199
199
|
</div>
|
|
200
|
+
|
|
201
|
+
<!-- Export/Import buttons -->
|
|
202
|
+
<div class="mt-2 flex space-x-3 justify-center">
|
|
203
|
+
<button type="button"
|
|
204
|
+
@click="exportThreads"
|
|
205
|
+
:disabled="isExporting"
|
|
206
|
+
:title="'Export ' + threads?.threads?.value?.length + ' conversations'"
|
|
207
|
+
class="inline-flex items-center px-3 py-2 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50 disabled:cursor-not-allowed"
|
|
208
|
+
>
|
|
209
|
+
<svg v-if="!isExporting" class="size-5 mr-1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
210
|
+
<path fill="currentColor" d="m12 16l-5-5l1.4-1.45l2.6 2.6V4h2v8.15l2.6-2.6L17 11zm-6 4q-.825 0-1.412-.587T4 18v-3h2v3h12v-3h2v3q0 .825-.587 1.413T18 20z"></path>
|
|
211
|
+
</svg>
|
|
212
|
+
<svg v-else class="size-5 mr-1 animate-spin" fill="none" viewBox="0 0 24 24">
|
|
213
|
+
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
|
214
|
+
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
|
215
|
+
</svg>
|
|
216
|
+
{{ isExporting ? 'Exporting...' : 'Export' }}
|
|
217
|
+
</button>
|
|
218
|
+
|
|
219
|
+
<button type="button"
|
|
220
|
+
@click="triggerImport"
|
|
221
|
+
:disabled="isImporting"
|
|
222
|
+
title="Import conversations from JSON file"
|
|
223
|
+
class="inline-flex items-center px-3 py-2 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50 disabled:cursor-not-allowed"
|
|
224
|
+
>
|
|
225
|
+
<svg v-if="!isImporting" class="size-5 mr-1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
226
|
+
<path fill="currentColor" d="m14 12l-4-4v3H2v2h8v3m10 2V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v3h2V6h12v12H6v-3H4v3a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2"/>
|
|
227
|
+
</svg>
|
|
228
|
+
<svg v-else class="size-5 mr-1 animate-spin" fill="none" viewBox="0 0 24 24">
|
|
229
|
+
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
|
230
|
+
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
|
231
|
+
</svg>
|
|
232
|
+
{{ isImporting ? 'Importing...' : 'Import' }}
|
|
233
|
+
</button>
|
|
234
|
+
|
|
235
|
+
<!-- Hidden file input for import -->
|
|
236
|
+
<input
|
|
237
|
+
ref="fileInput"
|
|
238
|
+
type="file"
|
|
239
|
+
accept=".json"
|
|
240
|
+
@change="handleFileImport"
|
|
241
|
+
class="hidden"
|
|
242
|
+
/>
|
|
243
|
+
</div>
|
|
244
|
+
|
|
200
245
|
</div>
|
|
201
246
|
|
|
202
247
|
<!-- Messages -->
|
|
@@ -351,6 +396,9 @@ export default {
|
|
|
351
396
|
const currentSystemPrompt = ref('')
|
|
352
397
|
const showSystemPrompt = ref(false)
|
|
353
398
|
const messagesContainer = ref(null)
|
|
399
|
+
const isExporting = ref(false)
|
|
400
|
+
const isImporting = ref(false)
|
|
401
|
+
const fileInput = ref(null)
|
|
354
402
|
|
|
355
403
|
// Auto-scroll to bottom when new messages arrive
|
|
356
404
|
const scrollToBottom = async () => {
|
|
@@ -412,6 +460,129 @@ export default {
|
|
|
412
460
|
}))
|
|
413
461
|
})
|
|
414
462
|
|
|
463
|
+
async function exportThreads() {
|
|
464
|
+
if (isExporting.value) return
|
|
465
|
+
|
|
466
|
+
isExporting.value = true
|
|
467
|
+
try {
|
|
468
|
+
// Load all threads from IndexedDB
|
|
469
|
+
await threads.loadThreads()
|
|
470
|
+
const allThreads = threads.threads.value
|
|
471
|
+
|
|
472
|
+
// Create export data with metadata
|
|
473
|
+
const exportData = {
|
|
474
|
+
exportedAt: new Date().toISOString(),
|
|
475
|
+
version: '1.0',
|
|
476
|
+
source: 'llms.py',
|
|
477
|
+
threadCount: allThreads.length,
|
|
478
|
+
threads: allThreads
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
// Create and download JSON file
|
|
482
|
+
const jsonString = JSON.stringify(exportData, null, 2)
|
|
483
|
+
const blob = new Blob([jsonString], { type: 'application/json' })
|
|
484
|
+
const url = URL.createObjectURL(blob)
|
|
485
|
+
|
|
486
|
+
const link = document.createElement('a')
|
|
487
|
+
link.href = url
|
|
488
|
+
link.download = `llms-threads-export-${new Date().toISOString().split('T')[0]}.json`
|
|
489
|
+
document.body.appendChild(link)
|
|
490
|
+
link.click()
|
|
491
|
+
document.body.removeChild(link)
|
|
492
|
+
URL.revokeObjectURL(url)
|
|
493
|
+
|
|
494
|
+
} catch (error) {
|
|
495
|
+
console.error('Failed to export threads:', error)
|
|
496
|
+
alert('Failed to export threads: ' + error.message)
|
|
497
|
+
} finally {
|
|
498
|
+
isExporting.value = false
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
function triggerImport() {
|
|
503
|
+
if (isImporting.value) return
|
|
504
|
+
fileInput.value?.click()
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
async function handleFileImport(event) {
|
|
508
|
+
const file = event.target.files?.[0]
|
|
509
|
+
if (!file) return
|
|
510
|
+
|
|
511
|
+
isImporting.value = true
|
|
512
|
+
try {
|
|
513
|
+
const text = await file.text()
|
|
514
|
+
const importData = JSON.parse(text)
|
|
515
|
+
|
|
516
|
+
// Validate import data structure
|
|
517
|
+
if (!importData.threads || !Array.isArray(importData.threads)) {
|
|
518
|
+
throw new Error('Invalid import file: missing or invalid threads array')
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
// Import threads one by one
|
|
522
|
+
let importedCount = 0
|
|
523
|
+
let updatedCount = 0
|
|
524
|
+
|
|
525
|
+
for (const threadData of importData.threads) {
|
|
526
|
+
if (!threadData.id) {
|
|
527
|
+
console.warn('Skipping thread without ID:', threadData)
|
|
528
|
+
continue
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
try {
|
|
532
|
+
// Check if thread already exists
|
|
533
|
+
const existingThread = await threads.getThread(threadData.id)
|
|
534
|
+
|
|
535
|
+
if (existingThread) {
|
|
536
|
+
// Update existing thread
|
|
537
|
+
await threads.updateThread(threadData.id, {
|
|
538
|
+
title: threadData.title,
|
|
539
|
+
model: threadData.model,
|
|
540
|
+
systemPrompt: threadData.systemPrompt,
|
|
541
|
+
messages: threadData.messages || [],
|
|
542
|
+
createdAt: threadData.createdAt,
|
|
543
|
+
// Keep the existing updatedAt or use imported one
|
|
544
|
+
updatedAt: threadData.updatedAt || existingThread.updatedAt
|
|
545
|
+
})
|
|
546
|
+
updatedCount++
|
|
547
|
+
} else {
|
|
548
|
+
// Add new thread directly to IndexedDB
|
|
549
|
+
await threads.initDB()
|
|
550
|
+
const db = await threads.initDB()
|
|
551
|
+
const tx = db.transaction(['threads'], 'readwrite')
|
|
552
|
+
await tx.objectStore('threads').add({
|
|
553
|
+
id: threadData.id,
|
|
554
|
+
title: threadData.title || 'Imported Chat',
|
|
555
|
+
model: threadData.model || '',
|
|
556
|
+
systemPrompt: threadData.systemPrompt || '',
|
|
557
|
+
messages: threadData.messages || [],
|
|
558
|
+
createdAt: threadData.createdAt || new Date().toISOString(),
|
|
559
|
+
updatedAt: threadData.updatedAt || new Date().toISOString()
|
|
560
|
+
})
|
|
561
|
+
await tx.complete
|
|
562
|
+
importedCount++
|
|
563
|
+
}
|
|
564
|
+
} catch (error) {
|
|
565
|
+
console.error('Failed to import thread:', threadData.id, error)
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
// Reload threads to reflect changes
|
|
570
|
+
await threads.loadThreads()
|
|
571
|
+
|
|
572
|
+
alert(`Import completed!\nNew threads: ${importedCount}\nUpdated threads: ${updatedCount}`)
|
|
573
|
+
|
|
574
|
+
} catch (error) {
|
|
575
|
+
console.error('Failed to import threads:', error)
|
|
576
|
+
alert('Failed to import threads: ' + error.message)
|
|
577
|
+
} finally {
|
|
578
|
+
isImporting.value = false
|
|
579
|
+
// Clear the file input
|
|
580
|
+
if (fileInput.value) {
|
|
581
|
+
fileInput.value.value = ''
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
|
|
415
586
|
function configUpdated() {
|
|
416
587
|
console.log('configUpdated', selectedModel.value, models.length, models.includes(selectedModel.value))
|
|
417
588
|
if (selectedModel.value && !models.includes(selectedModel.value)) {
|
|
@@ -466,6 +637,12 @@ export default {
|
|
|
466
637
|
toggleReasoning,
|
|
467
638
|
formatReasoning,
|
|
468
639
|
configUpdated,
|
|
640
|
+
exportThreads,
|
|
641
|
+
isExporting,
|
|
642
|
+
triggerImport,
|
|
643
|
+
handleFileImport,
|
|
644
|
+
isImporting,
|
|
645
|
+
fileInput,
|
|
469
646
|
}
|
|
470
647
|
}
|
|
471
648
|
}
|
|
@@ -457,6 +457,9 @@
|
|
|
457
457
|
.mb-4 {
|
|
458
458
|
margin-bottom: calc(var(--spacing) * 4);
|
|
459
459
|
}
|
|
460
|
+
.mb-6 {
|
|
461
|
+
margin-bottom: calc(var(--spacing) * 6);
|
|
462
|
+
}
|
|
460
463
|
.-ml-px {
|
|
461
464
|
margin-left: -1px;
|
|
462
465
|
}
|
|
@@ -2245,6 +2248,11 @@
|
|
|
2245
2248
|
color: var(--color-slate-500);
|
|
2246
2249
|
}
|
|
2247
2250
|
}
|
|
2251
|
+
.disabled\:opacity-50 {
|
|
2252
|
+
&:disabled {
|
|
2253
|
+
opacity: 50%;
|
|
2254
|
+
}
|
|
2255
|
+
}
|
|
2248
2256
|
.disabled\:shadow-none {
|
|
2249
2257
|
&:disabled {
|
|
2250
2258
|
--tw-shadow: 0 0 #0000;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
llms.py,sha256=0Mymf6WTi8tI0_HssCqyP0TzaDXeNg_KLjqlITQ1J5E,51990
|
|
2
|
+
llms_py-2.0.6.data/data/index.html,sha256=nOgYc7t9QjlbRoy35-W6HpQbEEuD0-O1rkA8j-IYhZ4,2276
|
|
3
|
+
llms_py-2.0.6.data/data/llms.json,sha256=nw9g63Ht15V5h2A9ynx8_1KLLboNrzUN5PTPhPV1lAY,18365
|
|
4
|
+
llms_py-2.0.6.data/data/requirements.txt,sha256=iv-JIaacmTl-hSho3QmphcKnbRRYx1st47yjz_178Ro,8
|
|
5
|
+
llms_py-2.0.6.data/data/ui.json,sha256=iBOmpNeD5-o8AgUa51ymS-KemovJ7bm9J1fnL0nf8jk,134025
|
|
6
|
+
llms_py-2.0.6.data/data/ui/App.mjs,sha256=hXtUjaL3GrcIHieEK3BzIG72OVzrorBBS4RkE1DOGc4,439
|
|
7
|
+
llms_py-2.0.6.data/data/ui/ChatPrompt.mjs,sha256=S_p2h6CJUDMvuetMgauJzS0MkACDw-bWw0FR-YXre_w,17163
|
|
8
|
+
llms_py-2.0.6.data/data/ui/Main.mjs,sha256=n3LIrGk_97ZA0eTeE8wmp1dyuj12Z7GH-XOTU7ydPo4,35836
|
|
9
|
+
llms_py-2.0.6.data/data/ui/Recents.mjs,sha256=cA9njbuOXeTWWagiArmswwgXuAV36ExhXGPE6sZrffY,7459
|
|
10
|
+
llms_py-2.0.6.data/data/ui/Sidebar.mjs,sha256=TUyicSr8MRpLoUZoQ6neBG0PwhFcz2BhIQVwdaKSuo8,10870
|
|
11
|
+
llms_py-2.0.6.data/data/ui/app.css,sha256=ircS9mQC4MRj7_BC2lGDZ6wCALkte_H_-z0Xw01jdZ4,92617
|
|
12
|
+
llms_py-2.0.6.data/data/ui/fav.svg,sha256=_R6MFeXl6wBFT0lqcUxYQIDWgm246YH_3hSTW0oO8qw,734
|
|
13
|
+
llms_py-2.0.6.data/data/ui/markdown.mjs,sha256=YeOnS7bPM0oyXHMVsgwobLYKgqzRNjrmBJ8NIrhU9Z8,6096
|
|
14
|
+
llms_py-2.0.6.data/data/ui/tailwind.input.css,sha256=31O3JLwvf8qPoEmKAGMPXEOgVRNcP7i7Y0DH_xw6qsg,10612
|
|
15
|
+
llms_py-2.0.6.data/data/ui/threadStore.mjs,sha256=bL-yPx1ShU7lBJrzgMHI7K-ZtzcuWDSjtSf--nn0DVk,7199
|
|
16
|
+
llms_py-2.0.6.data/data/ui/typography.css,sha256=XtIOwBvWujwTOSOuF-zs5x3xEJLnmg27q2lmv4JyLm4,16127
|
|
17
|
+
llms_py-2.0.6.data/data/ui/utils.mjs,sha256=exyN-YohPvcGSR-IrjYUj0t3_RDIrnaJgSvkHA2bIRk,4016
|
|
18
|
+
llms_py-2.0.6.data/data/ui/lib/highlight.min.mjs,sha256=sG7wq8bF-IKkfie7S4QSyh5DdHBRf0NqQxMOEH8-MT0,127458
|
|
19
|
+
llms_py-2.0.6.data/data/ui/lib/idb.min.mjs,sha256=CeTXyV4I_pB5vnibvJuyXdMs0iVF2ZL0Z7cdm3w_QaI,3853
|
|
20
|
+
llms_py-2.0.6.data/data/ui/lib/marked.min.mjs,sha256=QRHb_VZugcBJRD2EP6gYlVFEsJw5C2fQ8ImMf_pA2_s,39488
|
|
21
|
+
llms_py-2.0.6.data/data/ui/lib/servicestack-client.min.mjs,sha256=UVafVbzhJ_0N2lzv7rlzIbzwnWpoqXxGk3N3FSKgOOc,54534
|
|
22
|
+
llms_py-2.0.6.data/data/ui/lib/servicestack-vue.min.mjs,sha256=oqeaDTgQxCi4gLt9X0J8UwIJgW9FWCV0d-Iiak6k-qI,218926
|
|
23
|
+
llms_py-2.0.6.data/data/ui/lib/vue-router.min.mjs,sha256=fR30GHoXI1u81zyZ26YEU105pZgbbAKSXbpnzFKIxls,30418
|
|
24
|
+
llms_py-2.0.6.data/data/ui/lib/vue.min.mjs,sha256=iXh97m5hotl0eFllb3aoasQTImvp7mQoRJ_0HoxmZkw,163811
|
|
25
|
+
llms_py-2.0.6.dist-info/licenses/LICENSE,sha256=rRryrddGfVftpde-rmAZpW0R8IJihqJ8t8wpfDXoKiQ,1549
|
|
26
|
+
llms_py-2.0.6.dist-info/METADATA,sha256=MQBuIPhMcfrf0ne9Vx2Z5Q0c9AIcSapPWxY_aL0rZpw,23652
|
|
27
|
+
llms_py-2.0.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
28
|
+
llms_py-2.0.6.dist-info/entry_points.txt,sha256=svUoTt28bIJeo6Mb1ffDBLyzhD90DWtFbfp0ShyRCgU,35
|
|
29
|
+
llms_py-2.0.6.dist-info/top_level.txt,sha256=gC7hk9BKSeog8gyg-EM_g2gxm1mKHwFRfK-10BxOsa4,5
|
|
30
|
+
llms_py-2.0.6.dist-info/RECORD,,
|
llms_py-2.0.5.dist-info/RECORD
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
llms.py,sha256=PDRwX-IQYJbIXLGEkzm5J5UOkd26m02ofzQKYt9tmXU,51990
|
|
2
|
-
llms_py-2.0.5.data/data/index.html,sha256=nOgYc7t9QjlbRoy35-W6HpQbEEuD0-O1rkA8j-IYhZ4,2276
|
|
3
|
-
llms_py-2.0.5.data/data/llms.json,sha256=nw9g63Ht15V5h2A9ynx8_1KLLboNrzUN5PTPhPV1lAY,18365
|
|
4
|
-
llms_py-2.0.5.data/data/requirements.txt,sha256=iv-JIaacmTl-hSho3QmphcKnbRRYx1st47yjz_178Ro,8
|
|
5
|
-
llms_py-2.0.5.data/data/ui.json,sha256=iBOmpNeD5-o8AgUa51ymS-KemovJ7bm9J1fnL0nf8jk,134025
|
|
6
|
-
llms_py-2.0.5.data/data/ui/App.mjs,sha256=hXtUjaL3GrcIHieEK3BzIG72OVzrorBBS4RkE1DOGc4,439
|
|
7
|
-
llms_py-2.0.5.data/data/ui/ChatPrompt.mjs,sha256=S_p2h6CJUDMvuetMgauJzS0MkACDw-bWw0FR-YXre_w,17163
|
|
8
|
-
llms_py-2.0.5.data/data/ui/Main.mjs,sha256=8RdjDDCQSwk4wjRolJIkbWvHZHRf1GB9Qj8zN1lyuHo,26714
|
|
9
|
-
llms_py-2.0.5.data/data/ui/Recents.mjs,sha256=cA9njbuOXeTWWagiArmswwgXuAV36ExhXGPE6sZrffY,7459
|
|
10
|
-
llms_py-2.0.5.data/data/ui/Sidebar.mjs,sha256=TUyicSr8MRpLoUZoQ6neBG0PwhFcz2BhIQVwdaKSuo8,10870
|
|
11
|
-
llms_py-2.0.5.data/data/ui/app.css,sha256=uNXiu7lQ_1pmqK4ElFKuRAoxjNJE6WN91Ob63NvbG-c,92485
|
|
12
|
-
llms_py-2.0.5.data/data/ui/fav.svg,sha256=_R6MFeXl6wBFT0lqcUxYQIDWgm246YH_3hSTW0oO8qw,734
|
|
13
|
-
llms_py-2.0.5.data/data/ui/markdown.mjs,sha256=YeOnS7bPM0oyXHMVsgwobLYKgqzRNjrmBJ8NIrhU9Z8,6096
|
|
14
|
-
llms_py-2.0.5.data/data/ui/tailwind.input.css,sha256=31O3JLwvf8qPoEmKAGMPXEOgVRNcP7i7Y0DH_xw6qsg,10612
|
|
15
|
-
llms_py-2.0.5.data/data/ui/threadStore.mjs,sha256=bL-yPx1ShU7lBJrzgMHI7K-ZtzcuWDSjtSf--nn0DVk,7199
|
|
16
|
-
llms_py-2.0.5.data/data/ui/typography.css,sha256=XtIOwBvWujwTOSOuF-zs5x3xEJLnmg27q2lmv4JyLm4,16127
|
|
17
|
-
llms_py-2.0.5.data/data/ui/utils.mjs,sha256=exyN-YohPvcGSR-IrjYUj0t3_RDIrnaJgSvkHA2bIRk,4016
|
|
18
|
-
llms_py-2.0.5.data/data/ui/lib/highlight.min.mjs,sha256=sG7wq8bF-IKkfie7S4QSyh5DdHBRf0NqQxMOEH8-MT0,127458
|
|
19
|
-
llms_py-2.0.5.data/data/ui/lib/idb.min.mjs,sha256=CeTXyV4I_pB5vnibvJuyXdMs0iVF2ZL0Z7cdm3w_QaI,3853
|
|
20
|
-
llms_py-2.0.5.data/data/ui/lib/marked.min.mjs,sha256=QRHb_VZugcBJRD2EP6gYlVFEsJw5C2fQ8ImMf_pA2_s,39488
|
|
21
|
-
llms_py-2.0.5.data/data/ui/lib/servicestack-client.min.mjs,sha256=UVafVbzhJ_0N2lzv7rlzIbzwnWpoqXxGk3N3FSKgOOc,54534
|
|
22
|
-
llms_py-2.0.5.data/data/ui/lib/servicestack-vue.min.mjs,sha256=oqeaDTgQxCi4gLt9X0J8UwIJgW9FWCV0d-Iiak6k-qI,218926
|
|
23
|
-
llms_py-2.0.5.data/data/ui/lib/vue-router.min.mjs,sha256=fR30GHoXI1u81zyZ26YEU105pZgbbAKSXbpnzFKIxls,30418
|
|
24
|
-
llms_py-2.0.5.data/data/ui/lib/vue.min.mjs,sha256=iXh97m5hotl0eFllb3aoasQTImvp7mQoRJ_0HoxmZkw,163811
|
|
25
|
-
llms_py-2.0.5.dist-info/licenses/LICENSE,sha256=rRryrddGfVftpde-rmAZpW0R8IJihqJ8t8wpfDXoKiQ,1549
|
|
26
|
-
llms_py-2.0.5.dist-info/METADATA,sha256=LRw_cBuhHltQJO6xEPpyENSUm1nE0ckfK1RqRU0jsNI,23652
|
|
27
|
-
llms_py-2.0.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
28
|
-
llms_py-2.0.5.dist-info/entry_points.txt,sha256=svUoTt28bIJeo6Mb1ffDBLyzhD90DWtFbfp0ShyRCgU,35
|
|
29
|
-
llms_py-2.0.5.dist-info/top_level.txt,sha256=gC7hk9BKSeog8gyg-EM_g2gxm1mKHwFRfK-10BxOsa4,5
|
|
30
|
-
llms_py-2.0.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|