llms-py 2.0.33__tar.gz → 2.0.35__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 (66) hide show
  1. llms_py-2.0.35/PKG-INFO +49 -0
  2. llms_py-2.0.35/README.md +9 -0
  3. llms_py-2.0.35/llms/__init__.py +4 -0
  4. {llms_py-2.0.33 → llms_py-2.0.35}/llms/llms.json +85 -28
  5. {llms_py-2.0.33 → llms_py-2.0.35}/llms/main.py +744 -654
  6. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/ProviderIcon.mjs +1 -0
  7. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/ai.mjs +1 -1
  8. llms_py-2.0.35/llms/ui/lib/servicestack-vue.mjs +37 -0
  9. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/threadStore.mjs +1 -1
  10. llms_py-2.0.35/llms_py.egg-info/PKG-INFO +49 -0
  11. {llms_py-2.0.33 → llms_py-2.0.35}/llms_py.egg-info/SOURCES.txt +5 -1
  12. {llms_py-2.0.33 → llms_py-2.0.35}/pyproject.toml +56 -1
  13. {llms_py-2.0.33 → llms_py-2.0.35}/setup.py +4 -5
  14. llms_py-2.0.35/tests/test_async.py +116 -0
  15. llms_py-2.0.35/tests/test_config.py +89 -0
  16. llms_py-2.0.35/tests/test_integration.py +116 -0
  17. llms_py-2.0.35/tests/test_utils.py +254 -0
  18. llms_py-2.0.33/PKG-INFO +0 -1278
  19. llms_py-2.0.33/README.md +0 -1238
  20. llms_py-2.0.33/llms/__init__.py +0 -2
  21. llms_py-2.0.33/llms/ui/lib/servicestack-vue.mjs +0 -37
  22. llms_py-2.0.33/llms_py.egg-info/PKG-INFO +0 -1278
  23. {llms_py-2.0.33 → llms_py-2.0.35}/LICENSE +0 -0
  24. {llms_py-2.0.33 → llms_py-2.0.35}/MANIFEST.in +0 -0
  25. {llms_py-2.0.33 → llms_py-2.0.35}/llms/__main__.py +0 -0
  26. {llms_py-2.0.33 → llms_py-2.0.35}/llms/index.html +0 -0
  27. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/Analytics.mjs +0 -0
  28. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/App.mjs +0 -0
  29. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/Avatar.mjs +0 -0
  30. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/Brand.mjs +0 -0
  31. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/ChatPrompt.mjs +0 -0
  32. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/Main.mjs +0 -0
  33. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/ModelSelector.mjs +0 -0
  34. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/OAuthSignIn.mjs +0 -0
  35. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/ProviderStatus.mjs +0 -0
  36. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/Recents.mjs +0 -0
  37. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/SettingsDialog.mjs +0 -0
  38. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/Sidebar.mjs +0 -0
  39. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/SignIn.mjs +0 -0
  40. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/SystemPromptEditor.mjs +0 -0
  41. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/SystemPromptSelector.mjs +0 -0
  42. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/Welcome.mjs +0 -0
  43. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/app.css +0 -0
  44. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/fav.svg +0 -0
  45. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/lib/chart.js +0 -0
  46. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/lib/charts.mjs +0 -0
  47. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/lib/color.js +0 -0
  48. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/lib/highlight.min.mjs +0 -0
  49. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/lib/idb.min.mjs +0 -0
  50. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/lib/marked.min.mjs +0 -0
  51. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/lib/servicestack-client.mjs +0 -0
  52. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/lib/vue-router.min.mjs +0 -0
  53. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/lib/vue.min.mjs +0 -0
  54. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/lib/vue.mjs +0 -0
  55. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/markdown.mjs +0 -0
  56. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/tailwind.input.css +0 -0
  57. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/typography.css +0 -0
  58. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui/utils.mjs +0 -0
  59. {llms_py-2.0.33 → llms_py-2.0.35}/llms/ui.json +0 -0
  60. {llms_py-2.0.33 → llms_py-2.0.35}/llms_py.egg-info/dependency_links.txt +0 -0
  61. {llms_py-2.0.33 → llms_py-2.0.35}/llms_py.egg-info/entry_points.txt +0 -0
  62. {llms_py-2.0.33 → llms_py-2.0.35}/llms_py.egg-info/not-zip-safe +0 -0
  63. {llms_py-2.0.33 → llms_py-2.0.35}/llms_py.egg-info/requires.txt +0 -0
  64. {llms_py-2.0.33 → llms_py-2.0.35}/llms_py.egg-info/top_level.txt +0 -0
  65. {llms_py-2.0.33 → llms_py-2.0.35}/requirements.txt +0 -0
  66. {llms_py-2.0.33 → llms_py-2.0.35}/setup.cfg +0 -0
@@ -0,0 +1,49 @@
1
+ Metadata-Version: 2.4
2
+ Name: llms-py
3
+ Version: 2.0.35
4
+ Summary: A lightweight CLI tool and OpenAI-compatible server for querying multiple Large Language Model (LLM) providers
5
+ Home-page: https://github.com/ServiceStack/llms
6
+ Author: ServiceStack
7
+ Author-email: ServiceStack <team@servicestack.net>
8
+ Maintainer-email: ServiceStack <team@servicestack.net>
9
+ License-Expression: BSD-3-Clause
10
+ Project-URL: Homepage, https://github.com/ServiceStack/llms
11
+ Project-URL: Documentation, https://github.com/ServiceStack/llms#readme
12
+ Project-URL: Repository, https://github.com/ServiceStack/llms
13
+ Project-URL: Bug Reports, https://github.com/ServiceStack/llms/issues
14
+ Keywords: llm,ai,openai,anthropic,google,gemini,groq,mistral,ollama,cli,server,chat,completion
15
+ Classifier: Development Status :: 5 - Production/Stable
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Intended Audience :: System Administrators
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.7
21
+ Classifier: Programming Language :: Python :: 3.8
22
+ Classifier: Programming Language :: Python :: 3.9
23
+ Classifier: Programming Language :: Python :: 3.10
24
+ Classifier: Programming Language :: Python :: 3.11
25
+ Classifier: Programming Language :: Python :: 3.12
26
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
27
+ Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
28
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
29
+ Classifier: Topic :: System :: Systems Administration
30
+ Classifier: Topic :: Utilities
31
+ Classifier: Environment :: Console
32
+ Requires-Python: >=3.7
33
+ Description-Content-Type: text/markdown
34
+ License-File: LICENSE
35
+ Requires-Dist: aiohttp
36
+ Dynamic: author
37
+ Dynamic: home-page
38
+ Dynamic: license-file
39
+ Dynamic: requires-python
40
+
41
+ # llms.py
42
+
43
+ Lightweight CLI, API and ChatGPT-like alternative to Open WebUI for accessing multiple LLMs, entirely offline, with all data kept private in browser storage.
44
+
45
+ [llmspy.org](https://llmspy.org)
46
+
47
+ [![](https://github.com/ServiceStack/llmspy.org/blob/main/public/img/llmspy-home.webp?raw=true)](https://llmspy.org)
48
+
49
+ GitHub: [llmspy.org](https://github.com/ServiceStack/llmspy.org)
@@ -0,0 +1,9 @@
1
+ # llms.py
2
+
3
+ Lightweight CLI, API and ChatGPT-like alternative to Open WebUI for accessing multiple LLMs, entirely offline, with all data kept private in browser storage.
4
+
5
+ [llmspy.org](https://llmspy.org)
6
+
7
+ [![](https://github.com/ServiceStack/llmspy.org/blob/main/public/img/llmspy-home.webp?raw=true)](https://llmspy.org)
8
+
9
+ GitHub: [llmspy.org](https://github.com/ServiceStack/llmspy.org)
@@ -0,0 +1,4 @@
1
+ # Import the main module content
2
+ from .main import main as main
3
+
4
+ __all__ = ["main"]
@@ -219,32 +219,39 @@
219
219
  "base_url": "https://openrouter.ai/api",
220
220
  "api_key": "$OPENROUTER_API_KEY",
221
221
  "models": {
222
- "qwen2.5vl": "qwen/qwen2.5-vl-32b-instruct:free",
223
- "llama4:109b": "meta-llama/llama-4-scout:free",
224
- "llama4:400b": "meta-llama/llama-4-maverick:free",
222
+ "kat-coder-pro": "kwaipilot/kat-coder-pro:free",
223
+ "nemotron-nano-vl:12b": "nvidia/nemotron-nano-12b-v2-vl:free",
224
+ "tongyi-deepresearch:30b": "alibaba/tongyi-deepresearch-30b-a3b:free",
225
+ "longcat-flash-chat": "meituan/longcat-flash-chat:free",
226
+ "nemotron-nano:9b": "nvidia/nemotron-nano-9b-v2:free",
225
227
  "deepseek-v3.1:671b": "deepseek/deepseek-chat-v3.1:free",
226
- "deepseek-r1:671b": "deepseek/deepseek-r1-0528:free",
227
- "gemini-2.0-flash": "google/gemini-2.0-flash-exp:free",
228
- "gemma3n:e2b": "google/gemma-3n-e2b-it:free",
228
+ "gpt-oss:20b": "openai/gpt-oss-20b:free",
229
229
  "glm-4.5-air": "z-ai/glm-4.5-air:free",
230
+ "qwen3-coder": "qwen/qwen3-coder:free",
231
+ "kimi-k2": "moonshotai/kimi-k2:free",
232
+ "venice-mistral:24b":"cognitivecomputations/dolphin-mistral-24b-venice-edition:free",
233
+ "gemma3n:2b":"google/gemma-3n-e2b-it:free",
234
+ "deepseek-r1t2-chimera": "tngtech/deepseek-r1t2-chimera:free",
235
+ "mistral-small3.2:24b": "mistralai/mistral-small-3.2-24b-instruct:free",
236
+ "deepseek-r1:671b": "deepseek/deepseek-r1-0528:free",
237
+ "gemma3n:4b":"google/gemma-3n-e4b-it:free",
238
+ "qwen3:30b": "qwen/qwen3-30b-a3b:free",
239
+ "qwen3:14b": "qwen/qwen3-14b:free",
240
+ "qwen3:235b": "qwen/qwen3-235b-a22b:free",
230
241
  "mai-ds-r1": "microsoft/mai-ds-r1:free",
242
+ "qwen-2.5:72b": "qwen/qwen-2.5-72b-instruct:free",
243
+ "qwen2.5vl": "qwen/qwen2.5-vl-32b-instruct:free",
244
+ "qwen2.5vl:32b": "qwen/qwen2.5-vl-32b-instruct:free",
245
+ "gemma3:4b":"google/gemma-3-4b-it:free",
246
+ "gemma3:12b":"google/gemma-3-12b-it:free",
247
+ "gemma3:27b": "google/gemma-3-27b-it:free",
248
+ "deepseek-r1": "deepseek/deepseek-r1-0528:free",
249
+ "gemini-2.0-flash": "google/gemini-2.0-flash-exp:free",
231
250
  "llama3.3:70b": "meta-llama/llama-3.3-70b-instruct:free",
232
- "nemotron-nano:9b": "nvidia/nemotron-nano-9b-v2:free",
233
- "nemotron-nano-vl:12b": "nvidia/nemotron-nano-12b-v2-vl:free",
234
- "deepseek-r1-distill-llama:70b": "deepseek/deepseek-r1-distill-llama-70b:free",
235
- "gpt-oss:20b": "openai/gpt-oss-20b:free",
236
- "mistral-small3.2:24b": "mistralai/mistral-small-3.2-24b-instruct:free",
251
+ "llama3.2:3b":"meta-llama/llama-3.2-3b-instruct:free",
237
252
  "mistral-nemo:12b": "mistralai/mistral-nemo:free",
238
- "venice-uncensored:24b": "cognitivecomputations/dolphin-mistral-24b-venice-edition:free",
239
- "llama3.3:8b": "meta-llama/llama-3.3-8b-instruct:free",
240
- "gemma3:27b": "google/gemma-3-27b-it:free",
241
- "qwen3-coder": "qwen/qwen3-coder:free",
242
- "qwen3:235b": "qwen/qwen3-235b-a22b:free",
243
- "qwen3:30b": "qwen/qwen3-30b-a3b:free",
244
253
  "qwen3:4b": "qwen/qwen3-4b:free",
245
- "qwen2.5vl:32b": "qwen/qwen2.5-vl-32b-instruct:free",
246
- "qwen-2.5:72b": "qwen/qwen-2.5-72b-instruct:free",
247
- "minimax-m2": "minimax/minimax-m2:free"
254
+ "mistral:7b":"mistralai/mistral-7b-instruct:free"
248
255
  },
249
256
  "default_pricing": {
250
257
  "input": "0",
@@ -398,6 +405,10 @@
398
405
  "base_url": "https://api.openai.com",
399
406
  "api_key": "$OPENAI_API_KEY",
400
407
  "models": {
408
+ "gpt-5.1": "gpt-5.1",
409
+ "gpt-5.1-chat-latest": "gpt-5.1-chat-latest",
410
+ "gpt-5.1-codex": "gpt-5.1-codex",
411
+ "gpt-5.1-codex-mini": "gpt-5.1-codex-mini",
401
412
  "gpt-5-nano": "gpt-5-nano",
402
413
  "gpt-5-mini": "gpt-5-mini",
403
414
  "gpt-5": "gpt-5",
@@ -417,6 +428,22 @@
417
428
  "gpt-3.5-turbo": "gpt-3.5-turbo"
418
429
  },
419
430
  "pricing": {
431
+ "gpt-5.1": {
432
+ "input": "0.00000125",
433
+ "output": "0.00001"
434
+ },
435
+ "gpt-5.1-chat-latest": {
436
+ "input": "0.00000125",
437
+ "output": "0.00001"
438
+ },
439
+ "gpt-5.1-codex": {
440
+ "input": "0.00000125",
441
+ "output": "0.00001"
442
+ },
443
+ "gpt-5.1-codex-mini": {
444
+ "input": "0.00000025",
445
+ "output": "0.000002"
446
+ },
420
447
  "gpt-5-nano": {
421
448
  "input": "0.00000005",
422
449
  "output": "0.0000004"
@@ -859,6 +886,10 @@
859
886
  "gemma3:4b": "google/gemma-3-4b-it",
860
887
  "gemma3:12b": "google/gemma-3-12b-it",
861
888
  "gemma3:27b": "google/gemma-3-27b-it",
889
+ "gpt-5.1": "openai/gpt-5.1",
890
+ "gpt-5.1-chat": "openai/gpt-5.1-chat",
891
+ "gpt-5.1-codex": "openai/gpt-5.1-codex",
892
+ "gpt-5.1-codex-mini": "openai/gpt-5.1-codex-mini",
862
893
  "gpt-5": "openai/gpt-5",
863
894
  "gpt-5-chat": "openai/gpt-5-chat",
864
895
  "gpt-5-mini": "openai/gpt-5-mini",
@@ -882,6 +913,8 @@
882
913
  "glm-4.5-air": "z-ai/glm-4.5-air",
883
914
  "minimax-m2": "minimax/minimax-m2",
884
915
  "kimi-k2": "moonshotai/kimi-k2",
916
+ "kimi-k2-thinking": "moonshotai/kimi-k2-thinking",
917
+ "kimi-linear:48b": "moonshotai/kimi-linear-48b-a3b-instruct",
885
918
  "deepseek-v3.1:671b": "deepseek/deepseek-chat",
886
919
  "deepseek-v3.2-exp": "deepseek/deepseek-v3.2-exp",
887
920
  "deepseek-chat-v3.1:671b": "deepseek/deepseek-chat-v3.1",
@@ -904,8 +937,8 @@
904
937
  },
905
938
  "pricing": {
906
939
  "meta-llama/llama-3.1-405b-instruct": {
907
- "input": "0.0000008",
908
- "output": "0.0000008"
940
+ "input": "0.0000035",
941
+ "output": "0.0000035"
909
942
  },
910
943
  "meta-llama/llama-3.3-70b-instruct": {
911
944
  "input": "0.00000013",
@@ -983,6 +1016,22 @@
983
1016
  "input": "0.00000009",
984
1017
  "output": "0.00000016"
985
1018
  },
1019
+ "openai/gpt-5.1": {
1020
+ "input": "0.00000125",
1021
+ "output": "0.00001"
1022
+ },
1023
+ "openai/gpt-5.1-chat": {
1024
+ "input": "0.00000125",
1025
+ "output": "0.00001"
1026
+ },
1027
+ "openai/gpt-5.1-codex": {
1028
+ "input": "0.00000125",
1029
+ "output": "0.00001"
1030
+ },
1031
+ "openai/gpt-5.1-codex-mini": {
1032
+ "input": "0.00000025",
1033
+ "output": "0.000002"
1034
+ },
986
1035
  "openai/gpt-5": {
987
1036
  "input": "0.00000125",
988
1037
  "output": "0.00001"
@@ -1061,23 +1110,31 @@
1061
1110
  },
1062
1111
  "z-ai/glm-4.5": {
1063
1112
  "input": "0.00000035",
1064
- "output": "0.00000155"
1113
+ "output": "0.0000015"
1065
1114
  },
1066
1115
  "z-ai/glm-4.5-air": {
1067
1116
  "input": "0.00000013",
1068
1117
  "output": "0.00000085"
1069
1118
  },
1070
1119
  "minimax/minimax-m2": {
1071
- "input": "0.00000015",
1072
- "output": "0.00000045"
1120
+ "input": "0.000000255",
1121
+ "output": "0.00000102"
1073
1122
  },
1074
1123
  "moonshotai/kimi-k2": {
1075
- "input": "0.00000014",
1076
- "output": "0.00000249"
1124
+ "input": "0.0000005",
1125
+ "output": "0.0000024"
1126
+ },
1127
+ "moonshotai/kimi-k2-thinking": {
1128
+ "input": "0.00000055",
1129
+ "output": "0.00000225"
1130
+ },
1131
+ "moonshotai/kimi-linear-48b-a3b-instruct": {
1132
+ "input": "0.0000003",
1133
+ "output": "0.0000006"
1077
1134
  },
1078
1135
  "deepseek/deepseek-chat": {
1079
1136
  "input": "0.0000003",
1080
- "output": "0.00000085"
1137
+ "output": "0.0000012"
1081
1138
  },
1082
1139
  "deepseek/deepseek-v3.2-exp": {
1083
1140
  "input": "0.00000027",