llms-py 3.0.0b1__tar.gz → 3.0.0b3__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 (99) hide show
  1. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/PKG-INFO +1 -1
  2. llms_py-3.0.0b3/llms/__pycache__/__init__.cpython-312.pyc +0 -0
  3. llms_py-3.0.0b3/llms/__pycache__/__init__.cpython-313.pyc +0 -0
  4. llms_py-3.0.0b3/llms/__pycache__/__init__.cpython-314.pyc +0 -0
  5. llms_py-3.0.0b3/llms/__pycache__/__main__.cpython-312.pyc +0 -0
  6. llms_py-3.0.0b3/llms/__pycache__/__main__.cpython-314.pyc +0 -0
  7. llms_py-3.0.0b3/llms/__pycache__/llms.cpython-312.pyc +0 -0
  8. llms_py-3.0.0b3/llms/__pycache__/main.cpython-312.pyc +0 -0
  9. llms_py-3.0.0b3/llms/__pycache__/main.cpython-313.pyc +0 -0
  10. llms_py-3.0.0b3/llms/__pycache__/main.cpython-314.pyc +0 -0
  11. llms_py-3.0.0b3/llms/__pycache__/plugins.cpython-314.pyc +0 -0
  12. llms_py-3.0.0b3/llms/index.html +70 -0
  13. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/llms.json +48 -15
  14. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/main.py +923 -624
  15. llms_py-3.0.0b3/llms/providers/__pycache__/anthropic.cpython-314.pyc +0 -0
  16. llms_py-3.0.0b3/llms/providers/__pycache__/chutes.cpython-314.pyc +0 -0
  17. llms_py-3.0.0b3/llms/providers/__pycache__/google.cpython-314.pyc +0 -0
  18. llms_py-3.0.0b3/llms/providers/__pycache__/nvidia.cpython-314.pyc +0 -0
  19. llms_py-3.0.0b3/llms/providers/__pycache__/openai.cpython-314.pyc +0 -0
  20. llms_py-3.0.0b3/llms/providers/__pycache__/openrouter.cpython-314.pyc +0 -0
  21. llms_py-3.0.0b3/llms/providers/anthropic.py +189 -0
  22. llms_py-3.0.0b3/llms/providers/chutes.py +152 -0
  23. llms_py-3.0.0b3/llms/providers/google.py +306 -0
  24. llms_py-3.0.0b3/llms/providers/nvidia.py +107 -0
  25. llms_py-3.0.0b3/llms/providers/openai.py +159 -0
  26. llms_py-3.0.0b3/llms/providers/openrouter.py +70 -0
  27. llms_py-3.0.0b3/llms/providers-extra.json +356 -0
  28. llms_py-3.0.0b3/llms/providers.json +1 -0
  29. llms_py-3.0.0b3/llms/ui/App.mjs +190 -0
  30. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/ui/ai.mjs +84 -50
  31. llms_py-3.0.0b3/llms/ui/app.css +2 -0
  32. llms_py-3.0.0b3/llms/ui/ctx.mjs +196 -0
  33. llms_py-3.0.0b3/llms/ui/index.mjs +117 -0
  34. llms_py-3.0.0b3/llms/ui/lib/charts.mjs +16 -0
  35. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/ui/markdown.mjs +6 -0
  36. llms_py-3.0.0b1/llms/ui/Analytics.mjs → llms_py-3.0.0b3/llms/ui/modules/analytics.mjs +76 -64
  37. llms_py-3.0.0b1/llms/ui/Main.mjs → llms_py-3.0.0b3/llms/ui/modules/chat/ChatBody.mjs +91 -179
  38. {llms_py-3.0.0b1/llms/ui → llms_py-3.0.0b3/llms/ui/modules/chat}/SettingsDialog.mjs +8 -8
  39. llms_py-3.0.0b1/llms/ui/ChatPrompt.mjs → llms_py-3.0.0b3/llms/ui/modules/chat/index.mjs +281 -96
  40. llms_py-3.0.0b3/llms/ui/modules/layout.mjs +267 -0
  41. llms_py-3.0.0b3/llms/ui/modules/model-selector.mjs +851 -0
  42. {llms_py-3.0.0b1/llms/ui → llms_py-3.0.0b3/llms/ui/modules/threads}/Recents.mjs +10 -11
  43. llms_py-3.0.0b1/llms/ui/Sidebar.mjs → llms_py-3.0.0b3/llms/ui/modules/threads/index.mjs +48 -45
  44. {llms_py-3.0.0b1/llms/ui → llms_py-3.0.0b3/llms/ui/modules/threads}/threadStore.mjs +21 -7
  45. llms_py-3.0.0b3/llms/ui/tailwind.input.css +634 -0
  46. llms_py-3.0.0b3/llms/ui/utils.mjs +188 -0
  47. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms_py.egg-info/PKG-INFO +1 -1
  48. llms_py-3.0.0b3/llms_py.egg-info/SOURCES.txt +78 -0
  49. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/pyproject.toml +2 -2
  50. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/setup.py +3 -2
  51. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/tests/test_config.py +3 -3
  52. llms_py-3.0.0b1/llms/index.html +0 -100
  53. llms_py-3.0.0b1/llms/providers.json +0 -1
  54. llms_py-3.0.0b1/llms/ui/App.mjs +0 -97
  55. llms_py-3.0.0b1/llms/ui/Avatar.mjs +0 -85
  56. llms_py-3.0.0b1/llms/ui/Brand.mjs +0 -52
  57. llms_py-3.0.0b1/llms/ui/ModelSelector.mjs +0 -693
  58. llms_py-3.0.0b1/llms/ui/OAuthSignIn.mjs +0 -92
  59. llms_py-3.0.0b1/llms/ui/ProviderIcon.mjs +0 -36
  60. llms_py-3.0.0b1/llms/ui/ProviderStatus.mjs +0 -105
  61. llms_py-3.0.0b1/llms/ui/SignIn.mjs +0 -64
  62. llms_py-3.0.0b1/llms/ui/SystemPromptEditor.mjs +0 -31
  63. llms_py-3.0.0b1/llms/ui/SystemPromptSelector.mjs +0 -56
  64. llms_py-3.0.0b1/llms/ui/Welcome.mjs +0 -8
  65. llms_py-3.0.0b1/llms/ui/app.css +0 -4964
  66. llms_py-3.0.0b1/llms/ui/lib/charts.mjs +0 -20
  67. llms_py-3.0.0b1/llms/ui/tailwind.input.css +0 -272
  68. llms_py-3.0.0b1/llms/ui/utils.mjs +0 -228
  69. llms_py-3.0.0b1/llms/ui.json +0 -1069
  70. llms_py-3.0.0b1/llms_py.egg-info/SOURCES.txt +0 -62
  71. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/LICENSE +0 -0
  72. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/MANIFEST.in +0 -0
  73. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/README.md +0 -0
  74. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/__init__.py +0 -0
  75. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/__main__.py +0 -0
  76. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/ui/fav.svg +0 -0
  77. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/ui/lib/chart.js +0 -0
  78. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/ui/lib/color.js +0 -0
  79. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/ui/lib/highlight.min.mjs +0 -0
  80. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/ui/lib/idb.min.mjs +0 -0
  81. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/ui/lib/marked.min.mjs +0 -0
  82. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/ui/lib/servicestack-client.mjs +0 -0
  83. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/ui/lib/servicestack-vue.mjs +0 -0
  84. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/ui/lib/vue-router.min.mjs +0 -0
  85. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/ui/lib/vue.min.mjs +0 -0
  86. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/ui/lib/vue.mjs +0 -0
  87. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms/ui/typography.css +0 -0
  88. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms_py.egg-info/dependency_links.txt +0 -0
  89. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms_py.egg-info/entry_points.txt +0 -0
  90. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms_py.egg-info/not-zip-safe +0 -0
  91. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms_py.egg-info/requires.txt +0 -0
  92. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/llms_py.egg-info/top_level.txt +0 -0
  93. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/requirements.txt +0 -0
  94. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/setup.cfg +0 -0
  95. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/tests/test_async.py +0 -0
  96. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/tests/test_integration.py +0 -0
  97. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/tests/test_provider_checks.py +0 -0
  98. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/tests/test_provider_config.py +0 -0
  99. {llms_py-3.0.0b1 → llms_py-3.0.0b3}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: llms-py
3
- Version: 3.0.0b1
3
+ Version: 3.0.0b3
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,70 @@
1
+ <html>
2
+
3
+ <head>
4
+ <title>llms.py</title>
5
+ <link rel="stylesheet" href="/ui/app.css">
6
+ <link rel="stylesheet" href="/ui/typography.css">
7
+ <link rel="icon" type="image/svg" href="/ui/fav.svg">
8
+ <style>
9
+ [type='button'],
10
+ button[type='submit'] {
11
+ cursor: pointer
12
+ }
13
+
14
+ [type='checkbox'].switch:checked:hover,
15
+ [type='checkbox'].switch:checked:focus,
16
+ [type='checkbox'].switch:checked,
17
+ [type='checkbox'].switch:focus,
18
+ [type='checkbox'].switch {
19
+ border: none;
20
+ background: none;
21
+ outline: none;
22
+ box-shadow: none;
23
+ cursor: pointer;
24
+ }
25
+ </style>
26
+ </head>
27
+ <script type="importmap">
28
+ {
29
+ "imports": {
30
+ "vue": "/ui/lib/vue.min.mjs",
31
+ "vue-router": "/ui/lib/vue-router.min.mjs",
32
+ "@servicestack/client": "/ui/lib/servicestack-client.mjs",
33
+ "@servicestack/vue": "/ui/lib/servicestack-vue.mjs",
34
+ "idb": "/ui/lib/idb.min.mjs",
35
+ "marked": "/ui/lib/marked.min.mjs",
36
+ "highlight.js": "/ui/lib/highlight.min.mjs",
37
+ "chart.js": "/ui/lib/chart.js",
38
+ "color.js": "/ui/lib/color.js",
39
+ "ctx.mjs": "/ui/ctx.mjs"
40
+ }
41
+ }
42
+ </script>
43
+
44
+ <body>
45
+ <div id="app"></div>
46
+ </body>
47
+ <script>
48
+ let colorScheme = location.search === "?dark"
49
+ ? "dark"
50
+ : location.search === "?light"
51
+ ? "light"
52
+ : localStorage.getItem('color-scheme')
53
+ let darkMode = colorScheme != null
54
+ ? colorScheme === 'dark'
55
+ : window.matchMedia('(prefers-color-scheme: dark)').matches
56
+ let html = document.documentElement
57
+ html.classList.toggle('dark', darkMode)
58
+ html.style.setProperty('color-scheme', darkMode ? 'dark' : null)
59
+ if (localStorage.getItem('color-scheme') === null) {
60
+ localStorage.setItem('color-scheme', darkMode ? 'dark' : 'light')
61
+ }
62
+ </script>
63
+ <script type="module">
64
+ import { createContext } from '/ui/index.mjs'
65
+
66
+ const context = await createContext()
67
+ context.app.mount('#app')
68
+ </script>
69
+
70
+ </html>
@@ -90,6 +90,23 @@
90
90
  }
91
91
  ]
92
92
  },
93
+ "out:image": {
94
+ "model": "black-forest-labs/flux.1-dev",
95
+ "messages": [
96
+ {
97
+ "role": "user",
98
+ "content": "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme"
99
+ }
100
+ ],
101
+ "modalities": [
102
+ "image",
103
+ "text"
104
+ ],
105
+ "image_config": {
106
+ "aspect_ratio": "9:16"
107
+ },
108
+ "stream": false
109
+ },
93
110
  "check": {
94
111
  "messages": [
95
112
  {
@@ -200,11 +217,6 @@
200
217
  "enabled": true,
201
218
  "temperature": 1.0
202
219
  },
203
- "openrouter_free": {
204
- "enabled": true,
205
- "id": "openrouter",
206
- "include_models": ":free$"
207
- },
208
220
  "ollama": {
209
221
  "enabled": true,
210
222
  "id": "ollama",
@@ -219,13 +231,6 @@
219
231
  },
220
232
  "google": {
221
233
  "enabled": true,
222
- "map_models": {
223
- "gemini-flash-latest": "gemini-flash-latest",
224
- "gemini-flash-lite-latest": "gemini-flash-lite-latest",
225
- "gemini-2.5-pro": "gemini-2.5-pro",
226
- "gemini-2.5-flash": "gemini-2.5-flash",
227
- "gemini-2.5-flash-lite": "gemini-2.5-flash-lite"
228
- },
229
234
  "safety_settings": [
230
235
  {
231
236
  "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
@@ -310,7 +315,18 @@
310
315
  }
311
316
  },
312
317
  "chutes": {
313
- "enabled": true
318
+ "enabled": true,
319
+ "modalities": {
320
+ "image": {
321
+ "name": "Chutes Image",
322
+ "npm": "chutes/image",
323
+ "negative_prompt": "blur, distortion, low quality",
324
+ "cfg_scale": 7.5,
325
+ "width": 1024,
326
+ "height": 1024,
327
+ "steps": 50
328
+ }
329
+ }
314
330
  },
315
331
  "deepseek": {
316
332
  "enabled": true
@@ -319,7 +335,19 @@
319
335
  "enabled": false
320
336
  },
321
337
  "nvidia": {
322
- "enabled": true
338
+ "enabled": true,
339
+ "modalities": {
340
+ "image": {
341
+ "name": "NVIDIA Gen AI",
342
+ "npm": "nvidia/image",
343
+ "height": 1024,
344
+ "width": 1024,
345
+ "cfg_scale": 3.5,
346
+ "mode": "base",
347
+ "samples": 1,
348
+ "steps": 50
349
+ }
350
+ }
323
351
  },
324
352
  "huggingface": {
325
353
  "enabled": true
@@ -330,7 +358,12 @@
330
358
  "openrouter": {
331
359
  "enabled": true,
332
360
  "id": "openrouter",
333
- "exclude_models": ":free$"
361
+ "modalities": {
362
+ "image": {
363
+ "name": "OpenRouter Image",
364
+ "npm": "openrouter/image"
365
+ }
366
+ }
334
367
  }
335
368
  }
336
369
  }