llms-py 2.0.22__tar.gz → 2.0.23__tar.gz

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 (56) hide show
  1. {llms_py-2.0.22/llms_py.egg-info → llms_py-2.0.23}/PKG-INFO +1 -1
  2. {llms_py-2.0.22 → llms_py-2.0.23}/llms/main.py +1 -1
  3. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/Main.mjs +11 -19
  4. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/ai.mjs +1 -1
  5. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/threadStore.mjs +29 -0
  6. {llms_py-2.0.22 → llms_py-2.0.23/llms_py.egg-info}/PKG-INFO +1 -1
  7. {llms_py-2.0.22 → llms_py-2.0.23}/pyproject.toml +1 -1
  8. {llms_py-2.0.22 → llms_py-2.0.23}/setup.py +1 -1
  9. {llms_py-2.0.22 → llms_py-2.0.23}/LICENSE +0 -0
  10. {llms_py-2.0.22 → llms_py-2.0.23}/MANIFEST.in +0 -0
  11. {llms_py-2.0.22 → llms_py-2.0.23}/README.md +0 -0
  12. {llms_py-2.0.22 → llms_py-2.0.23}/llms/__init__.py +0 -0
  13. {llms_py-2.0.22 → llms_py-2.0.23}/llms/__main__.py +0 -0
  14. {llms_py-2.0.22 → llms_py-2.0.23}/llms/index.html +0 -0
  15. {llms_py-2.0.22 → llms_py-2.0.23}/llms/llms.json +0 -0
  16. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/Analytics.mjs +0 -0
  17. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/App.mjs +0 -0
  18. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/Avatar.mjs +0 -0
  19. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/Brand.mjs +0 -0
  20. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/ChatPrompt.mjs +0 -0
  21. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/ModelSelector.mjs +0 -0
  22. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/ProviderIcon.mjs +0 -0
  23. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/ProviderStatus.mjs +0 -0
  24. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/Recents.mjs +0 -0
  25. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/SettingsDialog.mjs +0 -0
  26. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/Sidebar.mjs +0 -0
  27. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/SignIn.mjs +0 -0
  28. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/SystemPromptEditor.mjs +0 -0
  29. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/SystemPromptSelector.mjs +0 -0
  30. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/Welcome.mjs +0 -0
  31. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/app.css +0 -0
  32. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/fav.svg +0 -0
  33. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/lib/chart.js +0 -0
  34. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/lib/charts.mjs +0 -0
  35. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/lib/color.js +0 -0
  36. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/lib/highlight.min.mjs +0 -0
  37. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/lib/idb.min.mjs +0 -0
  38. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/lib/marked.min.mjs +0 -0
  39. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/lib/servicestack-client.mjs +0 -0
  40. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/lib/servicestack-vue.mjs +0 -0
  41. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/lib/vue-router.min.mjs +0 -0
  42. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/lib/vue.min.mjs +0 -0
  43. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/lib/vue.mjs +0 -0
  44. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/markdown.mjs +0 -0
  45. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/tailwind.input.css +0 -0
  46. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/typography.css +0 -0
  47. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui/utils.mjs +0 -0
  48. {llms_py-2.0.22 → llms_py-2.0.23}/llms/ui.json +0 -0
  49. {llms_py-2.0.22 → llms_py-2.0.23}/llms_py.egg-info/SOURCES.txt +0 -0
  50. {llms_py-2.0.22 → llms_py-2.0.23}/llms_py.egg-info/dependency_links.txt +0 -0
  51. {llms_py-2.0.22 → llms_py-2.0.23}/llms_py.egg-info/entry_points.txt +0 -0
  52. {llms_py-2.0.22 → llms_py-2.0.23}/llms_py.egg-info/not-zip-safe +0 -0
  53. {llms_py-2.0.22 → llms_py-2.0.23}/llms_py.egg-info/requires.txt +0 -0
  54. {llms_py-2.0.22 → llms_py-2.0.23}/llms_py.egg-info/top_level.txt +0 -0
  55. {llms_py-2.0.22 → llms_py-2.0.23}/requirements.txt +0 -0
  56. {llms_py-2.0.22 → llms_py-2.0.23}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: llms-py
3
- Version: 2.0.22
3
+ Version: 2.0.23
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
@@ -22,7 +22,7 @@ from aiohttp import web
22
22
  from pathlib import Path
23
23
  from importlib import resources # Py≥3.9 (pip install importlib_resources for 3.7/3.8)
24
24
 
25
- VERSION = "2.0.22"
25
+ VERSION = "2.0.23"
26
26
  _ROOT = None
27
27
  g_config_path = None
28
28
  g_ui_path = None
@@ -497,7 +497,7 @@ export default {
497
497
 
498
498
  // Import threads one by one
499
499
  let importedCount = 0
500
- let updatedCount = 0
500
+ let existingCount = 0
501
501
 
502
502
  const db = await threads.initDB()
503
503
 
@@ -506,6 +506,8 @@ export default {
506
506
  throw new Error('Invalid import file: missing or invalid threads array')
507
507
  }
508
508
 
509
+ const threadIds = new Set(await threads.getAllThreadIds())
510
+
509
511
  for (const threadData of importData.threads) {
510
512
  if (!threadData.id) {
511
513
  console.warn('Skipping thread without ID:', threadData)
@@ -514,20 +516,9 @@ export default {
514
516
 
515
517
  try {
516
518
  // Check if thread already exists
517
- const existingThread = await threads.getThread(threadData.id)
518
-
519
+ const existingThread = threadIds.has(threadData.id)
519
520
  if (existingThread) {
520
- // Update existing thread
521
- await threads.updateThread(threadData.id, {
522
- title: threadData.title,
523
- model: threadData.model,
524
- systemPrompt: threadData.systemPrompt,
525
- messages: threadData.messages || [],
526
- createdAt: threadData.createdAt,
527
- // Keep the existing updatedAt or use imported one
528
- updatedAt: threadData.updatedAt || existingThread.updatedAt
529
- })
530
- updatedCount++
521
+ existingCount++
531
522
  } else {
532
523
  // Add new thread directly to IndexedDB
533
524
  const tx = db.transaction(['threads'], 'readwrite')
@@ -551,13 +542,15 @@ export default {
551
542
  // Reload threads to reflect changes
552
543
  await threads.loadThreads()
553
544
 
554
- alert(`Import completed!\nNew threads: ${importedCount}\nUpdated threads: ${updatedCount}`)
545
+ alert(`Import completed!\nNew threads: ${importedCount}\nExisting threads: ${existingCount}`)
555
546
  }
556
547
  if (importData.requests) {
557
548
  if (!Array.isArray(importData.requests)) {
558
549
  throw new Error('Invalid import file: missing or invalid requests array')
559
550
  }
560
551
 
552
+ const requestIds = new Set(await threads.getAllRequestIds())
553
+
561
554
  for (const requestData of importData.requests) {
562
555
  if (!requestData.id) {
563
556
  console.warn('Skipping request without ID:', requestData)
@@ -566,10 +559,9 @@ export default {
566
559
 
567
560
  try {
568
561
  // Check if request already exists
569
- const existingRequest = await threads.getRequest(requestData.id)
570
-
562
+ const existingRequest = requestIds.has(requestData.id)
571
563
  if (existingRequest) {
572
- updatedCount++
564
+ existingCount++
573
565
  } else {
574
566
  // Add new request directly to IndexedDB
575
567
  const db = await threads.initDB()
@@ -583,7 +575,7 @@ export default {
583
575
  }
584
576
  }
585
577
 
586
- alert(`Import completed!\nNew requests: ${importedCount}\nUpdated requests: ${updatedCount}`)
578
+ alert(`Import completed!\nNew requests: ${importedCount}\nExisting requests: ${existingCount}`)
587
579
  }
588
580
 
589
581
  } catch (error) {
@@ -6,7 +6,7 @@ const headers = { 'Accept': 'application/json' }
6
6
  const prefsKey = 'llms.prefs'
7
7
 
8
8
  export const o = {
9
- version: '2.0.22',
9
+ version: '2.0.23',
10
10
  base,
11
11
  prefsKey,
12
12
  welcome: 'Welcome to llms.py',
@@ -405,6 +405,32 @@ async function getAllRequests() {
405
405
  return allRequests
406
406
  }
407
407
 
408
+ async function getRequest(requestId) {
409
+ await initDB()
410
+
411
+ const tx = db.transaction(['requests'], 'readonly')
412
+ const store = tx.objectStore('requests')
413
+ const request = await store.get(requestId)
414
+ return request
415
+ }
416
+
417
+ async function getAllRequestIds() {
418
+ await initDB()
419
+
420
+ const tx = db.transaction(['requests'], 'readonly')
421
+ const store = tx.objectStore('requests')
422
+ const ids = await store.getAllKeys()
423
+ return ids
424
+ }
425
+
426
+ async function getAllThreadIds() {
427
+ await initDB()
428
+ const tx = db.transaction(['threads'], 'readonly')
429
+ const store = tx.objectStore('threads')
430
+ const ids = await store.getAllKeys()
431
+ return ids
432
+ }
433
+
408
434
  // Query requests with pagination and filtering
409
435
  async function getRequests(filters = {}, limit = 20, offset = 0) {
410
436
  try {
@@ -526,9 +552,12 @@ export function useThreadStore() {
526
552
  setCurrentThreadFromRoute,
527
553
  clearCurrentThread,
528
554
  getGroupedThreads,
555
+ getRequest,
529
556
  getRequests,
530
557
  getAllRequests,
531
558
  getFilterOptions,
532
559
  deleteRequest,
560
+ getAllRequestIds,
561
+ getAllThreadIds,
533
562
  }
534
563
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: llms-py
3
- Version: 2.0.22
3
+ Version: 2.0.23
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "llms-py"
7
- version = "2.0.22"
7
+ version = "2.0.23"
8
8
  description = "A lightweight CLI tool and OpenAI-compatible server for querying multiple Large Language Model (LLM) providers"
9
9
  readme = "README.md"
10
10
  license = "BSD-3-Clause"
@@ -16,7 +16,7 @@ with open(os.path.join(this_directory, "requirements.txt"), encoding="utf-8") as
16
16
 
17
17
  setup(
18
18
  name="llms-py",
19
- version="2.0.22",
19
+ version="2.0.23",
20
20
  author="ServiceStack",
21
21
  author_email="team@servicestack.net",
22
22
  description="A lightweight CLI tool and OpenAI-compatible server for querying multiple Large Language Model (LLM) providers",
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