llms-py 3.0.0__py3-none-any.whl → 3.0.0b1__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 (206) hide show
  1. llms/index.html +77 -35
  2. llms/llms.json +23 -72
  3. llms/main.py +732 -1786
  4. llms/providers.json +1 -1
  5. llms/{extensions/analytics/ui/index.mjs → ui/Analytics.mjs} +238 -154
  6. llms/ui/App.mjs +60 -151
  7. llms/ui/Avatar.mjs +85 -0
  8. llms/ui/Brand.mjs +52 -0
  9. llms/ui/ChatPrompt.mjs +606 -0
  10. llms/ui/Main.mjs +873 -0
  11. llms/ui/ModelSelector.mjs +693 -0
  12. llms/ui/OAuthSignIn.mjs +92 -0
  13. llms/ui/ProviderIcon.mjs +36 -0
  14. llms/ui/ProviderStatus.mjs +105 -0
  15. llms/{extensions/app/ui → ui}/Recents.mjs +65 -91
  16. llms/ui/{modules/chat/SettingsDialog.mjs → SettingsDialog.mjs} +9 -9
  17. llms/{extensions/app/ui/index.mjs → ui/Sidebar.mjs} +58 -124
  18. llms/ui/SignIn.mjs +64 -0
  19. llms/ui/SystemPromptEditor.mjs +31 -0
  20. llms/ui/SystemPromptSelector.mjs +56 -0
  21. llms/ui/Welcome.mjs +8 -0
  22. llms/ui/ai.mjs +53 -125
  23. llms/ui/app.css +111 -1837
  24. llms/ui/lib/charts.mjs +13 -9
  25. llms/ui/lib/servicestack-vue.mjs +3 -3
  26. llms/ui/lib/vue.min.mjs +9 -10
  27. llms/ui/lib/vue.mjs +1602 -1763
  28. llms/ui/markdown.mjs +2 -10
  29. llms/ui/tailwind.input.css +80 -496
  30. llms/ui/threadStore.mjs +572 -0
  31. llms/ui/utils.mjs +117 -113
  32. llms/ui.json +1069 -0
  33. {llms_py-3.0.0.dist-info → llms_py-3.0.0b1.dist-info}/METADATA +1 -1
  34. llms_py-3.0.0b1.dist-info/RECORD +49 -0
  35. llms/__pycache__/__init__.cpython-312.pyc +0 -0
  36. llms/__pycache__/__init__.cpython-313.pyc +0 -0
  37. llms/__pycache__/__init__.cpython-314.pyc +0 -0
  38. llms/__pycache__/__main__.cpython-312.pyc +0 -0
  39. llms/__pycache__/__main__.cpython-314.pyc +0 -0
  40. llms/__pycache__/llms.cpython-312.pyc +0 -0
  41. llms/__pycache__/main.cpython-312.pyc +0 -0
  42. llms/__pycache__/main.cpython-313.pyc +0 -0
  43. llms/__pycache__/main.cpython-314.pyc +0 -0
  44. llms/__pycache__/plugins.cpython-314.pyc +0 -0
  45. llms/extensions/app/README.md +0 -20
  46. llms/extensions/app/__init__.py +0 -530
  47. llms/extensions/app/__pycache__/__init__.cpython-314.pyc +0 -0
  48. llms/extensions/app/__pycache__/db.cpython-314.pyc +0 -0
  49. llms/extensions/app/__pycache__/db_manager.cpython-314.pyc +0 -0
  50. llms/extensions/app/db.py +0 -644
  51. llms/extensions/app/db_manager.py +0 -195
  52. llms/extensions/app/requests.json +0 -9073
  53. llms/extensions/app/threads.json +0 -15290
  54. llms/extensions/app/ui/threadStore.mjs +0 -411
  55. llms/extensions/core_tools/CALCULATOR.md +0 -32
  56. llms/extensions/core_tools/__init__.py +0 -598
  57. llms/extensions/core_tools/__pycache__/__init__.cpython-314.pyc +0 -0
  58. llms/extensions/core_tools/ui/codemirror/addon/edit/closebrackets.js +0 -201
  59. llms/extensions/core_tools/ui/codemirror/addon/edit/closetag.js +0 -185
  60. llms/extensions/core_tools/ui/codemirror/addon/edit/continuelist.js +0 -101
  61. llms/extensions/core_tools/ui/codemirror/addon/edit/matchbrackets.js +0 -160
  62. llms/extensions/core_tools/ui/codemirror/addon/edit/matchtags.js +0 -66
  63. llms/extensions/core_tools/ui/codemirror/addon/edit/trailingspace.js +0 -27
  64. llms/extensions/core_tools/ui/codemirror/addon/selection/active-line.js +0 -72
  65. llms/extensions/core_tools/ui/codemirror/addon/selection/mark-selection.js +0 -119
  66. llms/extensions/core_tools/ui/codemirror/addon/selection/selection-pointer.js +0 -98
  67. llms/extensions/core_tools/ui/codemirror/doc/docs.css +0 -225
  68. llms/extensions/core_tools/ui/codemirror/doc/source_sans.woff +0 -0
  69. llms/extensions/core_tools/ui/codemirror/lib/codemirror.css +0 -344
  70. llms/extensions/core_tools/ui/codemirror/lib/codemirror.js +0 -9884
  71. llms/extensions/core_tools/ui/codemirror/mode/clike/clike.js +0 -942
  72. llms/extensions/core_tools/ui/codemirror/mode/javascript/index.html +0 -118
  73. llms/extensions/core_tools/ui/codemirror/mode/javascript/javascript.js +0 -962
  74. llms/extensions/core_tools/ui/codemirror/mode/javascript/typescript.html +0 -62
  75. llms/extensions/core_tools/ui/codemirror/mode/python/python.js +0 -402
  76. llms/extensions/core_tools/ui/codemirror/theme/dracula.css +0 -40
  77. llms/extensions/core_tools/ui/codemirror/theme/mocha.css +0 -135
  78. llms/extensions/core_tools/ui/index.mjs +0 -650
  79. llms/extensions/gallery/README.md +0 -61
  80. llms/extensions/gallery/__init__.py +0 -61
  81. llms/extensions/gallery/__pycache__/__init__.cpython-314.pyc +0 -0
  82. llms/extensions/gallery/__pycache__/db.cpython-314.pyc +0 -0
  83. llms/extensions/gallery/db.py +0 -298
  84. llms/extensions/gallery/ui/index.mjs +0 -482
  85. llms/extensions/katex/README.md +0 -39
  86. llms/extensions/katex/__init__.py +0 -6
  87. llms/extensions/katex/__pycache__/__init__.cpython-314.pyc +0 -0
  88. llms/extensions/katex/ui/README.md +0 -125
  89. llms/extensions/katex/ui/contrib/auto-render.js +0 -338
  90. llms/extensions/katex/ui/contrib/auto-render.min.js +0 -1
  91. llms/extensions/katex/ui/contrib/auto-render.mjs +0 -244
  92. llms/extensions/katex/ui/contrib/copy-tex.js +0 -127
  93. llms/extensions/katex/ui/contrib/copy-tex.min.js +0 -1
  94. llms/extensions/katex/ui/contrib/copy-tex.mjs +0 -105
  95. llms/extensions/katex/ui/contrib/mathtex-script-type.js +0 -109
  96. llms/extensions/katex/ui/contrib/mathtex-script-type.min.js +0 -1
  97. llms/extensions/katex/ui/contrib/mathtex-script-type.mjs +0 -24
  98. llms/extensions/katex/ui/contrib/mhchem.js +0 -3213
  99. llms/extensions/katex/ui/contrib/mhchem.min.js +0 -1
  100. llms/extensions/katex/ui/contrib/mhchem.mjs +0 -3109
  101. llms/extensions/katex/ui/contrib/render-a11y-string.js +0 -887
  102. llms/extensions/katex/ui/contrib/render-a11y-string.min.js +0 -1
  103. llms/extensions/katex/ui/contrib/render-a11y-string.mjs +0 -800
  104. llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.ttf +0 -0
  105. llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.woff +0 -0
  106. llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  107. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  108. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  109. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  110. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  111. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  112. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  113. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  114. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  115. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  116. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  117. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  118. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  119. llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.ttf +0 -0
  120. llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.woff +0 -0
  121. llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.woff2 +0 -0
  122. llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  123. llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  124. llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  125. llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.ttf +0 -0
  126. llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.woff +0 -0
  127. llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.woff2 +0 -0
  128. llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.ttf +0 -0
  129. llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.woff +0 -0
  130. llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.woff2 +0 -0
  131. llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  132. llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  133. llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  134. llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.ttf +0 -0
  135. llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.woff +0 -0
  136. llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.woff2 +0 -0
  137. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  138. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  139. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  140. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  141. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  142. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  143. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  144. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  145. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  146. llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.ttf +0 -0
  147. llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.woff +0 -0
  148. llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.woff2 +0 -0
  149. llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.ttf +0 -0
  150. llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.woff +0 -0
  151. llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  152. llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.ttf +0 -0
  153. llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.woff +0 -0
  154. llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  155. llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.ttf +0 -0
  156. llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.woff +0 -0
  157. llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  158. llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.ttf +0 -0
  159. llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.woff +0 -0
  160. llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  161. llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  162. llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  163. llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  164. llms/extensions/katex/ui/index.mjs +0 -92
  165. llms/extensions/katex/ui/katex-swap.css +0 -1230
  166. llms/extensions/katex/ui/katex-swap.min.css +0 -1
  167. llms/extensions/katex/ui/katex.css +0 -1230
  168. llms/extensions/katex/ui/katex.js +0 -19080
  169. llms/extensions/katex/ui/katex.min.css +0 -1
  170. llms/extensions/katex/ui/katex.min.js +0 -1
  171. llms/extensions/katex/ui/katex.min.mjs +0 -1
  172. llms/extensions/katex/ui/katex.mjs +0 -18547
  173. llms/extensions/providers/__init__.py +0 -18
  174. llms/extensions/providers/__pycache__/__init__.cpython-314.pyc +0 -0
  175. llms/extensions/providers/__pycache__/anthropic.cpython-314.pyc +0 -0
  176. llms/extensions/providers/__pycache__/chutes.cpython-314.pyc +0 -0
  177. llms/extensions/providers/__pycache__/google.cpython-314.pyc +0 -0
  178. llms/extensions/providers/__pycache__/nvidia.cpython-314.pyc +0 -0
  179. llms/extensions/providers/__pycache__/openai.cpython-314.pyc +0 -0
  180. llms/extensions/providers/__pycache__/openrouter.cpython-314.pyc +0 -0
  181. llms/extensions/providers/anthropic.py +0 -229
  182. llms/extensions/providers/chutes.py +0 -155
  183. llms/extensions/providers/google.py +0 -378
  184. llms/extensions/providers/nvidia.py +0 -105
  185. llms/extensions/providers/openai.py +0 -156
  186. llms/extensions/providers/openrouter.py +0 -72
  187. llms/extensions/system_prompts/README.md +0 -22
  188. llms/extensions/system_prompts/__init__.py +0 -45
  189. llms/extensions/system_prompts/__pycache__/__init__.cpython-314.pyc +0 -0
  190. llms/extensions/system_prompts/ui/index.mjs +0 -280
  191. llms/extensions/system_prompts/ui/prompts.json +0 -1067
  192. llms/extensions/tools/__init__.py +0 -5
  193. llms/extensions/tools/__pycache__/__init__.cpython-314.pyc +0 -0
  194. llms/extensions/tools/ui/index.mjs +0 -204
  195. llms/providers-extra.json +0 -356
  196. llms/ui/ctx.mjs +0 -365
  197. llms/ui/index.mjs +0 -129
  198. llms/ui/modules/chat/ChatBody.mjs +0 -691
  199. llms/ui/modules/chat/index.mjs +0 -828
  200. llms/ui/modules/layout.mjs +0 -243
  201. llms/ui/modules/model-selector.mjs +0 -851
  202. llms_py-3.0.0.dist-info/RECORD +0 -202
  203. {llms_py-3.0.0.dist-info → llms_py-3.0.0b1.dist-info}/WHEEL +0 -0
  204. {llms_py-3.0.0.dist-info → llms_py-3.0.0b1.dist-info}/entry_points.txt +0 -0
  205. {llms_py-3.0.0.dist-info → llms_py-3.0.0b1.dist-info}/licenses/LICENSE +0 -0
  206. {llms_py-3.0.0.dist-info → llms_py-3.0.0b1.dist-info}/top_level.txt +0 -0
llms/ui/ai.mjs CHANGED
@@ -1,12 +1,12 @@
1
1
  import { reactive } from "vue"
2
- import { ApiResult } from "@servicestack/client"
2
+ import { useThreadStore } from "./threadStore.mjs"
3
3
 
4
4
  const base = ''
5
5
  const headers = { 'Accept': 'application/json' }
6
6
  const prefsKey = 'llms.prefs'
7
7
 
8
8
  export const o = {
9
- version: '3.0.0',
9
+ version: '3.0.0b1',
10
10
  base,
11
11
  prefsKey,
12
12
  welcome: 'Welcome to llms.py',
@@ -15,11 +15,6 @@ export const o = {
15
15
  authType: 'apikey', // 'oauth' or 'apikey' - controls which SignIn component to use
16
16
  headers,
17
17
  isSidebarOpen: true, // Shared sidebar state (default open for lg+ screens)
18
- cacheUrlInfo: {},
19
-
20
- get hasAccess() {
21
- return !this.requiresAuth || this.auth
22
- },
23
18
 
24
19
  resolveUrl(url) {
25
20
  return url.startsWith('http') || url.startsWith('/v1') ? url : base + url
@@ -30,73 +25,14 @@ export const o = {
30
25
  headers: Object.assign({}, this.headers, options?.headers),
31
26
  })
32
27
  },
33
- async getJson(url, options) {
34
- const res = await this.get(url, options)
35
- return await this.createJsonResult(res, url)
36
- },
37
- async post(url, options) {
38
- return await fetch(this.resolveUrl(url), {
28
+ post(url, options) {
29
+ return fetch(this.resolveUrl(url), {
39
30
  method: 'POST',
40
31
  ...options,
41
32
  headers: Object.assign({ 'Content-Type': 'application/json' }, this.headers, options?.headers),
42
33
  })
43
34
  },
44
- async postForm(url, options) {
45
- return await fetch(this.resolveUrl(url), {
46
- method: 'POST',
47
- ...options,
48
- headers: Object.assign({}, options?.headers),
49
- })
50
- },
51
- async postJson(url, options) {
52
- const res = await this.post(url, options)
53
- return await this.createJsonResult(res, url)
54
- },
55
- async createJsonResult(res, msg = null) {
56
- let txt = ''
57
- try {
58
- txt = await res.text()
59
- const response = JSON.parse(txt)
60
- if (response?.responseStatus?.errorCode) {
61
- return new ApiResult({ error: response.responseStatus })
62
- }
63
- if (!res.ok) {
64
- return new ApiResult({ error: { errorCode: 'Error', message: res.statusText } })
65
- }
66
- return new ApiResult({ response })
67
- } catch (e) {
68
- console.error('Failed to parse JSON', e, msg, txt)
69
- const responseStatus = {
70
- errorCode: 'Error',
71
- message: `${e.message ?? e}`,
72
- stackTrace: msg ? `${msg}\n${txt}` : txt,
73
- }
74
- return { responseStatus }
75
- }
76
- },
77
- createErrorStatus({ message, errorCode, stackTrace, errors, meta }) {
78
- const ret = {
79
- errorCode: errorCode || 'Error',
80
- message: message,
81
- }
82
- if (stackTrace) {
83
- ret.stackTrace = stackTrace
84
- }
85
- if (errors && Array.isArray(errors)) {
86
- ret.errors = errors
87
- }
88
- if (meta) {
89
- ret.meta = meta
90
- }
91
- return ret
92
- },
93
- createErrorResult(e) {
94
- return new ApiResult({
95
- error: e.errorCode
96
- ? this.createErrorStatus(e)
97
- : this.createErrorStatus({ message: `${e.message ?? e}` })
98
- })
99
- },
35
+
100
36
  async getConfig() {
101
37
  return this.get('/config')
102
38
  },
@@ -116,33 +52,51 @@ export const o = {
116
52
  this.auth = auth
117
53
  if (auth?.apiKey) {
118
54
  this.headers.Authorization = `Bearer ${auth.apiKey}`
55
+ //localStorage.setItem('llms:auth', JSON.stringify({ apiKey: auth.apiKey }))
56
+ } else if (auth?.sessionToken) {
57
+ this.headers['X-Session-Token'] = auth.sessionToken
58
+ localStorage.setItem('llms:auth', JSON.stringify({ sessionToken: auth.sessionToken }))
119
59
  } else {
120
60
  if (this.headers.Authorization) {
121
61
  delete this.headers.Authorization
122
62
  }
63
+ if (this.headers['X-Session-Token']) {
64
+ delete this.headers['X-Session-Token']
65
+ }
123
66
  }
124
67
  },
125
68
  async signOut() {
126
- try {
127
- await this.post('/auth/logout')
128
- } catch (error) {
129
- console.error('Logout error:', error)
69
+ if (this.auth?.sessionToken) {
70
+ // Call logout endpoint for OAuth sessions
71
+ try {
72
+ await this.post('/auth/logout', {
73
+ headers: {
74
+ 'X-Session-Token': this.auth.sessionToken
75
+ }
76
+ })
77
+ } catch (error) {
78
+ console.error('Logout error:', error)
79
+ }
130
80
  }
131
81
  this.auth = null
132
82
  if (this.headers.Authorization) {
133
83
  delete this.headers.Authorization
134
84
  }
85
+ if (this.headers['X-Session-Token']) {
86
+ delete this.headers['X-Session-Token']
87
+ }
88
+ localStorage.removeItem('llms:auth')
135
89
  },
136
- async init(ctx) {
90
+ async init() {
137
91
  // Load models and prompts
138
- const [configRes, modelsRes, extensionsRes] = await Promise.all([
92
+ const { initDB } = useThreadStore()
93
+ const [_, configRes, modelsRes] = await Promise.all([
94
+ initDB(),
139
95
  this.getConfig(),
140
96
  this.getModels(),
141
- this.get('/ext'),
142
97
  ])
143
98
  const config = await configRes.json()
144
99
  const models = await modelsRes.json()
145
- const extensions = await extensionsRes.json()
146
100
 
147
101
  // Update auth settings from server config
148
102
  if (config.requiresAuth != null) {
@@ -152,6 +106,25 @@ export const o = {
152
106
  this.authType = config.authType
153
107
  }
154
108
 
109
+ // Try to restore session from localStorage
110
+ if (this.requiresAuth) {
111
+ const storedAuth = localStorage.getItem('llms:auth')
112
+ if (storedAuth) {
113
+ try {
114
+ const authData = JSON.parse(storedAuth)
115
+ if (authData.sessionToken) {
116
+ this.headers['X-Session-Token'] = authData.sessionToken
117
+ }
118
+ // else if (authData.apiKey) {
119
+ // this.headers.Authorization = `Bearer ${authData.apiKey}`
120
+ // }
121
+ } catch (e) {
122
+ console.error('Failed to restore auth from localStorage:', e)
123
+ localStorage.removeItem('llms:auth')
124
+ }
125
+ }
126
+ }
127
+
155
128
  // Get auth status
156
129
  const authRes = await this.getAuth()
157
130
  const auth = this.requiresAuth
@@ -159,59 +132,14 @@ export const o = {
159
132
  : null
160
133
  if (auth?.responseStatus?.errorCode) {
161
134
  console.error(auth.responseStatus.errorCode, auth.responseStatus.message)
135
+ // Clear invalid session from localStorage
136
+ localStorage.removeItem('llms:auth')
162
137
  } else {
163
138
  this.signIn(auth)
164
139
  }
165
- return { config, models, extensions, auth }
166
- },
167
-
168
-
169
- async uploadFile(file) {
170
- const formData = new FormData()
171
- formData.append('file', file)
172
- const response = await fetch(this.resolveUrl('/upload'), {
173
- method: 'POST',
174
- body: formData
175
- })
176
- if (!response.ok) {
177
- throw new Error(`Upload failed: ${response.statusText}`)
178
- }
179
- return response.json()
180
- },
181
-
182
-
183
- getCacheInfo(url) {
184
- return this.cacheUrlInfo[url]
185
- },
186
- async fetchCacheInfos(urls) {
187
- const infos = {}
188
- const fetchInfos = []
189
- for (const url of urls) {
190
- const info = this.getCacheInfo(url)
191
- if (info) {
192
- infos[url] = info
193
- } else {
194
- fetchInfos.push(fetch(this.resolveUrl(url + "?info")))
195
- }
196
- }
197
- const responses = await Promise.all(fetchInfos)
198
- for (let i = 0; i < urls.length; i++) {
199
- try {
200
- const info = await responses[i].json()
201
- this.setCacheInfo(urls[i], info)
202
- infos[urls[i]] = info
203
- } catch (e) {
204
- console.error('Failed to fetch info for', urls[i], e)
205
- }
206
- }
207
- return infos
208
- },
209
- setCacheInfo(url, info) {
210
- this.cacheUrlInfo[url] = info
140
+ return { config, models, auth }
211
141
  }
212
-
213
142
  }
214
143
 
215
-
216
144
  let ai = reactive(o)
217
145
  export default ai