libre-webui 0.10.0 โ†’ 0.12.0

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 (298) hide show
  1. package/README.md +75 -61
  2. package/backend/dist/db.d.ts.map +1 -1
  3. package/backend/dist/db.js +21 -19
  4. package/backend/dist/db.js.map +1 -1
  5. package/backend/dist/index.d.ts.map +1 -1
  6. package/backend/dist/index.js +39 -908
  7. package/backend/dist/index.js.map +1 -1
  8. package/backend/dist/middleware/auth.d.ts.map +1 -1
  9. package/backend/dist/middleware/auth.js +4 -2
  10. package/backend/dist/middleware/auth.js.map +1 -1
  11. package/backend/dist/middleware/index.d.ts.map +1 -1
  12. package/backend/dist/middleware/index.js +4 -2
  13. package/backend/dist/middleware/index.js.map +1 -1
  14. package/backend/dist/models/personaModel.d.ts.map +1 -1
  15. package/backend/dist/models/personaModel.js +11 -9
  16. package/backend/dist/models/personaModel.js.map +1 -1
  17. package/backend/dist/routes/auth.d.ts.map +1 -1
  18. package/backend/dist/routes/auth.js +36 -14
  19. package/backend/dist/routes/auth.js.map +1 -1
  20. package/backend/dist/routes/chat.d.ts.map +1 -1
  21. package/backend/dist/routes/chat.js +61 -249
  22. package/backend/dist/routes/chat.js.map +1 -1
  23. package/backend/dist/routes/documents.d.ts.map +1 -1
  24. package/backend/dist/routes/documents.js +10 -8
  25. package/backend/dist/routes/documents.js.map +1 -1
  26. package/backend/dist/routes/imageGen.d.ts.map +1 -1
  27. package/backend/dist/routes/imageGen.js +9 -7
  28. package/backend/dist/routes/imageGen.js.map +1 -1
  29. package/backend/dist/routes/libreClaw.d.ts +3 -0
  30. package/backend/dist/routes/libreClaw.d.ts.map +1 -0
  31. package/backend/dist/routes/libreClaw.js +156 -0
  32. package/backend/dist/routes/libreClaw.js.map +1 -0
  33. package/backend/dist/routes/ollama.d.ts.map +1 -1
  34. package/backend/dist/routes/ollama.js +7 -247
  35. package/backend/dist/routes/ollama.js.map +1 -1
  36. package/backend/dist/routes/plugins.d.ts.map +1 -1
  37. package/backend/dist/routes/plugins.js +7 -105
  38. package/backend/dist/routes/plugins.js.map +1 -1
  39. package/backend/dist/routes/tts.d.ts.map +1 -1
  40. package/backend/dist/routes/tts.js +7 -5
  41. package/backend/dist/routes/tts.js.map +1 -1
  42. package/backend/dist/routes/users.d.ts.map +1 -1
  43. package/backend/dist/routes/users.js +7 -5
  44. package/backend/dist/routes/users.js.map +1 -1
  45. package/backend/dist/services/assistantCompletionService.d.ts +26 -0
  46. package/backend/dist/services/assistantCompletionService.d.ts.map +1 -0
  47. package/backend/dist/services/assistantCompletionService.js +53 -0
  48. package/backend/dist/services/assistantCompletionService.js.map +1 -0
  49. package/backend/dist/services/authService.d.ts +2 -0
  50. package/backend/dist/services/authService.d.ts.map +1 -1
  51. package/backend/dist/services/authService.js +9 -5
  52. package/backend/dist/services/authService.js.map +1 -1
  53. package/backend/dist/services/chatGenerationService.d.ts +32 -0
  54. package/backend/dist/services/chatGenerationService.d.ts.map +1 -0
  55. package/backend/dist/services/chatGenerationService.js +118 -0
  56. package/backend/dist/services/chatGenerationService.js.map +1 -0
  57. package/backend/dist/services/chatRequestService.d.ts +55 -0
  58. package/backend/dist/services/chatRequestService.d.ts.map +1 -0
  59. package/backend/dist/services/chatRequestService.js +103 -0
  60. package/backend/dist/services/chatRequestService.js.map +1 -0
  61. package/backend/dist/services/chatService.d.ts +0 -1
  62. package/backend/dist/services/chatService.d.ts.map +1 -1
  63. package/backend/dist/services/chatService.js +13 -27
  64. package/backend/dist/services/chatService.js.map +1 -1
  65. package/backend/dist/services/documentService.d.ts.map +1 -1
  66. package/backend/dist/services/documentService.js +21 -19
  67. package/backend/dist/services/documentService.js.map +1 -1
  68. package/backend/dist/services/embeddingService.d.ts.map +1 -1
  69. package/backend/dist/services/embeddingService.js +3 -1
  70. package/backend/dist/services/embeddingService.js.map +1 -1
  71. package/backend/dist/services/encryptionService.d.ts.map +1 -1
  72. package/backend/dist/services/encryptionService.js +26 -24
  73. package/backend/dist/services/encryptionService.js.map +1 -1
  74. package/backend/dist/services/galleryService.d.ts.map +1 -1
  75. package/backend/dist/services/galleryService.js +8 -6
  76. package/backend/dist/services/galleryService.js.map +1 -1
  77. package/backend/dist/services/libreClawService.d.ts +105 -0
  78. package/backend/dist/services/libreClawService.d.ts.map +1 -0
  79. package/backend/dist/services/libreClawService.js +169 -0
  80. package/backend/dist/services/libreClawService.js.map +1 -0
  81. package/backend/dist/services/memoryService.d.ts +2 -13
  82. package/backend/dist/services/memoryService.d.ts.map +1 -1
  83. package/backend/dist/services/memoryService.js +37 -198
  84. package/backend/dist/services/memoryService.js.map +1 -1
  85. package/backend/dist/services/memoryUtils.d.ts +29 -0
  86. package/backend/dist/services/memoryUtils.d.ts.map +1 -0
  87. package/backend/dist/services/memoryUtils.js +165 -0
  88. package/backend/dist/services/memoryUtils.js.map +1 -0
  89. package/backend/dist/services/mutationEngineService.d.ts.map +1 -1
  90. package/backend/dist/services/mutationEngineService.js +3 -1
  91. package/backend/dist/services/mutationEngineService.js.map +1 -1
  92. package/backend/dist/services/ollamaService.d.ts.map +1 -1
  93. package/backend/dist/services/ollamaService.js +36 -34
  94. package/backend/dist/services/ollamaService.js.map +1 -1
  95. package/backend/dist/services/personaService.d.ts.map +1 -1
  96. package/backend/dist/services/personaService.js +3 -1
  97. package/backend/dist/services/personaService.js.map +1 -1
  98. package/backend/dist/services/pluginCapabilityRegistryService.d.ts +11 -0
  99. package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -0
  100. package/backend/dist/services/pluginCapabilityRegistryService.js +70 -0
  101. package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -0
  102. package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -1
  103. package/backend/dist/services/pluginCredentialsService.js +13 -11
  104. package/backend/dist/services/pluginCredentialsService.js.map +1 -1
  105. package/backend/dist/services/pluginEmbeddingService.d.ts +26 -0
  106. package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -0
  107. package/backend/dist/services/pluginEmbeddingService.js +159 -0
  108. package/backend/dist/services/pluginEmbeddingService.js.map +1 -0
  109. package/backend/dist/services/pluginImageGenerationService.d.ts +29 -0
  110. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -0
  111. package/backend/dist/services/pluginImageGenerationService.js +402 -0
  112. package/backend/dist/services/pluginImageGenerationService.js.map +1 -0
  113. package/backend/dist/services/pluginService.d.ts +9 -18
  114. package/backend/dist/services/pluginService.d.ts.map +1 -1
  115. package/backend/dist/services/pluginService.js +118 -1469
  116. package/backend/dist/services/pluginService.js.map +1 -1
  117. package/backend/dist/services/pluginTTSService.d.ts +28 -0
  118. package/backend/dist/services/pluginTTSService.d.ts.map +1 -0
  119. package/backend/dist/services/pluginTTSService.js +286 -0
  120. package/backend/dist/services/pluginTTSService.js.map +1 -0
  121. package/backend/dist/services/pluginVariablesService.d.ts.map +1 -1
  122. package/backend/dist/services/pluginVariablesService.js +7 -5
  123. package/backend/dist/services/pluginVariablesService.js.map +1 -1
  124. package/backend/dist/services/preferencesService.d.ts.map +1 -1
  125. package/backend/dist/services/preferencesService.js +9 -7
  126. package/backend/dist/services/preferencesService.js.map +1 -1
  127. package/backend/dist/services/simpleGitHubOAuth.d.ts.map +1 -1
  128. package/backend/dist/services/simpleGitHubOAuth.js +10 -8
  129. package/backend/dist/services/simpleGitHubOAuth.js.map +1 -1
  130. package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -1
  131. package/backend/dist/services/simpleHuggingFaceOAuth.js +11 -9
  132. package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -1
  133. package/backend/dist/services/systemSettingsService.d.ts.map +1 -1
  134. package/backend/dist/services/systemSettingsService.js +4 -2
  135. package/backend/dist/services/systemSettingsService.js.map +1 -1
  136. package/backend/dist/services/titleGenerationService.d.ts +55 -0
  137. package/backend/dist/services/titleGenerationService.d.ts.map +1 -0
  138. package/backend/dist/services/titleGenerationService.js +121 -0
  139. package/backend/dist/services/titleGenerationService.js.map +1 -0
  140. package/backend/dist/services/turnstileService.d.ts +13 -0
  141. package/backend/dist/services/turnstileService.d.ts.map +1 -0
  142. package/backend/dist/services/turnstileService.js +79 -0
  143. package/backend/dist/services/turnstileService.js.map +1 -0
  144. package/backend/dist/storage.d.ts +2 -22
  145. package/backend/dist/storage.d.ts.map +1 -1
  146. package/backend/dist/storage.js +22 -170
  147. package/backend/dist/storage.js.map +1 -1
  148. package/backend/dist/storageMappers.d.ts +82 -0
  149. package/backend/dist/storageMappers.d.ts.map +1 -0
  150. package/backend/dist/storageMappers.js +85 -0
  151. package/backend/dist/storageMappers.js.map +1 -0
  152. package/backend/dist/test-encryption.js +20 -18
  153. package/backend/dist/test-encryption.js.map +1 -1
  154. package/backend/dist/types/index.d.ts.map +1 -1
  155. package/backend/dist/types/index.js.map +1 -1
  156. package/backend/dist/utils/assistantBranching.d.ts +8 -0
  157. package/backend/dist/utils/assistantBranching.d.ts.map +1 -0
  158. package/backend/dist/utils/assistantBranching.js +30 -0
  159. package/backend/dist/utils/assistantBranching.js.map +1 -0
  160. package/backend/dist/utils/chatContext.d.ts +17 -0
  161. package/backend/dist/utils/chatContext.d.ts.map +1 -0
  162. package/backend/dist/utils/chatContext.js +82 -0
  163. package/backend/dist/utils/chatContext.js.map +1 -0
  164. package/backend/dist/utils/chatDocumentContext.d.ts +7 -0
  165. package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -0
  166. package/backend/dist/utils/chatDocumentContext.js +51 -0
  167. package/backend/dist/utils/chatDocumentContext.js.map +1 -0
  168. package/backend/dist/utils/logger.d.ts +12 -0
  169. package/backend/dist/utils/logger.d.ts.map +1 -0
  170. package/backend/dist/utils/logger.js +82 -0
  171. package/backend/dist/utils/logger.js.map +1 -0
  172. package/backend/dist/utils/ollamaLibrary.d.ts +17 -0
  173. package/backend/dist/utils/ollamaLibrary.d.ts.map +1 -0
  174. package/backend/dist/utils/ollamaLibrary.js +253 -0
  175. package/backend/dist/utils/ollamaLibrary.js.map +1 -0
  176. package/backend/dist/utils/ollamaStreaming.d.ts +19 -0
  177. package/backend/dist/utils/ollamaStreaming.d.ts.map +1 -0
  178. package/backend/dist/utils/ollamaStreaming.js +67 -0
  179. package/backend/dist/utils/ollamaStreaming.js.map +1 -0
  180. package/backend/dist/utils/pluginChatAdapter.d.ts +32 -0
  181. package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -0
  182. package/backend/dist/utils/pluginChatAdapter.js +308 -0
  183. package/backend/dist/utils/pluginChatAdapter.js.map +1 -0
  184. package/backend/dist/utils/pluginChatContext.d.ts +23 -0
  185. package/backend/dist/utils/pluginChatContext.d.ts.map +1 -0
  186. package/backend/dist/utils/pluginChatContext.js +77 -0
  187. package/backend/dist/utils/pluginChatContext.js.map +1 -0
  188. package/backend/dist/utils/pluginResponse.d.ts +6 -0
  189. package/backend/dist/utils/pluginResponse.d.ts.map +1 -0
  190. package/backend/dist/utils/pluginResponse.js +70 -0
  191. package/backend/dist/utils/pluginResponse.js.map +1 -0
  192. package/backend/dist/utils/pluginStreamAdapter.d.ts +16 -0
  193. package/backend/dist/utils/pluginStreamAdapter.d.ts.map +1 -0
  194. package/backend/dist/utils/pluginStreamAdapter.js +141 -0
  195. package/backend/dist/utils/pluginStreamAdapter.js.map +1 -0
  196. package/backend/dist/utils/pluginStreaming.d.ts +24 -0
  197. package/backend/dist/utils/pluginStreaming.d.ts.map +1 -0
  198. package/backend/dist/utils/pluginStreaming.js +106 -0
  199. package/backend/dist/utils/pluginStreaming.js.map +1 -0
  200. package/backend/dist/utils/pluginUpload.d.ts +8 -0
  201. package/backend/dist/utils/pluginUpload.d.ts.map +1 -0
  202. package/backend/dist/utils/pluginUpload.js +51 -0
  203. package/backend/dist/utils/pluginUpload.js.map +1 -0
  204. package/backend/dist/utils/pluginValidation.d.ts +9 -0
  205. package/backend/dist/utils/pluginValidation.d.ts.map +1 -0
  206. package/backend/dist/utils/pluginValidation.js +84 -0
  207. package/backend/dist/utils/pluginValidation.js.map +1 -0
  208. package/backend/dist/utils/pluginVariableValidation.d.ts +10 -0
  209. package/backend/dist/utils/pluginVariableValidation.d.ts.map +1 -0
  210. package/backend/dist/utils/pluginVariableValidation.js +80 -0
  211. package/backend/dist/utils/pluginVariableValidation.js.map +1 -0
  212. package/backend/dist/utils/websocketMessages.d.ts +26 -0
  213. package/backend/dist/utils/websocketMessages.d.ts.map +1 -0
  214. package/backend/dist/utils/websocketMessages.js +74 -0
  215. package/backend/dist/utils/websocketMessages.js.map +1 -0
  216. package/backend/dist/websocketServer.d.ts +3 -0
  217. package/backend/dist/websocketServer.d.ts.map +1 -0
  218. package/backend/dist/websocketServer.js +332 -0
  219. package/backend/dist/websocketServer.js.map +1 -0
  220. package/backend/package.json +2 -2
  221. package/frontend/dist/assets/index-Dc8Q4dJZ.css +1 -0
  222. package/frontend/dist/assets/index-ONn9VIq7.js +5 -0
  223. package/frontend/dist/assets/markdown-math-CYlHEDRF.css +1 -0
  224. package/frontend/dist/index.html +11 -10
  225. package/frontend/dist/js/ArtifactContainer-CqKsiKz0.js +1 -0
  226. package/frontend/dist/js/ArtifactDemoPage-Dd5BjIu2.js +200 -0
  227. package/frontend/dist/js/ArtifactSlideOutPanel-Yc7ttIaY.js +1 -0
  228. package/frontend/dist/js/Button-BUjLpHmR.js +1 -0
  229. package/frontend/dist/js/ChatPage-Cpy7lQ0D.js +16 -0
  230. package/frontend/dist/js/FirstTimeSetup-DcGhm0H0.js +1 -0
  231. package/frontend/dist/js/GalleryPage-DNI2Evvf.js +1 -0
  232. package/frontend/dist/js/LibreClawPage-CmTiROsJ.js +1 -0
  233. package/frontend/dist/js/ModelManagerModals-CfvSeNsT.js +1 -0
  234. package/frontend/dist/js/ModelsPage-CeTGqx4q.js +2 -0
  235. package/frontend/dist/js/OptimizedSyntaxHighlighter-CNjLqj1Z.js +1 -0
  236. package/frontend/dist/js/PersonasPage-BUqu7gJ3.js +13 -0
  237. package/frontend/dist/js/RichMessageContent-B0JO8vkR.js +3 -0
  238. package/frontend/dist/js/SettingsModal-B5aJ5vfV.js +1 -0
  239. package/frontend/dist/js/UserManagementPage-BqIIWX2M.js +1 -0
  240. package/frontend/dist/js/api-CbmZzKBu.js +15 -0
  241. package/frontend/dist/js/ar-BAOdgn6O.js +2 -0
  242. package/frontend/dist/js/artifactHtml-B7Oy2e__.js +27 -0
  243. package/frontend/dist/js/bn-Bp2KS5mx.js +2 -0
  244. package/frontend/dist/js/cs-DOgJ0c5p.js +2 -0
  245. package/frontend/dist/js/da-BCKTkC35.js +2 -0
  246. package/frontend/dist/js/de-BXyECph5.js +2 -0
  247. package/frontend/dist/js/demoMode-BhEpMVh5.js +1 -0
  248. package/frontend/dist/js/es-Db4bDYIF.js +2 -0
  249. package/frontend/dist/js/fr-BPIkf6zH.js +2 -0
  250. package/frontend/dist/js/hi-Bm8D_Aux.js +2 -0
  251. package/frontend/dist/js/id-DiWaH74_.js +2 -0
  252. package/frontend/dist/js/is-DLgJywtZ.js +2 -0
  253. package/frontend/dist/js/it-lldrM8pE.js +2 -0
  254. package/frontend/dist/js/ja-Cfe9uZmQ.js +2 -0
  255. package/frontend/dist/js/ko-BhChO3MQ.js +2 -0
  256. package/frontend/dist/js/logger-BmpKNkls.js +1 -0
  257. package/frontend/dist/js/markdown-core-fkbHPd-g.js +16 -0
  258. package/frontend/dist/js/markdown-math-Ci4QOsf-.js +261 -0
  259. package/frontend/dist/js/ms-SWtmetXo.js +2 -0
  260. package/frontend/dist/js/nl-CUO6I3nO.js +2 -0
  261. package/frontend/dist/js/pl-BUAu96P6.js +2 -0
  262. package/frontend/dist/js/pt-DCHwoWiE.js +2 -0
  263. package/frontend/dist/js/{react-vendor-Dh6nfvM2.js โ†’ react-vendor-Co1u1rWb.js} +2 -2
  264. package/frontend/dist/js/ru-Ciz053N7.js +2 -0
  265. package/frontend/dist/js/sv-D38ZHjv-.js +2 -0
  266. package/frontend/dist/js/syntax-highlight-D5wpTVgr.js +8 -0
  267. package/frontend/dist/js/th-D2cAucvn.js +2 -0
  268. package/frontend/dist/js/tr-Go355oDu.js +2 -0
  269. package/frontend/dist/js/ui-vendor-BJAeWL11.js +177 -0
  270. package/frontend/dist/js/uk-cdzjhgya.js +2 -0
  271. package/frontend/dist/js/useBaseQuery-6OJiOiyu.js +1 -0
  272. package/frontend/dist/js/useQuery-DfkI6VAv.js +1 -0
  273. package/frontend/dist/js/utils-BaPYjs_z.js +1 -0
  274. package/frontend/dist/js/utils-vendor-BX3ZwoIK.js +9 -0
  275. package/frontend/dist/js/vi-BSOpE423.js +2 -0
  276. package/frontend/dist/js/zh-BFh6sHZG.js +2 -0
  277. package/package.json +12 -8
  278. package/backend/dist/services/openclawSessionService.d.ts +0 -63
  279. package/backend/dist/services/openclawSessionService.d.ts.map +0 -1
  280. package/backend/dist/services/openclawSessionService.js +0 -307
  281. package/backend/dist/services/openclawSessionService.js.map +0 -1
  282. package/frontend/dist/assets/index-cOuIFv6G.js +0 -314
  283. package/frontend/dist/assets/index-tuVjvNle.css +0 -1
  284. package/frontend/dist/js/ArtifactContainer-DXa2t8GS.js +0 -24
  285. package/frontend/dist/js/ArtifactDemoPage-Dms7P2gI.js +0 -98
  286. package/frontend/dist/js/ChatPage-C6hOVIAS.js +0 -15
  287. package/frontend/dist/js/GalleryPage-CGKPECJV.js +0 -1
  288. package/frontend/dist/js/ModelsPage-CNB-c-JM.js +0 -1
  289. package/frontend/dist/js/PersonasPage-hDiS0Rvl.js +0 -13
  290. package/frontend/dist/js/UserManagementPage-1H9kcHeR.js +0 -1
  291. package/frontend/dist/js/api-MQ7bONaU.js +0 -3
  292. package/frontend/dist/js/appStore-BpzQfKOd.js +0 -2
  293. package/frontend/dist/js/authStore-Cn_WS6Kb.js +0 -2
  294. package/frontend/dist/js/demoMode-PKHbba1m.js +0 -1
  295. package/frontend/dist/js/markdown-vendor-DLzJCMRQ.js +0 -22
  296. package/frontend/dist/js/ui-vendor-ClcVY3m-.js +0 -177
  297. package/frontend/dist/js/utils-vendor-BCQRX-0Q.js +0 -9
  298. package/plugins/openclaw-agent.json +0 -69
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/authStore-Cn_WS6Kb.js","js/rolldown-runtime-QTnfLwEv.js","js/demoMode-PKHbba1m.js","js/appStore-BpzQfKOd.js","js/utils-vendor-BCQRX-0Q.js","js/markdown-vendor-DLzJCMRQ.js","js/ui-vendor-ClcVY3m-.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-QTnfLwEv.js";import{n as t,r as n}from"./demoMode-PKHbba1m.js";import{n as r}from"./utils-vendor-BCQRX-0Q.js";var i=window.location.protocol===`file:`?`http://localhost:3001/api`:`${window.location.origin}/api`,a=()=>{console.log(`๐Ÿš€ API_BASE_URL configured as:`,i),console.log(`๐ŸŒ Window location:`,window.location),console.log(`๐Ÿ”ง Environment variables:`,{BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_APP_VERSION:`0.10.0`})},o=e({authApi:()=>x,chatApi:()=>h,default:()=>m,documentsApi:()=>y,embeddingApi:()=>b,huggingfaceHubApi:()=>E,imageGenApi:()=>T,ollamaApi:()=>g,personaApi:()=>C,pluginApi:()=>_,preferencesApi:()=>v,ttsApi:()=>w,usersApi:()=>S});a(),console.log(`๐Ÿ“ฑ User agent:`,navigator.userAgent),console.log(`๐ŸŽญ Demo mode detected:`,t());var s=(e,t=!0)=>new Promise(n=>{setTimeout(()=>{n({success:t,data:e,error:t?void 0:`Demo mode: Backend not available`})},500)}),c=[{name:`llama3.2:3b`,size:2048e6,digest:`demo-digest-1`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`llama`,families:[`llama`],parameter_size:`3B`,quantization_level:`Q4_0`}},{name:`qwen2.5:7b`,size:4096e6,digest:`demo-digest-2`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`qwen`,families:[`qwen`],parameter_size:`7B`,quantization_level:`Q4_0`}}],l=()=>[{id:`demo-session-1`,title:`Demo Chat Session`,model:c[0].name,messages:[{id:`demo-msg-1`,role:`user`,content:`Hello! Can you tell me about this demo?`,timestamp:Date.now()},{id:`demo-msg-2`,role:`assistant`,content:`This is a demo of Libre WebUI! In a real deployment, I would be powered by Ollama running locally on your machine. This demo shows the beautiful interface and features without the backend connection.`,timestamp:Date.now()}],createdAt:Date.now(),updatedAt:Date.now()}],u=l(),d={theme:{mode:`dark`,accent:`violet`,customAccent:`#7c3aed`},defaultModel:`llama3.2:3b`,systemMessage:`You are a helpful assistant.`,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.7},showUsername:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}},f={...d,theme:{...d.theme},generationOptions:{...d.generationOptions},embeddingSettings:{...d.embeddingSettings},backgroundSettings:{...d.backgroundSettings}},p=e=>{let t=f.backgroundSettings||d.backgroundSettings;return f={...f,...e,theme:{...f.theme,...e.theme},generationOptions:{...f.generationOptions,...e.generationOptions},embeddingSettings:{...f.embeddingSettings,...e.embeddingSettings},backgroundSettings:e.backgroundSettings?{...t,...e.backgroundSettings}:f.backgroundSettings},f},m=r.create({baseURL:i,timeout:3e5});m.interceptors.request.use(e=>{let t=localStorage.getItem(`auth-token`);return t&&(e.headers.Authorization=`Bearer ${t}`),e},e=>Promise.reject(e)),m.interceptors.response.use(e=>e,e=>{if(e.response?.status===401){console.warn(`๐Ÿ”’ Session expired or unauthorized, logging out...`),localStorage.removeItem(`auth-token`),n(async()=>{let{useAuthStore:e}=await import(`./authStore-Cn_WS6Kb.js`).then(e=>e.t);return{useAuthStore:e}},__vite__mapDeps([0,1,2,3,4,5,6])).then(({useAuthStore:e})=>{e.getState().logout()});let e=window.location.protocol===`file:`;return(e?window.location.hash:window.location.pathname).includes(`/login`)||(window.location.href=e?`#/login`:`/login`),Promise.reject(Error(`Session expired`))}return console.error(`API Error:`,e),Promise.reject(e)});var h={getSessions:()=>m.get(`/chat/sessions`).then(e=>e.data),createSession:(e,t,n)=>m.post(`/chat/sessions`,{model:e,title:t,personaId:n}).then(e=>e.data),getSession:e=>{if(t()){let t=l().find(t=>t.id===e);return t?s(t):Promise.resolve({success:!1,error:`Session not found in demo mode`})}return m.get(`/chat/sessions/${e}`).then(e=>e.data)},updateSession:(e,n)=>{if(t()){let t=u.find(t=>t.id===e);return t?s({...t,...n,updatedAt:Date.now()}):Promise.resolve({success:!1,error:`Session not found in demo mode`})}return m.put(`/chat/sessions/${e}`,n).then(e=>e.data)},deleteSession:e=>t()?s(null):m.delete(`/chat/sessions/${e}`).then(e=>e.data),clearAllSessions:()=>m.delete(`/chat/sessions`).then(e=>e.data),generateTitle:(e,n,r)=>t()?s({title:r.substring(0,30)+(r.length>30?`...`:``)}):m.post(`/chat/sessions/${e}/generate-title`,{model:n,message:r}).then(e=>e.data),sendMessage:(e,t,n)=>m.post(`/chat/sessions/${e}/messages`,{content:t,options:n}).then(e=>e.data),saveMessage:(e,t)=>m.post(`/chat/sessions/${e}/messages`,t).then(e=>e.data),updateMessage:(e,n,r)=>t()?s({}):m.put(`/chat/sessions/${e}/messages/${n}`,r).then(e=>e.data),generateChatResponse:(e,t,n)=>m.post(`/chat/sessions/${e}/generate`,{message:t,options:n}).then(e=>e.data),generateChatStreamResponse:(e,t,n)=>({subscribe:async(r,a,o)=>{try{let s=await fetch(`${i}/chat/sessions/${e}/generate/stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({message:t,options:n})});if(!s.ok)throw Error(`HTTP error! status: ${s.status}`);let c=s.body?.getReader();if(!c)throw Error(`No response body reader available`);let l=new TextDecoder,u=``,d=()=>{c.read().then(({done:e,value:t})=>{if(e){o?.();return}u+=l.decode(t,{stream:!0});let n=u.split(`
3
- `);u=n.pop()||``;for(let e of n){let t=e.trim();if(t.startsWith(`data: `)){let e=t.slice(6);if(e===`[DONE]`){o?.();return}try{let t=JSON.parse(e);if(r(t),t.type===`done`||t.type===`error`){t.type===`error`?a?.(t.error):o?.();return}}catch(e){console.error(`Failed to parse SSE data:`,e)}}}d()}).catch(e=>{a?.(e instanceof Error?e:Error(String(e)))})};return d(),()=>c.cancel()}catch(e){return a?.(e instanceof Error?e:Error(String(e))),()=>{}}}}),getMessageBranches:(e,n)=>t()?s([]):m.get(`/chat/sessions/${e}/messages/${n}/branches`).then(e=>e.data),switchMessageBranch:(e,n,r)=>t()?s({}):m.post(`/chat/sessions/${e}/messages/${n}/branch`,{branchIndex:r}).then(e=>e.data),createMessageBranch:(e,n,r)=>t()?s({}):m.post(`/chat/sessions/${e}/messages/${n}/branches`,{...r}).then(e=>e.data)},g={checkHealth:()=>t()?s({status:`offline`},!1):m.get(`/ollama/health`).then(e=>e.data),getModels:()=>t()?s(c):m.get(`/ollama/models`).then(e=>e.data),pullModel:e=>t()?s(null,!1):m.post(`/ollama/models/pull`,{name:e}).then(e=>e.data),pullModelStream:(e,n,r,a)=>{if(t()){let e=0,t=setInterval(()=>{e+=Math.random()*20,e>=100?(e=100,n({status:`success`,total:100,completed:100,percent:100}),clearInterval(t),setTimeout(r,500)):n({status:`pulling`,total:100,completed:e,percent:Math.round(e)})},1e3);return()=>clearInterval(t)}let o=new URLSearchParams({model:e}),s=localStorage.getItem(`auth-token`);s&&o.set(`token`,s);let c=new EventSource(`${i}/ollama/pull/stream?${o.toString()}`);return c.onmessage=e=>{let t=JSON.parse(e.data);switch(t.type){case`progress`:n({status:t.status,digest:t.digest,total:t.total,completed:t.completed,percent:t.percent});break;case`complete`:c.close(),r();break;case`error`:c.close(),a(t.error);break}},c.onerror=()=>{c.close(),a(`Connection to server lost`)},()=>{c.close()}},deleteModel:e=>t()?s(null,!1):m.delete(`/ollama/models`,{params:{name:e}}).then(e=>e.data),showModel:(e,n=!1)=>{if(t()){let t=c.find(t=>t.name===e);return s(t||null,!!t)}return m.get(`/ollama/models/show`,{params:{name:e,verbose:n}}).then(e=>e.data)},createModel:e=>t()?s(null,!1):m.post(`/ollama/models`,e).then(e=>e.data),copyModel:(e,n)=>t()?s(null,!1):m.post(`/ollama/models/copy`,{source:e,destination:n}).then(e=>e.data),pushModel:e=>t()?s(null,!1):m.post(`/ollama/models/push`,{name:e}).then(e=>e.data),pullAllModels:()=>t()?s(null,!1):m.post(`/ollama/models/pull-all`).then(e=>e.data),pullAllModelsStream:(e,n,r)=>{if(t()){let t=c,r=0,i=setInterval(()=>{r++,r<=t.length&&e({current:r,total:t.length,modelName:t[r-1]?.name||`demo-model`,status:Math.random()>.1?`success`:`error`,error:Math.random()>.1?void 0:`Demo error`}),r>=t.length&&(clearInterval(i),setTimeout(n,500))},1e3);return}let a=new EventSource(`${i}/ollama/models/pull-all/stream`);a.onmessage=t=>{let i=JSON.parse(t.data);switch(i.type){case`progress`:e({current:i.current,total:i.total,modelName:i.modelName,status:i.status,error:i.error});break;case`complete`:a.close(),n();break;case`error`:a.close(),r(i.error);break}},a.onerror=()=>{a.close(),r(`Connection to server lost`)}},generateEmbeddings:e=>t()?s({embeddings:[[]]},!1):m.post(`/ollama/embed`,e).then(e=>e.data),listRunningModels:()=>t()?s([]):m.get(`/ollama/running`).then(e=>e.data),unloadModel:e=>t()?s(null):m.post(`/ollama/models/unload`,{name:e}).then(e=>e.data),unloadAllModels:()=>t()?s(null):m.post(`/ollama/models/unload-all`).then(e=>e.data),getVersion:()=>t()?s({version:`demo-mode`},!1):m.get(`/ollama/version`).then(e=>e.data),chatCompletion:e=>t()?s({message:{content:`Demo response`,role:`assistant`}},!1):m.post(`/ollama/chat`,e).then(e=>e.data),checkBlobExists:e=>t()?Promise.resolve(!1):m.head(`/ollama/blobs/${e}`).then(()=>!0).catch(()=>!1),pushBlob:(e,n)=>t()?s(null,!1):m.post(`/ollama/blobs/${e}`,n,{headers:{"Content-Type":`application/octet-stream`}}).then(e=>e.data),generateLegacyEmbeddings:e=>t()?s({embedding:[]},!1):m.post(`/ollama/embeddings`,e).then(e=>e.data),getLibraryModels:e=>{if(t())return s([{name:`llama3.2`,description:`Meta's latest Llama model`,category:`general`,sizes:[`1b`,`3b`],pulls:`50M+`,tags:[`general`]},{name:`deepseek-r1`,description:`Open reasoning model`,category:`reasoning`,sizes:[`7b`,`14b`,`32b`],pulls:`200M+`,tags:[`reasoning`]}]);let n=new URLSearchParams;e?.search&&n.set(`search`,e.search),e?.sort&&n.set(`sort`,e.sort),e?.category&&n.set(`category`,e.category);let r=n.toString();return m.get(`/ollama/library${r?`?${r}`:``}`).then(e=>e.data)}},_={getAllPlugins:()=>t()?s([]):m.get(`/plugins`).then(e=>e.data),uploadPlugin:e=>{if(t())return s({},!1);let n=new FormData;return n.append(`plugin`,e),m.post(`/plugins/upload`,n).then(e=>e.data)},installPlugin:e=>t()?s({},!1):m.post(`/plugins/install`,e).then(e=>e.data),updatePlugin:(e,n)=>t()?s({},!1):m.put(`/plugins/${e}`,n).then(e=>e.data),deletePlugin:e=>t()?s(void 0):m.delete(`/plugins/${e}`).then(e=>e.data),activatePlugin:e=>t()?s({},!1):m.post(`/plugins/activate/${e}`).then(e=>e.data),deactivatePlugin:e=>{if(t())return s(void 0);let n=e?`/plugins/deactivate/${e}`:`/plugins/deactivate`;return m.post(n).then(e=>e.data)},getActivePlugin:()=>t()?s(null):m.get(`/plugins/active`).then(e=>e.data),getPluginStatus:()=>t()?s([]):m.get(`/plugins/status`).then(e=>e.data),exportPlugin:e=>t()?Promise.resolve(new Blob([`{}`],{type:`application/json`})):m.get(`/plugins/${e}/export`,{responseType:`blob`}).then(e=>e.data),getCredentials:()=>t()?s([]):m.get(`/plugins/credentials/all`).then(e=>e.data),setApiKey:(e,n)=>t()?s(!1,!1):m.post(`/plugins/${e}/credentials`,{api_key:n}).then(e=>e.data),deleteApiKey:e=>t()?s(!1,!1):m.delete(`/plugins/${e}/credentials`).then(e=>e.data),checkApiKey:e=>t()?s(!1):m.get(`/plugins/${e}/credentials/check`).then(e=>e.data),getVariables:e=>t()?s({}):m.get(`/plugins/${e}/variables`).then(e=>e.data),setVariables:(e,n)=>t()?s(!0):m.put(`/plugins/${e}/variables`,{variables:n}).then(e=>e.data),resetVariables:e=>t()?s(!0):m.delete(`/plugins/${e}/variables`).then(e=>e.data)},v={getPreferences:()=>t()?s(f):m.get(`/preferences`).then(e=>e.data),updatePreferences:e=>t()?s(p(e)):m.put(`/preferences`,e).then(e=>e.data),setDefaultModel:e=>t()?s(p({defaultModel:e})):m.put(`/preferences/default-model`,{model:e}).then(e=>e.data),setSystemMessage:e=>t()?s(p({systemMessage:e})):m.put(`/preferences/system-message`,{message:e}).then(e=>e.data),setGenerationOptions:e=>t()?s(p({generationOptions:e})):m.put(`/preferences/generation-options`,e).then(e=>e.data),resetGenerationOptions:()=>t()?s(p({generationOptions:d.generationOptions})):m.post(`/preferences/generation-options/reset`).then(e=>e.data),setEmbeddingSettings:e=>t()?s(p({embeddingSettings:e})):m.put(`/preferences/embedding-settings`,e).then(e=>e.data),resetEmbeddingSettings:()=>t()?s(p({embeddingSettings:d.embeddingSettings})):m.post(`/preferences/embedding-settings/reset`).then(e=>e.data),importData:(e,n=`replace`)=>t()?s({theme:{mode:`dark`,accent:`violet`,customAccent:`#7c3aed`},defaultModel:`llama3.2`,systemMessage:`You are a helpful assistant.`,generationOptions:{},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.7},showUsername:!1}):m.post(`/preferences/import`,{data:e,mergeStrategy:n}).then(e=>e.data)},y={uploadDocument:(e,n)=>{if(t())return s({id:`demo-doc-`+Date.now(),filename:e.name,fileType:e.name.endsWith(`.pdf`)?`pdf`:`txt`,size:e.size,sessionId:n,uploadedAt:Date.now()});let r=new FormData;return r.append(`document`,e),n&&r.append(`sessionId`,n),m.post(`/documents/upload`,r).then(e=>e.data)},getDocuments:e=>{if(t())return s([]);let n=e?`/documents/session/${e}`:`/documents`;return m.get(n).then(e=>e.data)},getDocument:e=>t()?s({id:e,filename:`demo-document.pdf`,fileType:`pdf`,size:1024,content:`Demo document content...`,uploadedAt:Date.now()}):m.get(`/documents/${e}`).then(e=>e.data),searchDocuments:(e,n,r)=>t()?s([]):m.post(`/documents/search`,{query:e,sessionId:n,limit:r}).then(e=>e.data),deleteDocument:e=>t()?s(void 0):m.delete(`/documents/${e}`).then(e=>e.data),getEmbeddingStatus:()=>t()?s({available:!1,model:`nomic-embed-text`,chunksWithEmbeddings:0,totalChunks:0}):m.get(`/documents/embeddings/status`).then(e=>e.data),regenerateEmbeddings:()=>t()?s(void 0):m.post(`/documents/embeddings/regenerate`).then(e=>e.data)},b={getModels:()=>t()?s([{id:`nomic-embed-text`,name:`nomic-embed-text`,description:`Ollama - Default embedding model`,provider:`ollama`,dimensions:0,isDetectedEmbedding:!0}]):m.get(`/embeddings/models`).then(e=>e.data)},x={login:e=>t()?s({user:{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:!0,version:`0.1.0`}}):m.post(`/auth/login`,e).then(e=>e.data),signup:e=>t()?s({user:{id:`demo-user-new`,username:e.username,email:e.email||``,role:`user`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token-new`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:!0,version:`0.1.0`}}):m.post(`/auth/signup`,e).then(e=>e.data),logout:()=>t()?s(void 0):m.post(`/auth/logout`).then(e=>e.data),getSystemInfo:()=>(console.log(`getSystemInfo called, demo mode:`,t()),t()?s({requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:!0,version:`0.1.0`}):(console.log(`๐Ÿ” Making API call to:`,i+`/auth/system-info`),console.log(`๐ŸŒ Full URL from:`,window.location.origin,`-> API:`,i+`/auth/system-info`),m.get(`/auth/system-info`).then(e=>(console.log(`โœ… getSystemInfo response:`,e.data),e.data)).catch(e=>{throw console.error(`โŒ getSystemInfo error:`,e),e.response&&(console.error(`๐Ÿ“„ Error response data:`,e.response.data),console.error(`๐Ÿ”ข Error status:`,e.response.status),console.error(`๐Ÿ”ง Error headers:`,e.response.headers)),e.request&&console.error(`๐Ÿ“ก Network error - no response received:`,e.request),console.error(`๐ŸŽฏ Error config:`,e.config),e}))),verifyToken:()=>t()?s({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):m.get(`/auth/verify`).then(e=>e.data),getEncryptionKey:()=>t()?s({encryptionKey:`demo-encryption-key-not-real`}):m.get(`/auth/encryption-key`).then(e=>e.data),updateModelPullSetting:e=>t()?s({requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:e,version:`0.1.0`}):m.patch(`/auth/system-settings/model-pull`,{allowUserModelPull:e}).then(e=>e.data)},S={getUsers:()=>t()?s([{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}]):m.get(`/users`).then(e=>e.data),createUser:e=>t()?s({id:`new-user-`+Date.now(),username:e.username,email:e.email,role:e.role,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):m.post(`/users`,e).then(e=>e.data),updateUser:(e,n)=>t()?s({id:e,username:n.username||`demo`,email:n.email||`demo@example.com`,role:n.role||`user`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):m.patch(`/users/${e}`,n).then(e=>e.data),deleteUser:e=>t()?s(void 0):m.delete(`/users/${e}`).then(e=>e.data),updateMyAvatar:e=>t()?s({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,avatar:e,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):m.patch(`/users/me/avatar`,{avatar:e}).then(e=>e.data)},C={getPersonas:()=>t()?s([{id:`demo-1`,user_id:`default`,name:`Creative Assistant`,description:`Helpful assistant for creative tasks`,model:`llama3.3:latest`,parameters:{temperature:.8,top_p:.9,context_window:4096,system_prompt:`You are a creative and helpful assistant. Provide thoughtful and engaging responses.`},avatar:`/images/creative-avatar.png`,background:`/backgrounds/creative-bg.png`,created_at:Date.now()-864e5,updated_at:Date.now()-864e5},{id:`demo-2`,user_id:`default`,name:`Research Assistant`,description:`Academic assistant for research and learning`,model:`qwen3:7b`,parameters:{temperature:.3,top_p:.8,context_window:8192,system_prompt:`You are a knowledgeable research assistant. Provide detailed, informative explanations.`},created_at:Date.now()-1728e5,updated_at:Date.now()-1728e5}]):m.get(`/personas`).then(e=>e.data),getPersona:e=>t()?s({id:e,user_id:`default`,name:`Sample Assistant`,description:`A sample assistant for demonstration`,model:`llama3.2:latest`,parameters:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},created_at:Date.now(),updated_at:Date.now()}):m.get(`/personas/${e}`).then(e=>e.data),createPersona:e=>t()?s({id:`demo-`+Date.now(),user_id:`default`,...e,created_at:Date.now(),updated_at:Date.now()}):m.post(`/personas`,e).then(e=>e.data),updatePersona:(e,n)=>t()?s({id:e,user_id:`default`,name:n.name||`Updated Sample Assistant`,description:n.description,model:n.model||`llama3.2:latest`,parameters:n.parameters||{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},avatar:n.avatar,background:n.background,created_at:Date.now()-864e5,updated_at:Date.now()}):m.put(`/personas/${e}`,n).then(e=>e.data),deletePersona:e=>t()?s(void 0):m.delete(`/personas/${e}`).then(e=>e.data),exportPersona:e=>{if(t()){let e={name:`Sample Assistant`,description:`A sample assistant for demonstration`,model:`llama3.2:latest`,params:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},exportedAt:Date.now(),version:`1.0.0`};return Promise.resolve(e)}return m.get(`/personas/${e}/export`).then(e=>e.data)},importPersona:e=>t()?s({id:`demo-imported-`+Date.now(),user_id:`default`,name:e.name,description:e.description,model:e.model,parameters:e.params,avatar:e.avatar,background:e.background,created_at:Date.now(),updated_at:Date.now(),embedding_model:e.embedding_model,memory_settings:e.memory_settings,mutation_settings:e.mutation_settings}):m.post(`/personas/import`,e).then(e=>e.data),getPersonasCount:()=>t()?s({count:2}):m.get(`/personas/stats/count`).then(e=>e.data),getDefaultParameters:()=>t()?s({temperature:.7,top_p:.9,top_k:40,context_window:4096,max_tokens:1024,system_prompt:``,repeat_penalty:1.1,presence_penalty:0,frequency_penalty:0}):m.get(`/personas/defaults/parameters`).then(e=>e.data),getMemoryStatus:e=>t()?s({status:`active`,memory_count:42,last_backup:Date.now()-864e5,size_mb:2.3}):m.get(`/personas/${e}/memory/status`).then(e=>e.data),wipeMemories:e=>t()?s({deleted_count:42}):m.delete(`/personas/${e}/memory`).then(e=>e.data),backupPersona:e=>{if(t()){let t=JSON.stringify({persona_id:e,backup_date:new Date().toISOString(),data:`demo backup data`});return Promise.resolve(new Blob([t],{type:`application/json`}))}return m.get(`/personas/${e}/backup`,{responseType:`blob`}).then(e=>e.data)},exportPersonaDNA:e=>{if(t()){let t=JSON.stringify({persona_id:e,export_date:new Date().toISOString(),dna:`demo DNA data`,memories:[],learned_behaviors:{}});return Promise.resolve(new Blob([t],{type:`application/json`}))}return m.get(`/personas/${e}/export/dna`,{responseType:`blob`}).then(e=>e.data)},importPersonaDNA:e=>{if(t())return s({id:`demo-dna-`+Date.now(),user_id:`default`,name:`Imported Persona`,description:`Persona imported from DNA`,model:`llama3.2:latest`,parameters:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},created_at:Date.now(),updated_at:Date.now()});let n=new FormData;return n.append(`dnaFile`,e),m.post(`/personas/import/dna`,n).then(e=>e.data)},downloadPersona:async(e,t)=>{try{let n=await C.exportPersona(e),r=new Blob([JSON.stringify(n,null,2)],{type:`application/json`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=`${t}.json`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}catch(e){throw console.error(`Error while downloading persona:`,e),Error(`Failed to download persona: ${e instanceof Error?e.message:String(e)}`)}}},w={getModels:()=>t()?s([{model:`tts-1`,plugin:`openai`,config:{voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`,formats:[`mp3`,`opus`,`aac`,`flac`,`wav`],default_format:`mp3`,max_characters:4096}}]):m.get(`/tts/models`).then(e=>e.data),getPlugins:()=>t()?s([{id:`openai`,name:`OpenAI GPT`,models:[`tts-1`,`tts-1-hd`],config:{voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`}}]):m.get(`/tts/plugins`).then(e=>e.data),getVoices:e=>t()?s({voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`,formats:[`mp3`,`opus`,`aac`,`flac`,`wav`],default_format:`mp3`,max_characters:4096,supports_streaming:!1}):m.get(`/tts/voices/${e}`).then(e=>e.data),generateBase64:e=>t()?s({audio:``,format:e.response_format||`mp3`,mimeType:`audio/mpeg`,size:0}):m.post(`/tts/generate-base64`,e).then(e=>e.data),generate:async e=>t()?new Blob([],{type:`audio/mpeg`}):(await m.post(`/tts/generate`,e,{responseType:`blob`})).data,speak:async(e,t={})=>{try{t.onStart?.();let n=await w.generateBase64({model:t.model||`tts-1`,input:e,voice:t.voice,speed:t.speed,response_format:`mp3`});if(!n.success||!n.data?.audio)throw Error(n.message||`Failed to generate speech`);let r=`data:${n.data.mimeType};base64,${n.data.audio}`,i=new Audio(r);return i.onended=()=>t.onEnd?.(),i.onerror=()=>t.onError?.(Error(`Audio playback failed`)),await i.play(),i}catch(e){let n=e instanceof Error?e:Error(`Unknown error`);return t.onError?.(n),null}}},T={getModels:()=>t()?s([{model:`dall-e-3`,plugin:`openai`,config:{sizes:[`1024x1024`,`1792x1024`,`1024x1792`],default_size:`1024x1024`,qualities:[`standard`,`hd`],default_quality:`standard`,styles:[`vivid`,`natural`],default_style:`vivid`,max_prompt_length:4e3}}]):m.get(`/image-gen/models`).then(e=>e.data),getPlugins:()=>t()?s([{id:`openai`,name:`OpenAI DALL-E`,models:[`dall-e-3`,`dall-e-2`],config:{sizes:[`1024x1024`,`1792x1024`,`1024x1792`],default_size:`1024x1024`,qualities:[`standard`,`hd`],default_quality:`standard`}}]):m.get(`/image-gen/plugins`).then(e=>e.data),getConfig:e=>t()?s({sizes:[`1024x1024`,`1792x1024`,`1024x1792`],default_size:`1024x1024`,qualities:[`standard`,`hd`],default_quality:`standard`,styles:[`vivid`,`natural`],default_style:`vivid`,max_prompt_length:4e3}):m.get(`/image-gen/config/${e}`).then(e=>e.data),generate:e=>t()?s({images:[{url:`https://placehold.co/1024x1024/purple/white?text=Demo+Image`,revised_prompt:e.prompt}]}):m.post(`/image-gen/generate`,e).then(e=>e.data),getGallery:e=>t()?s({images:[],total:0}):m.get(`/image-gen/gallery`,{params:e}).then(e=>e.data),getGalleryImage:e=>t()?s({id:e,userId:`demo`,prompt:`Demo image prompt`,model:`dall-e-3`,imageData:`https://placehold.co/1024x1024/purple/white?text=Demo`,createdAt:Date.now()}):m.get(`/image-gen/gallery/${e}`).then(e=>e.data),deleteGalleryImage:e=>t()?s(void 0):m.delete(`/image-gen/gallery/${e}`).then(e=>e.data)},E={getModels:e=>t()?s([{id:`meta-llama/Llama-3.3-70B-Instruct`,modelId:`meta-llama/Llama-3.3-70B-Instruct`,author:`meta-llama`,downloads:1e6,likes:5e3,tags:[`text-generation`,`llama`],pipeline_tag:`text-generation`,gated:!1}]):m.get(`/huggingface-hub/models`,{params:e}).then(e=>e.data),getTrending:e=>t()?s([]):m.get(`/huggingface-hub/trending`,{params:e}).then(e=>e.data),getModel:(e,n)=>t()?s({id:`${e}/${n}`,modelId:`${e}/${n}`,author:e,downloads:0,likes:0,tags:[],gated:!1}):m.get(`/huggingface-hub/models/${e}/${n}`).then(e=>e.data),getTasks:()=>t()?s([`text-generation`,`text-to-speech`,`text-to-image`]):m.get(`/huggingface-hub/tasks`).then(e=>e.data),clearCache:()=>t()?s(!0):m.post(`/huggingface-hub/cache/clear`).then(e=>e.data),getGgufFiles:(e,n)=>t()?s([{filename:`model-Q4_K_M.gguf`,size:45e8,sizeFormatted:`4.19 GB`,quantization:`Q4_K_M`,url:`https://huggingface.co/${e}/${n}/resolve/main/model-Q4_K_M.gguf`,ollamaCommand:`hf.co/${e}/${n}:Q4_K_M`}]):m.get(`/huggingface-hub/models/${e}/${n}/gguf`).then(e=>e.data),hasGgufFiles:(e,n)=>t()?s({hasGguf:!1,count:0}):m.get(`/huggingface-hub/models/${e}/${n}/has-gguf`).then(e=>e.data)};export{b as a,g as c,v as d,w as f,y as i,C as l,i as m,x as n,E as o,S as p,h as r,T as s,o as t,_ as u};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-MQ7bONaU.js","js/rolldown-runtime-QTnfLwEv.js","js/demoMode-PKHbba1m.js","js/utils-vendor-BCQRX-0Q.js","js/markdown-vendor-DLzJCMRQ.js"])))=>i.map(i=>d[i]);
2
- import{n as e,r as t,t as n}from"./demoMode-PKHbba1m.js";import{a as r,i,o as a,r as o}from"./utils-vendor-BCQRX-0Q.js";function s(...e){return r(a(e))}function c(e){let t=new Date(e),n=new Date().getTime()-t.getTime(),r=Math.floor(n/(1e3*60)),i=Math.floor(n/(1e3*60*60)),a=Math.floor(n/(1e3*60*60*24));return r<1?`Just now`:r<60?`${r}m ago`:i<24?`${i}h ago`:a<7?`${a}d ago`:t.toLocaleDateString()}function l(){return Math.random().toString(36).substring(2)+Date.now().toString(36)}function u(e,t){return e.length<=t?e:e.substring(0,t)+`...`}function d(e){let t=/^\[Thinking:\s*([\s\S]*?)\]\s*/i,n=/^<thinking>([\s\S]*?)<\/thinking>\s*/i,r=e.match(t);if(r)return{thinking:r[1].trim(),content:e.slice(r[0].length).trim()};let i=e.match(n);return i?{thinking:i[1].trim(),content:e.slice(i[0].length).trim()}:{thinking:null,content:e}}var f=`violet`,p=`#7c3aed`,m=[{id:`violet`,label:`Violet`,color:`#7c3aed`},{id:`blue`,label:`Blue`,color:`#2563eb`},{id:`cyan`,label:`Cyan`,color:`#0e7490`},{id:`teal`,label:`Teal`,color:`#0f766e`},{id:`emerald`,label:`Emerald`,color:`#15803d`},{id:`amber`,label:`Amber`,color:`#b45309`},{id:`rose`,label:`Rose`,color:`#e11d48`},{id:`slate`,label:`Slate`,color:`#475569`}],h=[`50`,`100`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`900`,`950`],g={violet:{50:`#f5f3ff`,100:`#ede9fe`,200:`#ddd6fe`,300:`#c4b5fd`,400:`#a78bfa`,500:`#7c3aed`,600:`#6d28d9`,700:`#5b21b6`,800:`#4c1d95`,900:`#3b0764`,950:`#2e1065`},blue:{50:`#eff6ff`,100:`#dbeafe`,200:`#bfdbfe`,300:`#93c5fd`,400:`#60a5fa`,500:`#2563eb`,600:`#1d4ed8`,700:`#1e40af`,800:`#1e3a8a`,900:`#172554`,950:`#0f172a`},cyan:{50:`#ecfeff`,100:`#cffafe`,200:`#a5f3fc`,300:`#67e8f9`,400:`#22d3ee`,500:`#0e7490`,600:`#155e75`,700:`#164e63`,800:`#083344`,900:`#092f3f`,950:`#062634`},teal:{50:`#f0fdfa`,100:`#ccfbf1`,200:`#99f6e4`,300:`#5eead4`,400:`#2dd4bf`,500:`#0f766e`,600:`#0f625d`,700:`#115e59`,800:`#134e4a`,900:`#042f2e`,950:`#022c22`},emerald:{50:`#ecfdf5`,100:`#d1fae5`,200:`#a7f3d0`,300:`#6ee7b7`,400:`#34d399`,500:`#15803d`,600:`#166534`,700:`#14532d`,800:`#064e3b`,900:`#052e16`,950:`#022c22`},amber:{50:`#fffbeb`,100:`#fef3c7`,200:`#fde68a`,300:`#fcd34d`,400:`#f59e0b`,500:`#b45309`,600:`#92400e`,700:`#78350f`,800:`#5f2c0b`,900:`#451a03`,950:`#2f1200`},rose:{50:`#fff1f2`,100:`#ffe4e6`,200:`#fecdd3`,300:`#fda4af`,400:`#fb7185`,500:`#e11d48`,600:`#be123c`,700:`#9f1239`,800:`#881337`,900:`#4c0519`,950:`#2d0714`},slate:{50:`#f8fafc`,100:`#f1f5f9`,200:`#e2e8f0`,300:`#cbd5e1`,400:`#94a3b8`,500:`#475569`,600:`#334155`,700:`#1e293b`,800:`#0f172a`,900:`#020617`,950:`#010313`}},_={50:97,100:94,200:88,300:76,400:64,500:42,600:34,700:27,800:21,900:16,950:10},v=(e,t,n)=>Math.min(Math.max(e,t),n),y=e=>{if(!e)return null;let t=e.trim().match(/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i);if(!t)return null;let n=t[1];return`#${(n.length===3?n.split(``).map(e=>`${e}${e}`).join(``):n).toLowerCase()}`},b=e=>{let t=y(e)||`#7c3aed`,n=parseInt(t.slice(1),16);return{r:n>>16&255,g:n>>8&255,b:n&255}},x=(e,t,n)=>`#${[e,t,n].map(e=>v(Math.round(e),0,255).toString(16).padStart(2,`0`)).join(``)}`,S=(e,t,n)=>{let r=e/255,i=t/255,a=n/255,o=Math.max(r,i,a),s=Math.min(r,i,a),c=(o+s)/2;if(o===s)return{h:0,s:0,l:c*100};let l=o-s,u=c>.5?l/(2-o-s):l/(o+s),d=0;return d=o===r?(i-a)/l+(i<a?6:0):o===i?(a-r)/l+2:(r-i)/l+4,{h:d*60,s:u*100,l:c*100}},C=(e,t,n)=>{let r=v(t,0,100)/100,i=v(n,0,100)/100,a=(1-Math.abs(2*i-1))*r,o=(e%360+360)%360,s=a*(1-Math.abs(o/60%2-1)),c=i-a/2,l=0,u=0,d=0;return o<60?(l=a,u=s):o<120?(l=s,u=a):o<180?(u=a,d=s):o<240?(u=s,d=a):o<300?(l=s,d=a):(l=a,d=s),x((l+c)*255,(u+c)*255,(d+c)*255)},w=e=>{let{r:t,g:n,b:r}=b(e),i=[t,n,r].map(e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4});return i[0]*.2126+i[1]*.7152+i[2]*.0722},T=(e,t)=>{let n=w(e),r=w(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)},E=(e,t,n)=>{let r=n,i=C(e,t,r);for(;T(`#ffffff`,i)<4.5&&r>12;)r-=2,i=C(e,t,r);return i},D=e=>{let{r:t,g:n,b:r}=b(y(e)||`#7c3aed`),{h:i,s:a}=S(t,n,r),o=a<8?a:v(a,42,88);return h.reduce((e,t)=>{let n=_[t],r=Number(t)<300?o*.72:o;return e[t]=t===`500`||t===`600`?E(i,r,n):C(i,r,n),e},{})},O=e=>{let t=e?.mode===`dark`?`dark`:`light`,n=e?.accent===`custom`?`custom`:e?.accent,r=m.some(e=>e.id===n)?n:f,i=y(e?.customAccent)||`#7c3aed`;return{mode:t,accent:n===`custom`?`custom`:r,customAccent:i}},k=e=>{let t=O(e);return t.accent===`custom`?D(t.customAccent):g[t.accent||`violet`]},A=e=>{let t=O(e);return t.accent===`custom`?t.customAccent||`#7c3aed`:m.find(e=>e.id===t.accent)?.color||`#7c3aed`},j=e=>{if(typeof document>`u`)return;let t=O(e),n=document.documentElement,r=k(t);n.classList.remove(`dark`,`ophelia`),t.mode===`dark`&&n.classList.add(`dark`),n.style.colorScheme=t.mode,n.dataset.accent=t.accent||`violet`;for(let e of h){let{r:t,g:i,b:a}=b(r[e]),o=`${t} ${i} ${a}`;n.style.setProperty(`--color-primary-${e}`,o),n.style.setProperty(`--color-accent-${e}`,o)}},M=i()(o((r,i)=>({theme:{mode:`light`,accent:f,customAccent:p},setTheme:e=>{let t=O(e);r(e=>({theme:t,preferences:{...e.preferences,theme:t}})),j(t)},toggleTheme:()=>{let e=i().theme,t=e.mode===`dark`?`light`:`dark`;i().setTheme({...e,mode:t})},sidebarOpen:!0,sidebarCompact:!1,setSidebarOpen:e=>r({sidebarOpen:e}),setSidebarCompact:e=>r({sidebarCompact:e}),toggleSidebar:()=>r(e=>({sidebarOpen:!e.sidebarOpen})),toggleSidebarCompact:()=>r(e=>({sidebarCompact:!e.sidebarCompact})),artifactPanelOpen:!1,artifactPanelArtifact:null,openArtifactPanel:e=>r({artifactPanelOpen:!0,artifactPanelArtifact:e}),closeArtifactPanel:()=>r({artifactPanelOpen:!1,artifactPanelArtifact:null}),preferences:{theme:{mode:`light`,accent:f,customAccent:p},defaultModel:``,systemMessage:``,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.3},titleSettings:{autoTitle:!1,taskModel:``},showUsername:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}},setPreferences:e=>{let t=e.theme?O(e.theme):null;r(n=>({...t&&{theme:t},preferences:{...n.preferences,...e,...t&&{theme:t}}})),t&&j(t)},loadPreferences:async()=>{try{let{preferencesApi:e}=await t(async()=>{let{preferencesApi:e}=await import(`./api-MQ7bONaU.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4])),n=await e.getPreferences();if(n.success&&n.data){let e=n.data;i().setPreferences(e),r({backgroundImage:e.backgroundSettings?.imageUrl||null})}}catch(e){console.warn(`Failed to load preferences from backend:`,e)}},isGenerating:!1,setIsGenerating:e=>r({isGenerating:e}),hasSeenSettingsNotification:!1,markSettingsNotificationAsSeen:()=>r({hasSeenSettingsNotification:!0}),isDemoMode:e(),demoConfig:n(),setDemoMode:e=>{r({isDemoMode:e,demoConfig:n()})},backgroundImage:null,setBackgroundImage:async e=>{if(r({backgroundImage:e}),e){let n=i(),r={...n.preferences,backgroundSettings:{enabled:!0,imageUrl:e,blurAmount:n.preferences.backgroundSettings?.blurAmount||10,opacity:n.preferences.backgroundSettings?.opacity||.6}};n.setPreferences(r);try{let{preferencesApi:e}=await t(async()=>{let{preferencesApi:e}=await import(`./api-MQ7bONaU.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4]));await e.updatePreferences({backgroundSettings:r.backgroundSettings})}catch(e){console.warn(`Failed to save background settings to backend:`,e)}}},uploadBackgroundImage:async e=>{try{let t=new FileReader;return new Promise((n,r)=>{t.onload=async e=>{try{let t=e.target?.result;await i().setBackgroundImage(t),n()}catch(e){r(e)}},t.onerror=r,t.readAsDataURL(e)})}catch(e){throw console.error(`Failed to upload background image:`,e),e}},removeBackgroundImage:async()=>{r({backgroundImage:null});let e=i(),n={enabled:!1,imageUrl:``,blurAmount:e.preferences.backgroundSettings?.blurAmount||10,opacity:e.preferences.backgroundSettings?.opacity||.6};e.setPreferences({backgroundSettings:n});try{let{preferencesApi:e}=await t(async()=>{let{preferencesApi:e}=await import(`./api-MQ7bONaU.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4]));await e.updatePreferences({backgroundSettings:n})}catch(e){console.warn(`Failed to save background removal to backend:`,e)}},clearUserState:()=>{let e=O({mode:`light`,accent:f,customAccent:p});r({theme:e,backgroundImage:null,preferences:{theme:e,defaultModel:``,systemMessage:``,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.3},titleSettings:{autoTitle:!1,taskModel:``},showUsername:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}}}),j(e)}}),{name:`libre-webui-app-state`,onRehydrateStorage:()=>e=>{e&&e.setTheme(O(e.theme))},partialize:e=>{let{backgroundSettings:t,...n}=e.preferences;return{theme:e.theme,sidebarOpen:e.sidebarOpen,sidebarCompact:e.sidebarCompact,preferences:n,hasSeenSettingsNotification:e.hasSeenSettingsNotification}}}));typeof window<`u`&&(()=>{let{theme:e,setTheme:t}=M.getState();t(e)})();export{O as a,l as c,A as i,d as l,m as n,s as o,p as r,c as s,M as t,u};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-MQ7bONaU.js","js/rolldown-runtime-QTnfLwEv.js","js/demoMode-PKHbba1m.js","js/utils-vendor-BCQRX-0Q.js","js/markdown-vendor-DLzJCMRQ.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-QTnfLwEv.js";import{n as t,r as n}from"./demoMode-PKHbba1m.js";import{Lt as r}from"./ui-vendor-ClcVY3m-.js";import{i,r as a}from"./utils-vendor-BCQRX-0Q.js";import{c as o,t as s}from"./appStore-BpzQfKOd.js";import{c,d as l,l as u,r as d,u as f}from"./api-MQ7bONaU.js";var p=i((e,t)=>({plugins:[],pluginStatus:[],pluginVariables:{},isLoading:!1,isUploading:!1,error:null,loadPlugins:async()=>{e({isLoading:!0,error:null});try{let t=await f.getAllPlugins();t.success&&t.data?e({plugins:t.data}):e({error:t.error||`Failed to load plugins`})}catch(t){e({error:t instanceof Error?t.message:`Failed to load plugins`})}finally{e({isLoading:!1})}},uploadPlugin:async n=>{e({isUploading:!0,error:null});try{let r=await f.uploadPlugin(n);r.success&&r.data?await t().loadPlugins():e({error:r.error||`Failed to upload plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to upload plugin`})}finally{e({isUploading:!1})}},installPlugin:async n=>{e({isLoading:!0,error:null});try{let r=await f.installPlugin(n);r.success&&r.data?await t().loadPlugins():e({error:r.error||`Failed to install plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to install plugin`})}finally{e({isLoading:!1})}},updatePlugin:async(n,r)=>{e({isLoading:!0,error:null});try{let i=await f.updatePlugin(n,r);i.success&&i.data?await t().loadPlugins():e({error:i.error||`Failed to update plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to update plugin`})}finally{e({isLoading:!1})}},deletePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await f.deletePlugin(n);r.success?await t().loadPlugins():e({error:r.error||`Failed to delete plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to delete plugin`})}finally{e({isLoading:!1})}},activatePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await f.activatePlugin(n);r.success?await t().loadPlugins():e({error:r.error||`Failed to activate plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to activate plugin`})}finally{e({isLoading:!1})}},deactivatePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await f.deactivatePlugin(n);r.success?await t().loadPlugins():e({error:r.error||`Failed to deactivate plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to deactivate plugin`})}finally{e({isLoading:!1})}},loadPluginStatus:async()=>{try{let t=await f.getPluginStatus();t.success&&t.data&&e({pluginStatus:t.data})}catch(e){console.error(`Failed to load plugin status:`,e)}},exportPlugin:async t=>{e({isLoading:!0,error:null});try{let e=await f.exportPlugin(t),n=window.URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=`${t}.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r),window.URL.revokeObjectURL(n)}catch(t){e({error:t instanceof Error?t.message:`Failed to export plugin`})}finally{e({isLoading:!1})}},fetchPluginVariables:async t=>{try{let n=await f.getVariables(t);n.success&&n.data&&e(e=>({pluginVariables:{...e.pluginVariables,[t]:n.data}}))}catch(e){console.error(`Failed to fetch plugin variables:`,e)}},updatePluginVariables:async(e,n)=>{try{return(await f.setVariables(e,n)).success?(await t().fetchPluginVariables(e),!0):!1}catch(e){return console.error(`Failed to update plugin variables:`,e),!1}},resetPluginVariables:async t=>{try{(await f.resetVariables(t)).success&&e(e=>{let n={...e.pluginVariables};return delete n[t],{pluginVariables:n}})}catch(e){console.error(`Failed to reset plugin variables:`,e)}},clearError:()=>e({error:null}),setError:t=>e({error:t})})),m=(e,t)=>{if(e&&typeof e==`object`&&`response`in e){let t=e;if(t.response?.data?.error)return t.response.data.error}return e instanceof Error?e.message:t},h=i((e,t)=>({sessions:[],currentSession:null,setCurrentSession:t=>{e({currentSession:t})},createSession:async(t,n,i)=>{try{e({loading:!0,error:null});let a=await d.createSession(t,n,i);if(a.success&&a.data){let t=a.data;return e(e=>({sessions:[t,...e.sessions],currentSession:t,loading:!1})),r.success(`New chat created`),t}}catch(t){let n=m(t,`Failed to create session`);e({error:n,loading:!1}),r.error(n)}},loadSessions:async()=>{try{e({loading:!0,error:null});let t=await d.getSessions();t.success&&t.data&&e(e=>{let n=t.data||[],r=n.map(e=>e.id),i=null;return e.currentSession&&r.includes(e.currentSession.id)?i=n.find(t=>t.id===e.currentSession.id)||null:n.length>0&&(i=n[0],e.currentSession&&console.warn(`Previous currentSession not found in backend sessions:`,e.currentSession.id)),{sessions:n,currentSession:i,loading:!1}})}catch(t){let n=m(t,`Failed to load sessions`);e({error:n,loading:!1}),r.error(n)}},deleteSession:async t=>{try{let n=await d.deleteSession(t);n.success?(e(e=>{let n=e.sessions.filter(e=>e.id!==t),r=e.currentSession?.id===t?n[0]||null:e.currentSession;return console.log(`Store: Updating state, sessions count:`,n.length),{sessions:n,currentSession:r}}),r.success(`Chat deleted`)):(console.error(`Store: deleteSession failed:`,n),r.error(`Failed to delete chat`))}catch(e){console.error(`Store: deleteSession error:`,e);let t=m(e,`Failed to delete session`);r.error(t)}},clearAllSessions:async()=>{try{e({loading:!0,error:null});let t=await d.clearAllSessions();t.success?(e({sessions:[],currentSession:null,loading:!1}),r.success(`All chat history cleared`)):(console.error(`Store: clearAllSessions failed:`,t),r.error(`Failed to clear chat history`),e({loading:!1}))}catch(t){console.error(`Store: clearAllSessions error:`,t);let n=m(t,`Failed to clear chat history`);r.error(n),e({loading:!1})}},clearAllState:()=>{e({sessions:[],currentSession:null,models:[],selectedModel:``,systemMessage:``,loading:!1,error:null})},updateSessionTitle:async(t,n)=>{try{let i=await d.updateSession(t,{title:n});i.success&&i.data&&(e(e=>({sessions:e.sessions.map(e=>e.id===t?i.data:e),currentSession:e.currentSession?.id===t?i.data:e.currentSession})),r.success(`Chat title updated`))}catch(e){let t=m(e,`Failed to update session`);r.error(t)}},addMessage:(n,i)=>{let a=t(),s=a.currentSession?.isPrivate&&a.currentSession?.id===n;if(!a.currentSession||!s&&!a.sessions.find(e=>e.id===a.currentSession?.id)){r.error(`No valid chat session. Please create or select a chat.`),console.error(`addMessage blocked: currentSession is not valid`,a.currentSession?.id);return}if(!s&&!a.sessions.find(e=>e.id===n)){r.error(`Session not found or invalid. Please select or create a valid chat session.`),console.error(`addMessage blocked: sessionId not found in sessions`,n);return}let c={...i,id:i.id||o(),timestamp:Date.now()};e(e=>{if(e.currentSession?.isPrivate&&e.currentSession?.id===n)return e.currentSession.messages.find(e=>e.id===c.id)?e:{...e,currentSession:{...e.currentSession,messages:[...e.currentSession.messages,c],updatedAt:Date.now()}};let t=e.sessions.find(e=>e.id===n);if(t&&t.messages.find(e=>e.id===c.id))return e;let r=e.sessions.map(e=>{if(e.id===n){let t=[...e.messages];if(c.parentId){let e=c.parentId;t=t.map(t=>t.id===e||t.parentId===e?{...t,isActive:!1,branchIndex:t.branchIndex??0,siblingCount:(c.branchIndex||0)+1}:t)}return t.push(c),{...e,messages:t,updatedAt:Date.now()}}return e});return{sessions:r,currentSession:e.currentSession?.id===n&&r.find(e=>e.id===n)||e.currentSession}})},updateMessage:(t,n,r)=>{e(e=>{if(e.currentSession?.id!==t)return e;if(e.currentSession?.isPrivate){let t=e.currentSession.messages.find(e=>e.id===n);if(!t||t.content===r)return e;let i=e.currentSession.messages.map(e=>e.id===n?{...e,content:r}:e);return{...e,currentSession:{...e.currentSession,messages:i,updatedAt:Date.now()}}}let i=e.sessions.find(e=>e.id===t);if(!i)return e;let a=i.messages.find(e=>e.id===n);if(!a||a.content===r)return e;let o=e.sessions.map(e=>{if(e.id===t){let t=e.messages.map(e=>e.id===n?{...e,content:r}:e);return{...e,messages:t,updatedAt:Date.now()}}return e});return{sessions:o,currentSession:e.currentSession?.id===t&&o.find(e=>e.id===t)||e.currentSession}})},updateMessageWithStatistics:(t,n,r,i)=>{e(e=>{if(e.currentSession?.id!==t)return e;if(e.currentSession?.isPrivate){let t=e.currentSession.messages.map(e=>e.id===n?{...e,content:r,statistics:i}:e);return{...e,currentSession:{...e.currentSession,messages:t,updatedAt:Date.now()}}}let a=e.sessions.map(e=>{if(e.id===t){let t=e.messages.map(e=>e.id===n?{...e,content:r,statistics:i}:e);return{...e,messages:t,updatedAt:Date.now()}}return e});return{sessions:a,currentSession:e.currentSession&&e.currentSession.id===t&&a.find(e=>e.id===t)||e.currentSession}})},models:[],loadModels:async()=>{try{e({loading:!0,error:null}),console.log(`Loading models from API...`);let i=await c.getModels(),a=[];i.success&&i.data&&(a=[...i.data],console.log(`Ollama models loaded:`,i.data.length));try{let e=await f.getAllPlugins();if(e.success&&e.data){let t=e.data.filter(e=>e.active&&e.type!==`tts`&&e.type!==`image`);console.log(`๐Ÿ”Œ Active plugins found:`,t.map(e=>e.name));for(let e of t)if(e.model_map){let t=e.model_map.map(t=>({name:t,model:t,size:0,digest:``,details:{parent_model:``,format:``,family:``,families:[],parameter_size:``,quantization_level:``},modified_at:new Date().toISOString(),expires_at:new Date().toISOString(),size_vram:0,isPlugin:!0,pluginName:e.name}));a.push(...t),console.log(`Plugin models added:`,t.length,`from`,e.name)}}}catch(e){console.error(`โŒ Failed to load plugin models:`,e),e instanceof Error&&console.error(`โŒ Plugin error details:`,{message:e.message,response:e.response?.data,status:e.response?.status,url:e.config?.url})}try{let{personaApi:t}=await n(async()=>{let{personaApi:e}=await import(`./api-MQ7bONaU.js`).then(e=>e.t);return{personaApi:e}},__vite__mapDeps([0,1,2,3,4])),r=await t.getPersonas();if(r.success&&r.data){let t=r.data.reduce((e,t)=>(e[t.id]=t,e),{}),n=r.data.map(e=>({name:`persona:${e.id}`,model:e.model,size:0,digest:``,details:{parent_model:e.model,format:`persona`,family:`persona`,families:[`persona`],parameter_size:``,quantization_level:``},modified_at:new Date(e.updated_at).toISOString(),expires_at:new Date().toISOString(),size_vram:0,isPersona:!0,personaName:e.name,personaDescription:e.description}));a.push(...n),e(e=>({...e,personas:t}))}}catch(e){console.error(`โŒ Failed to load personas:`,e)}console.log(`Total models loaded:`,a.length);let o=t().selectedModel,s=a.some(e=>e.name===o);if(o&&!s&&a.length>0){let t=a[0].name;console.log(`โš ๏ธ Selected model "${o}" no longer available, falling back to "${t}"`),e({models:a,loading:!1,selectedModel:t}),r.success(`Switched to ${t} (previous model no longer available)`)}else e({models:a,loading:!1})}catch(t){console.error(`Error loading models:`,t);let n=m(t,`Failed to load models`);e({error:n,loading:!1}),r.error(n)}},loadPreferences:async()=>{try{let t=await l.getPreferences();if(t.success&&t.data){let{defaultModel:n,systemMessage:r}=t.data;n&&(e({selectedModel:n}),console.log(`โœ… Loaded default model from backend:`,n)),r!==void 0&&(e({systemMessage:r}),console.log(`โœ… Loaded system message from backend`))}}catch(e){console.warn(`โŒ Failed to load preferences from backend:`,e)}},selectedModel:``,setSelectedModel:t=>{e({selectedModel:t}),l.setDefaultModel(t).catch(e=>{console.warn(`Failed to save default model to backend:`,e)})},updateCurrentSessionModel:async n=>{let i=t();if(!i.currentSession)throw Error(`No current session to update`);try{let t=await d.updateSession(i.currentSession.id,{model:n});t.success&&t.data&&(e(e=>({sessions:e.sessions.map(n=>n.id===e.currentSession?.id?t.data:n),currentSession:t.data,selectedModel:n})),r.success(`Model updated for current chat`))}catch(e){let t=m(e,`Failed to update session model`);throw r.error(t),e}},personas:{},loadPersonas:async()=>{try{e({loading:!0,error:null});let t=await u.getPersonas();if(t.success&&t.data){let n=t.data;e({personas:n.reduce((e,t)=>(e[t.id]=t,e),{}),loading:!1}),console.log(`โœ… Personas loaded:`,n.length)}}catch(t){let n=m(t,`Failed to load personas`);e({error:n,loading:!1}),console.error(`โŒ Failed to load personas:`,n)}},getCurrentPersona:()=>{let e=t();if(!e.currentSession||!e.currentSession.model?.startsWith(`persona:`))return null;let n=e.currentSession.model.replace(`persona:`,``);return e.personas[n]||null},systemMessage:``,setSystemMessage:n=>{let r=t();if(e({systemMessage:n}),l.setSystemMessage(n).catch(e=>{console.warn(`Failed to save system message to backend:`,e)}),r.currentSession){let t=r.currentSession.messages.findIndex(e=>e.role===`system`);if(t!==-1){e(e=>{let r=e.sessions.map(r=>{if(r.id===e.currentSession?.id){let e=r.messages.map((e,r)=>r===t&&e.role===`system`?{...e,content:n,timestamp:Date.now()}:e);return{...r,messages:e,updatedAt:Date.now()}}return r});return{sessions:r,currentSession:e.currentSession?r.find(t=>t.id===e.currentSession.id)||e.currentSession:null}});let i=r.currentSession.messages[t];d.updateMessage(r.currentSession.id,i.id,{content:n}).catch(e=>{console.warn(`Failed to sync system message update to backend:`,e)}),console.log(`โœ… Updated system message in current session`)}}},loading:!1,error:null,setError:t=>e({error:t}),generatingTitleForSession:null,setGeneratingTitleForSession:t=>e({generatingTitleForSession:t}),...typeof window<`u`&&{testPluginApi:async()=>{try{console.log(`๐Ÿงช Testing plugin API...`);let e=await f.getAllPlugins();return console.log(`โœ… Plugin API test result:`,e),e}catch(e){return console.error(`โŒ Plugin API test failed:`,e),{error:e}}}}}));function g(e){"@babel/helpers - typeof";return g=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},g(e)}function _(e,t){if(g(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(g(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function v(e){var t=_(e,`string`);return g(t)==`symbol`?t:t+``}function y(e,t,n){return(t=v(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var b=new class{constructor(){y(this,`ws`,null),y(this,`url`,void 0),y(this,`reconnectAttempts`,0),y(this,`maxReconnectAttempts`,5),y(this,`reconnectDelay`,1e3),y(this,`messageHandlers`,new Map);let e;e=window.location.protocol===`file:`?`ws://localhost:3001`:`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}`,this.url=`${e}/ws`,console.log(`WebSocket URL constructed:`,this.url)}connect(){return t()?(console.log(`Demo mode active: skipping WebSocket connection.`),Promise.resolve()):(console.log(`WebSocket: Attempting to connect to:`,this.url),new Promise((e,t)=>{try{let n=localStorage.getItem(`auth-token`),r=n?`${this.url}?token=${encodeURIComponent(n)}`:this.url;console.log(`WebSocket: Connecting to:`,r.replace(/token=[^&]+/,`token=***`)),this.ws=new WebSocket(r),this.ws.onopen=()=>{console.log(`WebSocket connected successfully`),this.reconnectAttempts=0,e()},this.ws.onmessage=e=>{try{let t=JSON.parse(e.data),n=this.messageHandlers.get(t.type);n?n(t.data):t.type===`connected`?console.debug(`WebSocket: Server confirmed connection`):console.warn(`WebSocket: No handler for message type:`,t.type)}catch(e){console.error(`Failed to parse WebSocket message:`,e)}},this.ws.onclose=()=>{console.log(`WebSocket disconnected`),this.ws=null,this.attemptReconnect()},this.ws.onerror=e=>{console.error(`WebSocket error:`,e),t(e)}}catch(e){t(e)}}))}disconnect(){this.ws&&(this.ws.close(),this.ws=null)}send(e){this.ws&&this.ws.readyState===WebSocket.OPEN?(console.log(`WebSocket: Sending message:`,e),this.ws.send(JSON.stringify(e))):console.warn(`WebSocket is not connected. ReadyState:`,this.ws?.readyState)}onMessage(e,t){this.messageHandlers.delete(e),this.messageHandlers.set(e,t)}offMessage(e){this.messageHandlers.delete(e)}attemptReconnect(){if(t()){console.log(`Demo mode active: skipping WebSocket reconnection.`);return}this.reconnectAttempts<this.maxReconnectAttempts?(this.reconnectAttempts++,console.log(`Attempting to reconnect... (${this.reconnectAttempts}/${this.maxReconnectAttempts})`),setTimeout(()=>{this.connect().catch(()=>{})},this.reconnectDelay*this.reconnectAttempts)):console.error(`Max reconnection attempts reached`)}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}},x=e({useAuthStore:()=>S}),S=i()(a((e,n)=>({user:null,token:null,systemInfo:null,isAuthenticated:!1,isLoading:!1,login:(n,r,i)=>{localStorage.setItem(`auth-token`,r);let a=h.getState();a.clearAllState&&a.clearAllState(),s.getState().clearUserState(),e({user:n,token:r,systemInfo:i,isAuthenticated:!0,isLoading:!1}),setTimeout(async()=>{try{let e=p.getState();console.log(`๐Ÿ”„ Reinitializing app after login...`),console.log(`๐Ÿ”Œ Reconnecting WebSocket with auth token...`),b.disconnect(),await b.connect(),!(await c.checkHealth()).success&&!t()&&console.warn(`Ollama service not available after login`);let n=s.getState();await Promise.all([a.loadModels(),a.loadSessions(),a.loadPreferences(),n.loadPreferences(),e.loadPlugins()]),console.log(`โœ… Reinitialized app after login`)}catch(e){console.error(`Failed to reinitialize app after login:`,e)}},100)},logout:()=>{localStorage.removeItem(`auth-token`),console.log(`๐Ÿ”Œ Disconnecting WebSocket on logout...`),b.disconnect();let t=h.getState();t.clearAllState&&t.clearAllState(),s.getState().clearUserState(),e({user:null,token:null,isAuthenticated:!1,isLoading:!1})},setUser:t=>{e({user:t})},setSystemInfo:t=>{e({systemInfo:t})},setLoading:t=>{e({isLoading:t})},isAdmin:()=>{let{user:e}=n();return e?.role===`admin`},requiresAuth:()=>{let{systemInfo:e}=n();return e?.requiresAuth??!1}}),{name:`auth-store`,partialize:e=>({user:e.user,token:e.token,systemInfo:e.systemInfo,isAuthenticated:e.isAuthenticated})}));export{p as a,h as i,S as n,b as r,x as t};
@@ -1 +0,0 @@
1
- var e=`modulepreload`,t=function(e){return`/`+e},n={},r=function(r,i,a){let o=Promise.resolve();if(i&&i.length>0){let r=document.getElementsByTagName(`link`),s=document.querySelector(`meta[property=csp-nonce]`),c=s?.nonce||s?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}o=l(i.map(i=>{if(i=t(i,a),i in n)return;n[i]=!0;let o=i.endsWith(`.css`),s=o?`[rel="stylesheet"]`:``;if(a)for(let e=r.length-1;e>=0;e--){let t=r[e];if(t.href===i&&(!o||t.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${i}"]${s}`))return;let l=document.createElement(`link`);if(l.rel=o?`stylesheet`:e,o||(l.as=`script`),l.crossOrigin=``,l.href=i,c&&l.setAttribute(`nonce`,c),document.head.appendChild(l),o)return new Promise((e,t)=>{l.addEventListener(`load`,e),l.addEventListener(`error`,()=>t(Error(`Unable to preload CSS for ${i}`)))})}))}function s(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return o.then(e=>{for(let t of e||[])t.status===`rejected`&&s(t.reason);return r().catch(s)})},i=()=>{if(typeof window<`u`){let e=window.location.hostname,t=t=>t.some(t=>e===t||e.endsWith(`.`+t));if(t([`vercel.app`,`vercel.dev`])||t([`netlify.app`,`netlify.com`])||t([`github.io`])||e.startsWith(`demo.`)||e.startsWith(`preview.`))return!0}return!1},a=()=>({isDemo:i(),message:`This is a demo version for presentation purposes only. The Ollama backend is not connected.`,showBanner:!0,allowInteraction:!1});export{i as n,r,a as t};