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
llms/ui/index.mjs CHANGED
@@ -1,77 +1,207 @@
1
1
 
2
- import { createApp } from 'vue'
2
+ import { createApp, reactive, defineAsyncComponent } from 'vue'
3
3
  import { createWebHistory, createRouter } from "vue-router"
4
- import ServiceStackVue, { useFormatters } from "@servicestack/vue"
5
- import App from './App.mjs'
6
- import ai from './ai.mjs'
7
- import LayoutModule from './modules/layout.mjs'
8
- import ChatModule from './modules/chat/index.mjs'
9
- import ModelSelectorModule from './modules/model-selector.mjs'
10
- import { utilsFunctions, utilsFormatters } from './utils.mjs'
11
- import { marked, markdownFormatters } from './markdown.mjs'
12
- import { AppContext } from './ctx.mjs'
4
+ import { EventBus, humanize } from "@servicestack/client"
5
+ import ServiceStackVue from "@servicestack/vue"
6
+ import App from '/ui/App.mjs'
7
+ import ai from '/ui/ai.mjs'
8
+ import threadStore, { useThreadStore } from './threadStore.mjs'
9
+ import SettingsDialog from '/ui/SettingsDialog.mjs'
10
+ import ModelSelectorInstaller from '/ui/model-selector.mjs'
11
+ import { storageObject } from './utils.mjs'
12
+
13
+ const { config, models } = await ai.init()
14
+ const MainComponent = defineAsyncComponent(() => import(ai.base + '/ui/Main.mjs'))
15
+ const RecentsComponent = defineAsyncComponent(() => import(ai.base + '/ui/Recents.mjs'))
16
+ const AnalyticsComponent = defineAsyncComponent(() => import(ai.base + '/ui/Analytics.mjs'))
13
17
 
14
18
  const Components = {
19
+ SettingsDialog,
15
20
  }
16
21
 
17
- const BuiltInModules = {
18
- LayoutModule,
19
- ChatModule,
20
- ModelSelectorModule,
22
+ const BuiltInModules = [
23
+ ModelSelectorInstaller,
24
+ threadStore,
25
+ ]
26
+
27
+ const routes = [
28
+ { path: '/', component: MainComponent },
29
+ { path: '/c/:id', component: MainComponent },
30
+ { path: '/recents', component: RecentsComponent },
31
+ { path: '/analytics', component: AnalyticsComponent },
32
+ { path: '/:fallback(.*)*', component: MainComponent }
33
+ ]
34
+ routes.forEach(r => r.path = ai.base + r.path)
35
+ const router = createRouter({
36
+ history: createWebHistory(),
37
+ routes,
38
+ })
39
+
40
+
41
+ class AppExtension {
42
+ constructor(ctx, ext) {
43
+ this.ctx = ctx
44
+ Object.assign(this, ext)
45
+ this.baseUrl = `${ctx.ai.base}/ext/${this.id}`
46
+ this.storageKey = `llms.${this.id}`
47
+ if (!this.name) {
48
+ this.name = humanize(this.id)
49
+ }
50
+ }
51
+ storageObject(o) {
52
+ return storageObject(this.storageKey, o)
53
+ }
21
54
  }
22
55
 
56
+ class AppContext {
57
+ constructor({ app, config, models, extensions, routes, ai, router, threadStore, modules }) {
58
+ this.app = app
59
+ this.state = reactive({
60
+ config,
61
+ models,
62
+ extensions,
63
+ })
64
+ this.routes = routes
65
+ this.ai = ai
66
+ this.router = router
67
+ this.threadStore = threadStore
68
+ this.modules = modules
69
+ this.events = new EventBus()
70
+ this.modalComponents = {}
71
+ this.extensions = []
72
+ this.layout = reactive(storageObject(`llms.layout`))
73
+ this.chatRequestFilters = []
74
+ this.chatResponseFilters = []
75
+ this.chatErrorFilters = []
76
+ this.createThreadFilters = []
77
+ this.updateThreadFilters = []
78
+
79
+ app.config.globalProperties.$ctx = this
80
+ app.config.globalProperties.$state = this.state
81
+ app.config.globalProperties.$layout = this.layout
82
+ document.addEventListener('keydown', (e) => this.handleKeydown(e))
83
+ }
84
+ component(name, component) {
85
+ if (!name) return name
86
+ if (component) {
87
+ this.app.component(name, component)
88
+ }
89
+ return component || this.app.component(name)
90
+ }
91
+ components(components) {
92
+ Object.keys(components).forEach(name => {
93
+ this.app.component(name, components[name])
94
+ })
95
+ }
96
+ extension(extension) {
97
+ const ext = new AppExtension(this, extension)
98
+ this.extensions.push(ext)
99
+ return ext
100
+ }
101
+ modals(modals) {
102
+ Object.keys(modals).forEach(name => {
103
+ this.modalComponents[name] = modals[name]
104
+ this.component(name, modals[name])
105
+ })
106
+ }
107
+ openModal(name) {
108
+ const component = this.modalComponents[name]
109
+ if (!component) {
110
+ console.error(`Modal ${name} not found`)
111
+ return
112
+ }
113
+ console.debug('openModal', name)
114
+ this.router.push({ query: { open: name } })
115
+ this.events.publish('modal:open', name)
116
+ return component
117
+ }
118
+ closeModal(name) {
119
+ console.debug('closeModal', name)
120
+ this.router.push({ query: { open: undefined } })
121
+ this.events.publish('modal:close', name)
122
+ }
123
+ handleKeydown(e) {
124
+ if (e.key === 'Escape') {
125
+ const modal = this.router.currentRoute.value?.query?.open
126
+ if (modal) {
127
+ this.closeModal(modal)
128
+ }
129
+ }
130
+ }
131
+ setState(o) {
132
+ Object.assign(this.state, o)
133
+ //this.events.publish('update:state', this.state)
134
+ }
135
+ setLayout(o) {
136
+ Object.assign(this.layout, o)
137
+ storageObject(`llms.layout`, this.layout)
138
+ }
139
+ getPrefs() {
140
+ return storageObject(this.ai.prefsKey)
141
+ }
142
+ setPrefs(o) {
143
+ storageObject(this.ai.prefsKey, o)
144
+ }
145
+ toggleLayout(o) {
146
+ Object.keys(o).forEach(key => {
147
+ this.layout[key] = this.layout[key] == o[key] ? undefined : o[key]
148
+ })
149
+ storageObject(`llms.layout`, this.layout)
150
+ }
151
+ getCurrentThread() {
152
+ return this.threadStore.currentThread.value
153
+ }
154
+ }
23
155
 
24
156
  export async function createContext() {
25
- const app = createApp(App)
157
+ const app = createApp(App, { config, models })
26
158
 
159
+ app.use(router)
27
160
  app.use(ServiceStackVue)
28
161
  Object.keys(Components).forEach(name => {
29
162
  app.component(name, Components[name])
30
163
  })
31
164
 
32
- const fmt = Object.assign({}, useFormatters(), utilsFormatters())
33
- const utils = Object.assign({}, utilsFunctions())
34
- const routes = []
35
165
 
36
- const ctx = new AppContext({ app, routes, ai, fmt, utils, marked })
37
- app.provide('ctx', ctx)
38
- await ctx.init()
166
+ window.ai = app.config.globalProperties.$ai = ai
167
+
168
+ // Load Extensions
169
+ const exts = await (await fetch("/ext")).json()
39
170
 
40
171
  // Load modules in parallel
41
- const validExtensions = ctx.state.extensions.filter(x => x.path);
42
- ctx.modules = await Promise.all(validExtensions.map(async extension => {
172
+ const validExtensions = exts.filter(x => x.path);
173
+ const modules = await Promise.all(validExtensions.map(async extension => {
43
174
  try {
44
175
  const module = await import(extension.path)
45
- const order = module.default.order || 0
46
- return { extension, module, order }
176
+ return { extension, module }
47
177
  } catch (e) {
48
178
  console.error(`Failed to load extension module ${extension.name}:`, e)
49
179
  return null
50
180
  }
51
181
  }))
52
182
 
53
- // sort modules by order
54
- ctx.modules.sort((a, b) => a.order - b.order)
55
-
56
- const installedModules = []
183
+ const threadStore = useThreadStore()
57
184
 
58
- // Install built-in modules sequentially
59
- Object.entries(BuiltInModules).forEach(([name, module]) => {
60
- try {
61
- module.install(ctx)
62
- installedModules.push({ extension: { id: name }, module: { default: module } })
63
- console.log(`Installed built-in: ${name}`)
64
- } catch (e) {
65
- console.error(`Failed to install built-in ${name}:`, e)
66
- }
185
+ const ctx = new AppContext({
186
+ app,
187
+ config,
188
+ models,
189
+ routes,
190
+ ai,
191
+ router,
192
+ threadStore,
193
+ exts,
194
+ modules,
67
195
  })
196
+ app.provide('ctx', ctx)
197
+
198
+ BuiltInModules.forEach(ext => ext.install(ctx))
68
199
 
69
- // Install extensions sequentially
70
- for (const result of ctx.modules) {
200
+ // Install sequentially
201
+ for (const result of modules) {
71
202
  if (result && result.module.default && result.module.default.install) {
72
203
  try {
73
204
  result.module.default.install(ctx)
74
- installedModules.push(result)
75
205
  console.log(`Installed extension: ${result.extension.id}`)
76
206
  } catch (e) {
77
207
  console.error(`Failed to install extension ${result.extension.id}:`, e)
@@ -79,51 +209,5 @@ export async function createContext() {
79
209
  }
80
210
  }
81
211
 
82
- // Register all components with Vue
83
- Object.entries(ctx._components).forEach(([name, component]) => {
84
- app.component(name, component)
85
- })
86
-
87
- // Add fallback route and create router
88
- routes.push({ path: '/:fallback(.*)*', component: ctx.component('Home') })
89
- routes.forEach(r => r.path = ai.base + r.path)
90
- ctx.router = createRouter({
91
- history: createWebHistory(),
92
- routes,
93
- })
94
- app.use(ctx.router)
95
-
96
- ctx.router.beforeEach((to, from) => {
97
- const title = to.meta.title || 'Chat'
98
- console.debug('router:change', to.path, title)
99
- ctx.setLayout({ path: to.path })
100
- ctx.setState({ title })
101
- document.title = title
102
- return true
103
- })
104
- ctx._onRouterBeforeEach.forEach(ctx.router.beforeEach)
105
-
106
- if (ai.hasAccess) {
107
- if (ctx.layout.path && location.pathname === '/' && !location.search) {
108
- console.log('redirecting to saved path: ', ctx.layout.path)
109
- ctx.router.push({ path: ctx.layout.path })
110
- }
111
- } else {
112
- ctx.router.push({ path: '/' })
113
- }
114
-
115
- const loadModules = installedModules.filter(x => x.module.default && x.module.default.load)
116
- console.log('Loading modules: ', loadModules.map(x => x.extension.id))
117
-
118
- // Load all extensions in parallel
119
- await Promise.all(loadModules.map(async result => {
120
- try {
121
- await result.module.default.load(ctx)
122
- console.log(`Loaded extension: ${result.extension.id}`)
123
- } catch (e) {
124
- console.error(`Failed to load extension ${result.extension.id}:`, e)
125
- }
126
- }))
127
-
128
212
  return ctx
129
213
  }
llms/ui/lib/charts.mjs CHANGED
@@ -1,16 +1,20 @@
1
+ import { useFormatters, useUtils } from "@servicestack/vue"
1
2
  import { Chart, registerables } from "chart.js"
2
3
  Chart.register(...registerables)
3
4
 
4
- export const resultLimits = [5, 10, 25, 50, 100]
5
+ const { humanifyMs, humanifyNumber, formatDate } = useFormatters()
6
+ const { delay } = useUtils()
7
+
8
+ export const resultLimits = [5,10,25,50,100]
5
9
  export const colors = [
6
- { background: 'rgba(54, 162, 235, 0.2)', border: 'rgb(54, 162, 235)' }, //blue
7
- { background: 'rgba(255, 99, 132, 0.2)', border: 'rgb(255, 99, 132)' },
10
+ { background: 'rgba(54, 162, 235, 0.2)', border: 'rgb(54, 162, 235)' }, //blue
11
+ { background: 'rgba(255, 99, 132, 0.2)', border: 'rgb(255, 99, 132)' },
8
12
  { background: 'rgba(153, 102, 255, 0.2)', border: 'rgb(153, 102, 255)' },
9
- { background: 'rgba(54, 162, 235, 0.2)', border: 'rgb(54, 162, 235)' },
10
- { background: 'rgba(255, 159, 64, 0.2)', border: 'rgb(255, 159, 64)' },
11
- { background: 'rgba(67, 56, 202, 0.2)', border: 'rgb(67, 56, 202)' },
12
- { background: 'rgba(255, 99, 132, 0.2)', border: 'rgb(255, 99, 132)' },
13
- { background: 'rgba(14, 116, 144, 0.2)', border: 'rgb(14, 116, 144)' },
14
- { background: 'rgba(162, 28, 175, 0.2)', border: 'rgb(162, 28, 175)' },
13
+ { background: 'rgba(54, 162, 235, 0.2)', border: 'rgb(54, 162, 235)' },
14
+ { background: 'rgba(255, 159, 64, 0.2)', border: 'rgb(255, 159, 64)' },
15
+ { background: 'rgba(67, 56, 202, 0.2)', border: 'rgb(67, 56, 202)' },
16
+ { background: 'rgba(255, 99, 132, 0.2)', border: 'rgb(255, 99, 132)' },
17
+ { background: 'rgba(14, 116, 144, 0.2)', border: 'rgb(14, 116, 144)' },
18
+ { background: 'rgba(162, 28, 175, 0.2)', border: 'rgb(162, 28, 175)' },
15
19
  { background: 'rgba(201, 203, 207, 0.2)', border: 'rgb(201, 203, 207)' },
16
20
  ]