llms-py 3.0.0__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 (195) hide show
  1. llms/__pycache__/main.cpython-314.pyc +0 -0
  2. llms/index.html +37 -26
  3. llms/llms.json +21 -70
  4. llms/main.py +731 -1426
  5. llms/providers.json +1 -1
  6. llms/{extensions/analytics/ui/index.mjs → ui/Analytics.mjs} +238 -154
  7. llms/ui/App.mjs +63 -133
  8. llms/ui/Avatar.mjs +86 -0
  9. llms/ui/Brand.mjs +52 -0
  10. llms/ui/ChatPrompt.mjs +597 -0
  11. llms/ui/Main.mjs +862 -0
  12. llms/ui/OAuthSignIn.mjs +61 -0
  13. llms/ui/ProviderIcon.mjs +36 -0
  14. llms/ui/ProviderStatus.mjs +104 -0
  15. llms/{extensions/app/ui → ui}/Recents.mjs +57 -82
  16. llms/ui/{modules/chat/SettingsDialog.mjs → SettingsDialog.mjs} +9 -9
  17. llms/{extensions/app/ui/index.mjs → ui/Sidebar.mjs} +57 -122
  18. llms/ui/SignIn.mjs +65 -0
  19. llms/ui/Welcome.mjs +8 -0
  20. llms/ui/ai.mjs +13 -117
  21. llms/ui/app.css +49 -1776
  22. llms/ui/index.mjs +171 -87
  23. llms/ui/lib/charts.mjs +13 -9
  24. llms/ui/lib/servicestack-vue.mjs +3 -3
  25. llms/ui/lib/vue.min.mjs +9 -10
  26. llms/ui/lib/vue.mjs +1602 -1763
  27. llms/ui/markdown.mjs +2 -10
  28. llms/ui/model-selector.mjs +686 -0
  29. llms/ui/tailwind.input.css +1 -55
  30. llms/ui/threadStore.mjs +583 -0
  31. llms/ui/utils.mjs +118 -113
  32. llms/ui.json +1069 -0
  33. {llms_py-3.0.0.dist-info → llms_py-3.0.0b2.dist-info}/METADATA +1 -1
  34. llms_py-3.0.0b2.dist-info/RECORD +58 -0
  35. llms/extensions/app/README.md +0 -20
  36. llms/extensions/app/__init__.py +0 -530
  37. llms/extensions/app/__pycache__/__init__.cpython-314.pyc +0 -0
  38. llms/extensions/app/__pycache__/db.cpython-314.pyc +0 -0
  39. llms/extensions/app/__pycache__/db_manager.cpython-314.pyc +0 -0
  40. llms/extensions/app/db.py +0 -644
  41. llms/extensions/app/db_manager.py +0 -195
  42. llms/extensions/app/requests.json +0 -9073
  43. llms/extensions/app/threads.json +0 -15290
  44. llms/extensions/app/ui/threadStore.mjs +0 -411
  45. llms/extensions/core_tools/CALCULATOR.md +0 -32
  46. llms/extensions/core_tools/__init__.py +0 -598
  47. llms/extensions/core_tools/__pycache__/__init__.cpython-314.pyc +0 -0
  48. llms/extensions/core_tools/ui/codemirror/addon/edit/closebrackets.js +0 -201
  49. llms/extensions/core_tools/ui/codemirror/addon/edit/closetag.js +0 -185
  50. llms/extensions/core_tools/ui/codemirror/addon/edit/continuelist.js +0 -101
  51. llms/extensions/core_tools/ui/codemirror/addon/edit/matchbrackets.js +0 -160
  52. llms/extensions/core_tools/ui/codemirror/addon/edit/matchtags.js +0 -66
  53. llms/extensions/core_tools/ui/codemirror/addon/edit/trailingspace.js +0 -27
  54. llms/extensions/core_tools/ui/codemirror/addon/selection/active-line.js +0 -72
  55. llms/extensions/core_tools/ui/codemirror/addon/selection/mark-selection.js +0 -119
  56. llms/extensions/core_tools/ui/codemirror/addon/selection/selection-pointer.js +0 -98
  57. llms/extensions/core_tools/ui/codemirror/doc/docs.css +0 -225
  58. llms/extensions/core_tools/ui/codemirror/doc/source_sans.woff +0 -0
  59. llms/extensions/core_tools/ui/codemirror/lib/codemirror.css +0 -344
  60. llms/extensions/core_tools/ui/codemirror/lib/codemirror.js +0 -9884
  61. llms/extensions/core_tools/ui/codemirror/mode/clike/clike.js +0 -942
  62. llms/extensions/core_tools/ui/codemirror/mode/javascript/index.html +0 -118
  63. llms/extensions/core_tools/ui/codemirror/mode/javascript/javascript.js +0 -962
  64. llms/extensions/core_tools/ui/codemirror/mode/javascript/typescript.html +0 -62
  65. llms/extensions/core_tools/ui/codemirror/mode/python/python.js +0 -402
  66. llms/extensions/core_tools/ui/codemirror/theme/dracula.css +0 -40
  67. llms/extensions/core_tools/ui/codemirror/theme/mocha.css +0 -135
  68. llms/extensions/core_tools/ui/index.mjs +0 -650
  69. llms/extensions/gallery/README.md +0 -61
  70. llms/extensions/gallery/__init__.py +0 -61
  71. llms/extensions/gallery/__pycache__/__init__.cpython-314.pyc +0 -0
  72. llms/extensions/gallery/__pycache__/db.cpython-314.pyc +0 -0
  73. llms/extensions/gallery/db.py +0 -298
  74. llms/extensions/gallery/ui/index.mjs +0 -482
  75. llms/extensions/katex/README.md +0 -39
  76. llms/extensions/katex/__init__.py +0 -6
  77. llms/extensions/katex/__pycache__/__init__.cpython-314.pyc +0 -0
  78. llms/extensions/katex/ui/README.md +0 -125
  79. llms/extensions/katex/ui/contrib/auto-render.js +0 -338
  80. llms/extensions/katex/ui/contrib/auto-render.min.js +0 -1
  81. llms/extensions/katex/ui/contrib/auto-render.mjs +0 -244
  82. llms/extensions/katex/ui/contrib/copy-tex.js +0 -127
  83. llms/extensions/katex/ui/contrib/copy-tex.min.js +0 -1
  84. llms/extensions/katex/ui/contrib/copy-tex.mjs +0 -105
  85. llms/extensions/katex/ui/contrib/mathtex-script-type.js +0 -109
  86. llms/extensions/katex/ui/contrib/mathtex-script-type.min.js +0 -1
  87. llms/extensions/katex/ui/contrib/mathtex-script-type.mjs +0 -24
  88. llms/extensions/katex/ui/contrib/mhchem.js +0 -3213
  89. llms/extensions/katex/ui/contrib/mhchem.min.js +0 -1
  90. llms/extensions/katex/ui/contrib/mhchem.mjs +0 -3109
  91. llms/extensions/katex/ui/contrib/render-a11y-string.js +0 -887
  92. llms/extensions/katex/ui/contrib/render-a11y-string.min.js +0 -1
  93. llms/extensions/katex/ui/contrib/render-a11y-string.mjs +0 -800
  94. llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.ttf +0 -0
  95. llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.woff +0 -0
  96. llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  97. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  98. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  99. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  100. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  101. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  102. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  103. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  104. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  105. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  106. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  107. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  108. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  109. llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.ttf +0 -0
  110. llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.woff +0 -0
  111. llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.woff2 +0 -0
  112. llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  113. llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  114. llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  115. llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.ttf +0 -0
  116. llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.woff +0 -0
  117. llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.woff2 +0 -0
  118. llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.ttf +0 -0
  119. llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.woff +0 -0
  120. llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.woff2 +0 -0
  121. llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  122. llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  123. llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  124. llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.ttf +0 -0
  125. llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.woff +0 -0
  126. llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.woff2 +0 -0
  127. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  128. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  129. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  130. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  131. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  132. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  133. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  134. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  135. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  136. llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.ttf +0 -0
  137. llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.woff +0 -0
  138. llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.woff2 +0 -0
  139. llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.ttf +0 -0
  140. llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.woff +0 -0
  141. llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  142. llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.ttf +0 -0
  143. llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.woff +0 -0
  144. llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  145. llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.ttf +0 -0
  146. llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.woff +0 -0
  147. llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  148. llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.ttf +0 -0
  149. llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.woff +0 -0
  150. llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  151. llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  152. llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  153. llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  154. llms/extensions/katex/ui/index.mjs +0 -92
  155. llms/extensions/katex/ui/katex-swap.css +0 -1230
  156. llms/extensions/katex/ui/katex-swap.min.css +0 -1
  157. llms/extensions/katex/ui/katex.css +0 -1230
  158. llms/extensions/katex/ui/katex.js +0 -19080
  159. llms/extensions/katex/ui/katex.min.css +0 -1
  160. llms/extensions/katex/ui/katex.min.js +0 -1
  161. llms/extensions/katex/ui/katex.min.mjs +0 -1
  162. llms/extensions/katex/ui/katex.mjs +0 -18547
  163. llms/extensions/providers/__init__.py +0 -18
  164. llms/extensions/providers/__pycache__/__init__.cpython-314.pyc +0 -0
  165. llms/extensions/providers/__pycache__/anthropic.cpython-314.pyc +0 -0
  166. llms/extensions/providers/__pycache__/chutes.cpython-314.pyc +0 -0
  167. llms/extensions/providers/__pycache__/google.cpython-314.pyc +0 -0
  168. llms/extensions/providers/__pycache__/nvidia.cpython-314.pyc +0 -0
  169. llms/extensions/providers/__pycache__/openai.cpython-314.pyc +0 -0
  170. llms/extensions/providers/__pycache__/openrouter.cpython-314.pyc +0 -0
  171. llms/extensions/providers/anthropic.py +0 -229
  172. llms/extensions/providers/chutes.py +0 -155
  173. llms/extensions/providers/google.py +0 -378
  174. llms/extensions/providers/nvidia.py +0 -105
  175. llms/extensions/providers/openai.py +0 -156
  176. llms/extensions/providers/openrouter.py +0 -72
  177. llms/extensions/system_prompts/README.md +0 -22
  178. llms/extensions/system_prompts/__init__.py +0 -45
  179. llms/extensions/system_prompts/__pycache__/__init__.cpython-314.pyc +0 -0
  180. llms/extensions/system_prompts/ui/index.mjs +0 -280
  181. llms/extensions/system_prompts/ui/prompts.json +0 -1067
  182. llms/extensions/tools/__init__.py +0 -5
  183. llms/extensions/tools/__pycache__/__init__.cpython-314.pyc +0 -0
  184. llms/extensions/tools/ui/index.mjs +0 -204
  185. llms/providers-extra.json +0 -356
  186. llms/ui/ctx.mjs +0 -365
  187. llms/ui/modules/chat/ChatBody.mjs +0 -691
  188. llms/ui/modules/chat/index.mjs +0 -828
  189. llms/ui/modules/layout.mjs +0 -243
  190. llms/ui/modules/model-selector.mjs +0 -851
  191. llms_py-3.0.0.dist-info/RECORD +0 -202
  192. {llms_py-3.0.0.dist-info → llms_py-3.0.0b2.dist-info}/WHEEL +0 -0
  193. {llms_py-3.0.0.dist-info → llms_py-3.0.0b2.dist-info}/entry_points.txt +0 -0
  194. {llms_py-3.0.0.dist-info → llms_py-3.0.0b2.dist-info}/licenses/LICENSE +0 -0
  195. {llms_py-3.0.0.dist-info → llms_py-3.0.0b2.dist-info}/top_level.txt +0 -0
@@ -1,5 +0,0 @@
1
- from aiohttp import web
2
-
3
-
4
- def install(ctx):
5
- ctx.add_get("/", lambda r: web.json_response(ctx.app.tool_definitions))
@@ -1,204 +0,0 @@
1
- import { inject, computed } from "vue"
2
-
3
- const Tools = {
4
- template: `
5
- <div class="p-4 md:p-6 max-w-7xl mx-auto w-full">
6
- <div class="mb-6">
7
- <h1 class="text-2xl font-bold text-gray-900 dark:text-gray-100">Tools</h1>
8
- <p class="text-gray-600 dark:text-gray-400 mt-1">
9
- {{ ($state.tools || []).length }} tools available
10
- </p>
11
- </div>
12
-
13
- <div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4">
14
- <div v-for="tool in (Array.isArray($state.tools) ? $state.tools : []).filter(x => x.function)" :key="tool.function.name"
15
- class="bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col">
16
-
17
- <div class="p-4 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50">
18
- <div class="font-bold text-lg text-gray-900 dark:text-gray-100 font-mono break-all">
19
- {{ tool.function.name }}
20
- </div>
21
- </div>
22
-
23
- <div class="p-4 flex-1 flex flex-col">
24
- <p v-if="tool.function.description" class="text-sm text-gray-600 dark:text-gray-300 mb-4 flex-1">
25
- {{ tool.function.description }}
26
- </p>
27
- <p v-else class="text-sm text-gray-400 italic mb-4 flex-1">
28
- No description provided
29
- </p>
30
-
31
- <div v-if="tool.function.parameters?.properties && Object.keys(tool.function.parameters.properties).length > 0">
32
- <div class="text-xs font-semibold text-gray-500 uppercase tracking-wider mb-2">Parameters</div>
33
- <div class="space-y-3">
34
- <div v-for="(prop, name) in tool.function.parameters.properties" :key="name" class="text-sm bg-gray-50 dark:bg-gray-700/30 rounded p-2">
35
- <div class="flex flex-wrap items-baseline gap-2 mb-1">
36
- <span class="font-mono font-medium text-blue-600 dark:text-blue-400">{{ name }}</span>
37
- <span class="text-gray-500 text-xs">({{ prop.type }})</span>
38
- <span v-if="tool.function.parameters.required?.includes(name)"
39
- class="px-1.5 py-0.5 text-[10px] rounded bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 font-medium">
40
- REQUIRED
41
- </span>
42
- </div>
43
- <div v-if="prop.description" class="text-gray-600 dark:text-gray-400 text-xs">
44
- {{ prop.description }}
45
- </div>
46
- </div>
47
- </div>
48
- </div>
49
- <div v-else class="text-sm text-gray-400 italic border-t border-gray-100 dark:border-gray-700 pt-2 mt-auto">
50
- No parameters
51
- </div>
52
- </div>
53
- </div>
54
- </div>
55
- </div>
56
- `,
57
- setup() {
58
-
59
- }
60
- }
61
-
62
- const ToolSelector = {
63
- template: `
64
- <div class="px-4 py-2 bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700">
65
- <div class="flex flex-wrap items-center gap-2 text-sm">
66
-
67
- <!-- All -->
68
- <button @click="$ctx.setPrefs({ onlyTools: null })"
69
- class="px-2.5 py-1 rounded-full text-xs font-medium border transition-colors select-none"
70
- :class="$prefs.onlyTools == null
71
- ? 'bg-green-100 dark:bg-green-900/40 text-green-800 dark:text-green-300 border-green-200 dark:border-green-800'
72
- : 'cursor-pointer bg-white dark:bg-gray-800 text-gray-600 dark:border-gray-700 dark:text-gray-400 border-gray-200 dark:hover:border-gray-600 hover:border-gray-300'">
73
- All
74
- </button>
75
-
76
- <!-- None -->
77
- <button @click="$ctx.setPrefs({ onlyTools:[] })"
78
- class="px-2.5 py-1 rounded-full text-xs font-medium border transition-colors select-none"
79
- :class="$prefs.onlyTools?.length === 0
80
- ? 'bg-fuchsia-100 dark:bg-fuchsia-900/40 text-fuchsia-800 dark:text-fuchsia-300 border-fuchsia-200 dark:border-fuchsia-800'
81
- : 'cursor-pointer bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-400 border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600'">
82
- None
83
- </button>
84
-
85
- <div class="border-l h-4"></div>
86
-
87
- <!-- Tools -->
88
- <button v-for="tool in availableTools" :key="tool.function.name" type="button"
89
- @click="toggleTool(tool.function.name)"
90
- :title="tool.function.description"
91
- class="px-2.5 py-1 rounded-full text-xs font-medium border transition-colors select-none"
92
- :class="isToolActive(tool.function.name)
93
- ? 'bg-blue-100 dark:bg-blue-900/40 text-blue-800 dark:text-blue-300 border-blue-200 dark:border-blue-800'
94
- : 'bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-400 border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600'">
95
- {{ tool.function.name }}
96
- </button>
97
- </div>
98
- </div>
99
- `,
100
- setup() {
101
- const ctx = inject('ctx')
102
-
103
- const availableTools = computed(() => (Array.isArray(ctx.state.tools) ? ctx.state.tools : []).filter(x => x.function))
104
-
105
- function isToolActive(name) {
106
- const only = ctx.prefs.onlyTools
107
- if (only == null) return true
108
- if (Array.isArray(only)) return only.includes(name)
109
- return false
110
- }
111
-
112
- function toggleTool(name) {
113
- let onlyTools = ctx.prefs.onlyTools
114
-
115
- // If currently 'All', clicking a tool means we enter custom mode with all OTHER tools selected (deselecting clicked)
116
- if (onlyTools == null) {
117
- onlyTools = availableTools.value.map(t => t.function.name).filter(t => t !== name)
118
- } else {
119
- // Currently Custom or None
120
- if (onlyTools.includes(name)) {
121
- onlyTools = onlyTools.filter(t => t !== name)
122
- } else {
123
- onlyTools = [...onlyTools, name]
124
- }
125
- }
126
-
127
- ctx.setPrefs({ onlyTools })
128
- }
129
-
130
- return {
131
- availableTools,
132
- isToolActive,
133
- toggleTool
134
- }
135
- }
136
- }
137
-
138
- export default {
139
- order: 10 - 100,
140
-
141
- install(ctx) {
142
-
143
- ctx.components({
144
- Tools,
145
- ToolSelector,
146
- })
147
-
148
- const svg = (attrs, title) => `<svg ${attrs} xmlns="http://www.w4.org/2000/svg" viewBox="0 0 24 24">${title ? "<title>" + title + "</title>" : ''}<path fill="currentColor" d="M5.33 3.272a3.5 3.5 0 0 1 4.472 4.473L20.647 18.59l-2.122 2.122L7.68 9.867a3.5 3.5 0 0 1-4.472-4.474L5.444 7.63a1.5 1.5 0 0 0 2.121-2.121zm10.367 1.883l3.182-1.768l1.414 1.415l-1.768 3.182l-1.768.353l-2.12 2.121l-1.415-1.414l2.121-2.121zm-7.071 7.778l2.121 2.122l-4.95 4.95A1.5 1.5 0 0 1 3.58 17.99l.097-.107z" /></svg>`
149
-
150
- ctx.setLeftIcons({
151
- tools: {
152
- component: {
153
- template: svg(`@click="$ctx.togglePath('/tools')"`),
154
- },
155
- isActive({ path }) {
156
- return path === '/tools'
157
- }
158
- }
159
- })
160
-
161
- ctx.setTopIcons({
162
- tools: {
163
- component: {
164
- template: svg([
165
- `@click="$ctx.toggleTop('ToolSelector')"`,
166
- `:class="$prefs.onlyTools == null ? 'text-green-600 dark:text-green-300' : $prefs.onlyTools.length ? 'text-blue-600! dark:text-blue-300!' : ''"`
167
- ].join(' ')),
168
- // , "{{$prefs.onlyTools == null ? 'Include All Tools' : $prefs.onlyTools.length ? 'Include Selected Tools' : 'All Tools Excluded'}}"
169
- },
170
- isActive({ top }) {
171
- return top === 'ToolSelector'
172
- },
173
- get title() {
174
- return ctx.prefs.onlyTools == null
175
- ? `All Tools Included`
176
- : ctx.prefs.onlyTools.length
177
- ? `${ctx.prefs.onlyTools.length} ${ctx.utils.pluralize('Tool', ctx.prefs.onlyTools.length)} Included`
178
- : 'No Tools Included'
179
- }
180
- }
181
- })
182
-
183
- ctx.chatRequestFilters.push(({ request, thread }) => {
184
- // Tool Preferences
185
- const prefs = ctx.prefs
186
- if (prefs.onlyTools != null) {
187
- if (Array.isArray(prefs.onlyTools)) {
188
- request.metadata.tools = prefs.onlyTools.length > 0
189
- ? prefs.onlyTools.join(',')
190
- : 'none'
191
- }
192
- } else {
193
- request.metadata.tools = 'all'
194
- }
195
- })
196
-
197
- ctx.routes.push({ path: '/tools', component: Tools, meta: { title: 'View Tools' } })
198
- },
199
-
200
- async load(ctx) {
201
- const ext = ctx.scope('tools')
202
- ctx.state.tools = (await ext.getJson('/')).response || []
203
- }
204
- }
llms/providers-extra.json DELETED
@@ -1,356 +0,0 @@
1
- {
2
- "openrouter": {
3
- "models": {
4
- "google/gemini-2.5-flash-image": {
5
- "name": "Gemini 2.5 Flash Image (Nano Banana)",
6
- "modalities": {
7
- "input": [
8
- "text"
9
- ],
10
- "output": [
11
- "image"
12
- ]
13
- },
14
- "cost": {
15
- "input": 0.30,
16
- "output": 2.50
17
- }
18
- },
19
- "google/gemini-2.5-flash-image-preview": {
20
- "name": "Gemini 2.5 Flash Image Preview (Nano Banana)",
21
- "modalities": {
22
- "input": [
23
- "text"
24
- ],
25
- "output": [
26
- "image"
27
- ]
28
- },
29
- "cost": {
30
- "input": 0.30,
31
- "output": 2.50
32
- }
33
- },
34
- "google/gemini-3-pro-image-preview": {
35
- "name": "Google: Nano Banana Pro Preview (Gemini 3 Pro)",
36
- "modalities": {
37
- "input": [
38
- "text"
39
- ],
40
- "output": [
41
- "image"
42
- ]
43
- },
44
- "cost": {
45
- "input": 2.0,
46
- "output": 12.0
47
- }
48
- },
49
- "sourceful/riverflow-v2-fast-preview": {
50
- "name": "Sourceful: Riverflow V2 Fast Preview",
51
- "modalities": {
52
- "input": [
53
- "text"
54
- ],
55
- "output": [
56
- "image"
57
- ]
58
- },
59
- "cost": {
60
- "input": 0,
61
- "output": 7.19
62
- }
63
- },
64
- "sourceful/riverflow-v2-standard-preview": {
65
- "name": "Sourceful: Riverflow V2 Standard Preview",
66
- "modalities": {
67
- "input": [
68
- "text"
69
- ],
70
- "output": [
71
- "image"
72
- ]
73
- },
74
- "cost": {
75
- "input": 0,
76
- "output": 8.38
77
- }
78
- },
79
- "sourceful/riverflow-v2-max-preview": {
80
- "name": "Sourceful: Riverflow V2 Max Preview",
81
- "modalities": {
82
- "input": [
83
- "text"
84
- ],
85
- "output": [
86
- "image"
87
- ]
88
- },
89
- "cost": {
90
- "input": 0,
91
- "output": 17.96
92
- }
93
- },
94
- "openai/gpt-5-image-mini": {
95
- "name": "OpenAI: GPT-5 Image Mini",
96
- "modalities": {
97
- "input": [
98
- "text"
99
- ],
100
- "output": [
101
- "image"
102
- ]
103
- },
104
- "cost": {
105
- "input": 2.50,
106
- "output": 2
107
- }
108
- },
109
- "openai/gpt-5-image": {
110
- "name": "OpenAI: GPT-5 Image",
111
- "modalities": {
112
- "input": [
113
- "text"
114
- ],
115
- "output": [
116
- "image"
117
- ]
118
- },
119
- "cost": {
120
- "input": 10.0,
121
- "output": 10.0
122
- }
123
- },
124
- "black-forest-labs/flux.2-pro": {
125
- "name": "Black Forest Labs: FLUX.2 Pro",
126
- "modalities": {
127
- "input": [
128
- "text"
129
- ],
130
- "output": [
131
- "image"
132
- ]
133
- },
134
- "cost": {
135
- "input": 3.66,
136
- "output": 3.66
137
- }
138
- },
139
- "black-forest-labs/flux.2-max": {
140
- "name": "Black Forest Labs: FLUX.2 Max",
141
- "modalities": {
142
- "input": [
143
- "text"
144
- ],
145
- "output": [
146
- "image"
147
- ]
148
- },
149
- "cost": {
150
- "input": 7.32,
151
- "output": 7.32
152
- }
153
- },
154
- "black-forest-labs/flux.2-flex": {
155
- "name": "Black Forest Labs: FLUX.2 Flex",
156
- "modalities": {
157
- "input": [
158
- "text"
159
- ],
160
- "output": [
161
- "image"
162
- ]
163
- },
164
- "cost": {
165
- "input": 14.64,
166
- "output": 14.64
167
- }
168
- }
169
- }
170
- },
171
- "openai": {
172
- "models": {
173
- "chatgpt-image-latest": {
174
- "name": "ChatGPT Image Latest",
175
- "modalities": {
176
- "input": [
177
- "text"
178
- ],
179
- "output": [
180
- "image"
181
- ]
182
- },
183
- "cost": {
184
- "input": 5.0,
185
- "output": 32.0
186
- }
187
- },
188
- "gpt-image-1.5": {
189
- "name": "GPT Image 1.5",
190
- "modalities": {
191
- "input": [
192
- "text"
193
- ],
194
- "output": [
195
- "image"
196
- ]
197
- },
198
- "cost": {
199
- "input": 5.0,
200
- "output": 32.0
201
- }
202
- },
203
- "gpt-image-1": {
204
- "name": "GPT Image 1",
205
- "modalities": {
206
- "input": [
207
- "text"
208
- ],
209
- "output": [
210
- "image"
211
- ]
212
- },
213
- "cost": {
214
- "input": 5.0,
215
- "output": 40.0
216
- }
217
- },
218
- "gpt-image-1-mini": {
219
- "name": "GPT Image 1 Mini",
220
- "modalities": {
221
- "input": [
222
- "text"
223
- ],
224
- "output": [
225
- "image"
226
- ]
227
- },
228
- "cost": {
229
- "input": 5.0,
230
- "output": 8.0
231
- }
232
- }
233
- }
234
- },
235
- "chutes": {
236
- "models": {
237
- "chutes-z-image-turbo": {
238
- "name": "Z Image Turbo",
239
- "modalities": {
240
- "input": [
241
- "text"
242
- ],
243
- "output": [
244
- "image"
245
- ]
246
- }
247
- },
248
- "qwen-image": {
249
- "modalities": {
250
- "input": [
251
- "text"
252
- ],
253
- "output": [
254
- "image"
255
- ]
256
- }
257
- },
258
- "chutes-qwen-image-edit-2509": {
259
- "name": "Qwen Image Edit 2509",
260
- "modalities": {
261
- "input": [
262
- "text",
263
- "image"
264
- ],
265
- "output": [
266
- "image"
267
- ]
268
- }
269
- },
270
- "chutes-hidream": {
271
- "name": "Hidream",
272
- "modalities": {
273
- "input": [
274
- "text"
275
- ],
276
- "output": [
277
- "image"
278
- ]
279
- }
280
- },
281
- "chutes-hunyuan-image-3": {
282
- "name": "Hunyuan Image 3",
283
- "modalities": {
284
- "input": [
285
- "text"
286
- ],
287
- "output": [
288
- "image"
289
- ]
290
- }
291
- },
292
- "FLUX.1-schnell": {
293
- "name": "FLUX.1 Schnell",
294
- "modalities": {
295
- "input": [
296
- "text"
297
- ],
298
- "output": [
299
- "image"
300
- ]
301
- }
302
- },
303
- "chroma": {
304
- "modalities": {
305
- "input": [
306
- "text"
307
- ],
308
- "output": [
309
- "image"
310
- ]
311
- }
312
- },
313
- "JuggernautXL-Ragnarok": {
314
- "name": "JuggernautXL Ragnarok",
315
- "modalities": {
316
- "input": [
317
- "text"
318
- ],
319
- "output": [
320
- "image"
321
- ]
322
- }
323
- },
324
- "Animij": {
325
- "modalities": {
326
- "input": [
327
- "text"
328
- ],
329
- "output": [
330
- "image"
331
- ]
332
- }
333
- },
334
- "Illustrij": {
335
- "modalities": {
336
- "input": [
337
- "text"
338
- ],
339
- "output": [
340
- "image"
341
- ]
342
- }
343
- },
344
- "iLustMix": {
345
- "modalities": {
346
- "input": [
347
- "text"
348
- ],
349
- "output": [
350
- "image"
351
- ]
352
- }
353
- }
354
- }
355
- }
356
- }