libre-webui 0.2.4

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 (233) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +204 -0
  3. package/backend/dist/db.d.ts +19 -0
  4. package/backend/dist/db.d.ts.map +1 -0
  5. package/backend/dist/db.js +355 -0
  6. package/backend/dist/db.js.map +1 -0
  7. package/backend/dist/env.d.ts +2 -0
  8. package/backend/dist/env.d.ts.map +1 -0
  9. package/backend/dist/env.js +22 -0
  10. package/backend/dist/env.js.map +1 -0
  11. package/backend/dist/index.d.ts +4 -0
  12. package/backend/dist/index.d.ts.map +1 -0
  13. package/backend/dist/index.js +751 -0
  14. package/backend/dist/index.js.map +1 -0
  15. package/backend/dist/middleware/auth.d.ts +18 -0
  16. package/backend/dist/middleware/auth.d.ts.map +1 -0
  17. package/backend/dist/middleware/auth.js +98 -0
  18. package/backend/dist/middleware/auth.js.map +1 -0
  19. package/backend/dist/middleware/index.d.ts +5 -0
  20. package/backend/dist/middleware/index.d.ts.map +1 -0
  21. package/backend/dist/middleware/index.js +62 -0
  22. package/backend/dist/middleware/index.js.map +1 -0
  23. package/backend/dist/models/personaModel.d.ts +37 -0
  24. package/backend/dist/models/personaModel.d.ts.map +1 -0
  25. package/backend/dist/models/personaModel.js +269 -0
  26. package/backend/dist/models/personaModel.js.map +1 -0
  27. package/backend/dist/models/userModel.d.ts +86 -0
  28. package/backend/dist/models/userModel.d.ts.map +1 -0
  29. package/backend/dist/models/userModel.js +212 -0
  30. package/backend/dist/models/userModel.js.map +1 -0
  31. package/backend/dist/routes/auth.d.ts +3 -0
  32. package/backend/dist/routes/auth.d.ts.map +1 -0
  33. package/backend/dist/routes/auth.js +389 -0
  34. package/backend/dist/routes/auth.js.map +1 -0
  35. package/backend/dist/routes/chat.d.ts +3 -0
  36. package/backend/dist/routes/chat.d.ts.map +1 -0
  37. package/backend/dist/routes/chat.js +767 -0
  38. package/backend/dist/routes/chat.js.map +1 -0
  39. package/backend/dist/routes/documents.d.ts +3 -0
  40. package/backend/dist/routes/documents.d.ts.map +1 -0
  41. package/backend/dist/routes/documents.js +244 -0
  42. package/backend/dist/routes/documents.js.map +1 -0
  43. package/backend/dist/routes/ollama.d.ts +3 -0
  44. package/backend/dist/routes/ollama.d.ts.map +1 -0
  45. package/backend/dist/routes/ollama.js +549 -0
  46. package/backend/dist/routes/ollama.js.map +1 -0
  47. package/backend/dist/routes/personas.d.ts +3 -0
  48. package/backend/dist/routes/personas.d.ts.map +1 -0
  49. package/backend/dist/routes/personas.js +505 -0
  50. package/backend/dist/routes/personas.js.map +1 -0
  51. package/backend/dist/routes/plugins.d.ts +3 -0
  52. package/backend/dist/routes/plugins.d.ts.map +1 -0
  53. package/backend/dist/routes/plugins.js +417 -0
  54. package/backend/dist/routes/plugins.js.map +1 -0
  55. package/backend/dist/routes/preferences.d.ts +3 -0
  56. package/backend/dist/routes/preferences.d.ts.map +1 -0
  57. package/backend/dist/routes/preferences.js +303 -0
  58. package/backend/dist/routes/preferences.js.map +1 -0
  59. package/backend/dist/routes/tts.d.ts +3 -0
  60. package/backend/dist/routes/tts.d.ts.map +1 -0
  61. package/backend/dist/routes/tts.js +304 -0
  62. package/backend/dist/routes/tts.js.map +1 -0
  63. package/backend/dist/routes/users.d.ts +3 -0
  64. package/backend/dist/routes/users.d.ts.map +1 -0
  65. package/backend/dist/routes/users.js +246 -0
  66. package/backend/dist/routes/users.js.map +1 -0
  67. package/backend/dist/services/authService.d.ts +51 -0
  68. package/backend/dist/services/authService.d.ts.map +1 -0
  69. package/backend/dist/services/authService.js +153 -0
  70. package/backend/dist/services/authService.js.map +1 -0
  71. package/backend/dist/services/chatService.d.ts +52 -0
  72. package/backend/dist/services/chatService.d.ts.map +1 -0
  73. package/backend/dist/services/chatService.js +645 -0
  74. package/backend/dist/services/chatService.js.map +1 -0
  75. package/backend/dist/services/documentService.d.ts +34 -0
  76. package/backend/dist/services/documentService.d.ts.map +1 -0
  77. package/backend/dist/services/documentService.js +428 -0
  78. package/backend/dist/services/documentService.js.map +1 -0
  79. package/backend/dist/services/encryptionService.d.ts +62 -0
  80. package/backend/dist/services/encryptionService.d.ts.map +1 -0
  81. package/backend/dist/services/encryptionService.js +284 -0
  82. package/backend/dist/services/encryptionService.js.map +1 -0
  83. package/backend/dist/services/memoryService.d.ts +140 -0
  84. package/backend/dist/services/memoryService.d.ts.map +1 -0
  85. package/backend/dist/services/memoryService.js +867 -0
  86. package/backend/dist/services/memoryService.js.map +1 -0
  87. package/backend/dist/services/mutationEngineService.d.ts +49 -0
  88. package/backend/dist/services/mutationEngineService.d.ts.map +1 -0
  89. package/backend/dist/services/mutationEngineService.js +432 -0
  90. package/backend/dist/services/mutationEngineService.js.map +1 -0
  91. package/backend/dist/services/ollamaService.d.ts +55 -0
  92. package/backend/dist/services/ollamaService.d.ts.map +1 -0
  93. package/backend/dist/services/ollamaService.js +450 -0
  94. package/backend/dist/services/ollamaService.js.map +1 -0
  95. package/backend/dist/services/personaService.d.ts +67 -0
  96. package/backend/dist/services/personaService.d.ts.map +1 -0
  97. package/backend/dist/services/personaService.js +373 -0
  98. package/backend/dist/services/personaService.js.map +1 -0
  99. package/backend/dist/services/pluginService.d.ts +42 -0
  100. package/backend/dist/services/pluginService.d.ts.map +1 -0
  101. package/backend/dist/services/pluginService.js +961 -0
  102. package/backend/dist/services/pluginService.js.map +1 -0
  103. package/backend/dist/services/preferencesService.d.ts +35 -0
  104. package/backend/dist/services/preferencesService.d.ts.map +1 -0
  105. package/backend/dist/services/preferencesService.js +255 -0
  106. package/backend/dist/services/preferencesService.js.map +1 -0
  107. package/backend/dist/services/simpleGitHubOAuth.d.ts +48 -0
  108. package/backend/dist/services/simpleGitHubOAuth.d.ts.map +1 -0
  109. package/backend/dist/services/simpleGitHubOAuth.js +203 -0
  110. package/backend/dist/services/simpleGitHubOAuth.js.map +1 -0
  111. package/backend/dist/services/simpleHuggingFaceOAuth.d.ts +43 -0
  112. package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -0
  113. package/backend/dist/services/simpleHuggingFaceOAuth.js +159 -0
  114. package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -0
  115. package/backend/dist/services/userService.d.ts +1 -0
  116. package/backend/dist/services/userService.d.ts.map +1 -0
  117. package/backend/dist/services/userService.js +18 -0
  118. package/backend/dist/services/userService.js.map +1 -0
  119. package/backend/dist/storage.d.ts +55 -0
  120. package/backend/dist/storage.d.ts.map +1 -0
  121. package/backend/dist/storage.js +741 -0
  122. package/backend/dist/storage.js.map +1 -0
  123. package/backend/dist/test-encryption.d.ts +2 -0
  124. package/backend/dist/test-encryption.d.ts.map +1 -0
  125. package/backend/dist/test-encryption.js +64 -0
  126. package/backend/dist/test-encryption.js.map +1 -0
  127. package/backend/dist/types/index.d.ts +523 -0
  128. package/backend/dist/types/index.d.ts.map +1 -0
  129. package/backend/dist/types/index.js +31 -0
  130. package/backend/dist/types/index.js.map +1 -0
  131. package/backend/dist/utils/generationUtils.d.ts +10 -0
  132. package/backend/dist/utils/generationUtils.d.ts.map +1 -0
  133. package/backend/dist/utils/generationUtils.js +49 -0
  134. package/backend/dist/utils/generationUtils.js.map +1 -0
  135. package/backend/dist/utils/hash.d.ts +29 -0
  136. package/backend/dist/utils/hash.d.ts.map +1 -0
  137. package/backend/dist/utils/hash.js +73 -0
  138. package/backend/dist/utils/hash.js.map +1 -0
  139. package/backend/dist/utils/jwt.d.ts +37 -0
  140. package/backend/dist/utils/jwt.d.ts.map +1 -0
  141. package/backend/dist/utils/jwt.js +86 -0
  142. package/backend/dist/utils/jwt.js.map +1 -0
  143. package/bin/cli.js +150 -0
  144. package/electron/main.js +322 -0
  145. package/frontend/dist/_redirects +1 -0
  146. package/frontend/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  147. package/frontend/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  148. package/frontend/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  149. package/frontend/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  150. package/frontend/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  151. package/frontend/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  152. package/frontend/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  153. package/frontend/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  154. package/frontend/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  155. package/frontend/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  156. package/frontend/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  157. package/frontend/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  158. package/frontend/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  159. package/frontend/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  160. package/frontend/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  161. package/frontend/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  162. package/frontend/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  163. package/frontend/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  164. package/frontend/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  165. package/frontend/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  166. package/frontend/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  167. package/frontend/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  168. package/frontend/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  169. package/frontend/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  170. package/frontend/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  171. package/frontend/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  172. package/frontend/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  173. package/frontend/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  174. package/frontend/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  175. package/frontend/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  176. package/frontend/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  177. package/frontend/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  178. package/frontend/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  179. package/frontend/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  180. package/frontend/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  181. package/frontend/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  182. package/frontend/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  183. package/frontend/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  184. package/frontend/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  185. package/frontend/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  186. package/frontend/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  187. package/frontend/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  188. package/frontend/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  189. package/frontend/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  190. package/frontend/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  191. package/frontend/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  192. package/frontend/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  193. package/frontend/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  194. package/frontend/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  195. package/frontend/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  196. package/frontend/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  197. package/frontend/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  198. package/frontend/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  199. package/frontend/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  200. package/frontend/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  201. package/frontend/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  202. package/frontend/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  203. package/frontend/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  204. package/frontend/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  205. package/frontend/dist/assets/index-CRQkB7Wz.js +3 -0
  206. package/frontend/dist/css/index-B1OjddR-.css +1 -0
  207. package/frontend/dist/favicon-dark.png +0 -0
  208. package/frontend/dist/favicon-light.png +0 -0
  209. package/frontend/dist/index.html +23 -0
  210. package/frontend/dist/js/ArtifactContainer-c_oi7XMs.js +23 -0
  211. package/frontend/dist/js/ArtifactDemoPage-CdfwJVXu.js +98 -0
  212. package/frontend/dist/js/ChatPage-CyotkmS0.js +281 -0
  213. package/frontend/dist/js/ModelsPage-DNaziPHc.js +2 -0
  214. package/frontend/dist/js/PersonasPage-DcnbJf8Q.js +13 -0
  215. package/frontend/dist/js/UserManagementPage-DtTf92dS.js +1 -0
  216. package/frontend/dist/js/markdown-vendor-D-79K2xZ.js +22 -0
  217. package/frontend/dist/js/react-vendor-N--QU9DW.js +8 -0
  218. package/frontend/dist/js/router-vendor-B-t91v39.js +3 -0
  219. package/frontend/dist/js/ui-vendor-VxSCY_bv.js +177 -0
  220. package/frontend/dist/js/utils-vendor-DNzxLBGx.js +6 -0
  221. package/frontend/dist/logo-dark.png +0 -0
  222. package/frontend/dist/logo-light.png +0 -0
  223. package/frontend/dist/logo.svg +14 -0
  224. package/package.json +128 -0
  225. package/plugins/anthropic.json +25 -0
  226. package/plugins/elevenlabs.json +58 -0
  227. package/plugins/gemini.json +57 -0
  228. package/plugins/github.json +23 -0
  229. package/plugins/groq.json +25 -0
  230. package/plugins/mistral.json +73 -0
  231. package/plugins/openai-tts.json +38 -0
  232. package/plugins/openai.json +132 -0
  233. package/plugins/openrouter.json +353 -0
@@ -0,0 +1,549 @@
1
+ /*
2
+ * Libre WebUI
3
+ * Copyright (C) 2025 Kroonen AI, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at:
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import express from 'express';
18
+ import ollamaService from '../services/ollamaService.js';
19
+ import { getErrorMessage } from '../types/index.js';
20
+ const router = express.Router();
21
+ // Health check
22
+ router.get('/health', async (req, res) => {
23
+ try {
24
+ const isHealthy = await ollamaService.isHealthy();
25
+ if (isHealthy) {
26
+ res.json({
27
+ success: true,
28
+ data: { status: 'healthy' },
29
+ message: 'Ollama service is running',
30
+ });
31
+ }
32
+ else {
33
+ res.status(503).json({
34
+ success: false,
35
+ error: 'Ollama service is not available',
36
+ });
37
+ }
38
+ }
39
+ catch (error) {
40
+ res.status(500).json({
41
+ success: false,
42
+ error: getErrorMessage(error, 'Health check failed'),
43
+ });
44
+ }
45
+ });
46
+ // Get available models
47
+ router.get('/models', async (req, res) => {
48
+ try {
49
+ const models = await ollamaService.getModels();
50
+ res.json({
51
+ success: true,
52
+ data: models,
53
+ });
54
+ }
55
+ catch (error) {
56
+ res.status(500).json({
57
+ success: false,
58
+ error: getErrorMessage(error, 'Failed to get models'),
59
+ });
60
+ }
61
+ });
62
+ // Pull all models
63
+ router.post('/models/pull-all', async (req, res) => {
64
+ try {
65
+ const result = await ollamaService.pullAllModels();
66
+ res.json({
67
+ success: result.success,
68
+ data: result.results,
69
+ message: result.success
70
+ ? 'All models updated.'
71
+ : 'Some models failed to update.',
72
+ });
73
+ }
74
+ catch (error) {
75
+ res.status(500).json({
76
+ success: false,
77
+ error: getErrorMessage(error, 'Failed to pull models'),
78
+ });
79
+ }
80
+ });
81
+ // Pull all models with streaming progress (GET for Server-Sent Events)
82
+ router.get('/models/pull-all/stream', async (req, res) => {
83
+ try {
84
+ res.setHeader('Content-Type', 'text/event-stream');
85
+ res.setHeader('Cache-Control', 'no-cache');
86
+ res.setHeader('Connection', 'keep-alive');
87
+ res.setHeader('Access-Control-Allow-Origin', '*');
88
+ await ollamaService.pullAllModelsStream(progress => {
89
+ res.write(`data: ${JSON.stringify({ type: 'progress', ...progress })}\n\n`);
90
+ }, () => {
91
+ res.write(`data: ${JSON.stringify({ type: 'complete' })}\n\n`);
92
+ res.end();
93
+ }, error => {
94
+ res.write(`data: ${JSON.stringify({ type: 'error', error })}\n\n`);
95
+ res.end();
96
+ });
97
+ }
98
+ catch (error) {
99
+ res.write(`data: ${JSON.stringify({ type: 'error', error: getErrorMessage(error, 'Failed to pull models') })}\n\n`);
100
+ res.end();
101
+ }
102
+ });
103
+ // Pull a new model
104
+ router.post('/models/:modelName/pull', async (req, res) => {
105
+ try {
106
+ const { modelName } = req.params;
107
+ await ollamaService.pullModel(modelName);
108
+ res.json({
109
+ success: true,
110
+ message: `Model ${modelName} pulled successfully`,
111
+ });
112
+ }
113
+ catch (error) {
114
+ res.status(500).json({
115
+ success: false,
116
+ error: getErrorMessage(error, 'Failed to pull model'),
117
+ });
118
+ }
119
+ });
120
+ // Pull a model with streaming progress
121
+ router.get('/models/:modelName/pull/stream', async (req, res) => {
122
+ try {
123
+ const { modelName } = req.params;
124
+ res.setHeader('Content-Type', 'text/event-stream');
125
+ res.setHeader('Cache-Control', 'no-cache');
126
+ res.setHeader('Connection', 'keep-alive');
127
+ res.setHeader('Access-Control-Allow-Origin', '*');
128
+ await ollamaService.pullModelStream(modelName, progress => {
129
+ res.write(`data: ${JSON.stringify({ type: 'progress', ...progress })}\n\n`);
130
+ }, error => {
131
+ res.write(`data: ${JSON.stringify({ type: 'error', error: error.message })}\n\n`);
132
+ res.end();
133
+ }, () => {
134
+ res.write(`data: ${JSON.stringify({ type: 'complete' })}\n\n`);
135
+ res.end();
136
+ });
137
+ }
138
+ catch (error) {
139
+ res.write(`data: ${JSON.stringify({ type: 'error', error: getErrorMessage(error, 'Failed to pull model') })}\n\n`);
140
+ res.end();
141
+ }
142
+ });
143
+ // Delete a model
144
+ router.delete('/models/:modelName', async (req, res) => {
145
+ try {
146
+ const { modelName } = req.params;
147
+ await ollamaService.deleteModel(modelName);
148
+ res.json({
149
+ success: true,
150
+ message: `Model ${modelName} deleted successfully`,
151
+ });
152
+ }
153
+ catch (error) {
154
+ res.status(500).json({
155
+ success: false,
156
+ error: getErrorMessage(error, 'Failed to delete model'),
157
+ });
158
+ }
159
+ });
160
+ // Show model information
161
+ router.get('/models/:modelName', async (req, res) => {
162
+ try {
163
+ const { modelName } = req.params;
164
+ const verbose = req.query.verbose === 'true';
165
+ const data = await ollamaService.showModel(modelName, verbose);
166
+ res.json({ success: true, data });
167
+ }
168
+ catch (error) {
169
+ res.status(500).json({
170
+ success: false,
171
+ error: getErrorMessage(error, 'Failed to show model'),
172
+ });
173
+ }
174
+ });
175
+ // Create a model
176
+ router.post('/models', async (req, res) => {
177
+ try {
178
+ await ollamaService.createModel(req.body);
179
+ res.json({ success: true, message: 'Model created successfully' });
180
+ }
181
+ catch (error) {
182
+ res.status(500).json({
183
+ success: false,
184
+ error: getErrorMessage(error, 'Failed to create model'),
185
+ });
186
+ }
187
+ });
188
+ // Copy a model
189
+ router.post('/models/copy', async (req, res) => {
190
+ try {
191
+ const { source, destination } = req.body;
192
+ await ollamaService.copyModel(source, destination);
193
+ res.json({ success: true, message: 'Model copied successfully' });
194
+ }
195
+ catch (error) {
196
+ res.status(500).json({
197
+ success: false,
198
+ error: getErrorMessage(error, 'Failed to copy model'),
199
+ });
200
+ }
201
+ });
202
+ // Push a model
203
+ router.post('/models/:modelName/push', async (req, res) => {
204
+ try {
205
+ const { modelName } = req.params;
206
+ await ollamaService.pushModel(modelName);
207
+ res.json({
208
+ success: true,
209
+ message: `Model ${modelName} pushed successfully`,
210
+ });
211
+ }
212
+ catch (error) {
213
+ res.status(500).json({
214
+ success: false,
215
+ error: getErrorMessage(error, 'Failed to push model'),
216
+ });
217
+ }
218
+ });
219
+ // Generate embeddings
220
+ router.post('/embed', async (req, res) => {
221
+ try {
222
+ const data = await ollamaService.generateEmbeddings(req.body);
223
+ res.json({ success: true, data });
224
+ }
225
+ catch (error) {
226
+ res.status(500).json({
227
+ success: false,
228
+ error: getErrorMessage(error, 'Failed to generate embeddings'),
229
+ });
230
+ }
231
+ });
232
+ // List running models
233
+ router.get('/running', async (req, res) => {
234
+ try {
235
+ const data = await ollamaService.listRunningModels();
236
+ res.json({ success: true, data });
237
+ }
238
+ catch (error) {
239
+ res.status(500).json({
240
+ success: false,
241
+ error: getErrorMessage(error, 'Failed to list running models'),
242
+ });
243
+ }
244
+ });
245
+ // Get Ollama version
246
+ router.get('/version', async (req, res) => {
247
+ try {
248
+ const data = await ollamaService.getVersion();
249
+ res.json({ success: true, data });
250
+ }
251
+ catch (error) {
252
+ res.status(500).json({
253
+ success: false,
254
+ error: getErrorMessage(error, 'Failed to get version'),
255
+ });
256
+ }
257
+ });
258
+ // Chat completion (non-streaming)
259
+ router.post('/chat', async (req, res) => {
260
+ try {
261
+ const data = await ollamaService.generateChatResponse(req.body);
262
+ res.json({ success: true, data });
263
+ }
264
+ catch (error) {
265
+ res.status(500).json({
266
+ success: false,
267
+ error: getErrorMessage(error, 'Failed to generate chat response'),
268
+ });
269
+ }
270
+ });
271
+ // Chat completion (streaming)
272
+ router.post('/chat/stream', async (req, res) => {
273
+ try {
274
+ res.setHeader('Content-Type', 'text/event-stream');
275
+ res.setHeader('Cache-Control', 'no-cache');
276
+ res.setHeader('Connection', 'keep-alive');
277
+ res.setHeader('Access-Control-Allow-Origin', '*');
278
+ await ollamaService.generateChatStreamResponse(req.body, chunk => {
279
+ res.write(`data: ${JSON.stringify(chunk)}\n\n`);
280
+ }, error => {
281
+ res.write(`data: ${JSON.stringify({ error: error.message })}\n\n`);
282
+ res.end();
283
+ }, () => {
284
+ res.write('data: [DONE]\n\n');
285
+ res.end();
286
+ });
287
+ }
288
+ catch (error) {
289
+ res.status(500).json({
290
+ success: false,
291
+ error: getErrorMessage(error, 'Failed to stream chat response'),
292
+ });
293
+ }
294
+ });
295
+ // Check if blob exists
296
+ router.head('/blobs/:digest', async (req, res) => {
297
+ try {
298
+ const { digest } = req.params;
299
+ // Only allow lowercase hex strings of length 64 (SHA256)
300
+ if (!/^[a-f0-9]{64}$/.test(digest)) {
301
+ res.status(400).json({ error: 'Invalid digest format' });
302
+ return;
303
+ }
304
+ const exists = await ollamaService.checkBlobExists(digest);
305
+ if (exists) {
306
+ res.status(200).end();
307
+ }
308
+ else {
309
+ res.status(404).end();
310
+ }
311
+ }
312
+ catch (_error) {
313
+ res.status(500).end();
314
+ }
315
+ });
316
+ // Push a blob
317
+ router.post('/blobs/:digest', async (req, res) => {
318
+ try {
319
+ const { digest } = req.params;
320
+ // Only allow lowercase hex strings of length 64 (SHA256)
321
+ if (!/^[a-f0-9]{64}$/.test(digest)) {
322
+ res.status(400).json({ error: 'Invalid digest format' });
323
+ return;
324
+ }
325
+ // Handle raw binary data
326
+ const chunks = [];
327
+ req.on('data', chunk => {
328
+ chunks.push(chunk);
329
+ });
330
+ req.on('end', async () => {
331
+ try {
332
+ const data = Buffer.concat(chunks);
333
+ await ollamaService.pushBlob(digest, data);
334
+ res
335
+ .status(201)
336
+ .json({ success: true, message: 'Blob created successfully' });
337
+ }
338
+ catch (error) {
339
+ res.status(400).json({
340
+ success: false,
341
+ error: getErrorMessage(error, 'Failed to create blob'),
342
+ });
343
+ }
344
+ });
345
+ }
346
+ catch (error) {
347
+ res.status(500).json({
348
+ success: false,
349
+ error: getErrorMessage(error, 'Failed to push blob'),
350
+ });
351
+ }
352
+ });
353
+ // Legacy embeddings endpoint (deprecated)
354
+ router.post('/embeddings', async (req, res) => {
355
+ try {
356
+ const data = await ollamaService.generateLegacyEmbeddings(req.body);
357
+ res.json({ success: true, data });
358
+ }
359
+ catch (error) {
360
+ res.status(500).json({
361
+ success: false,
362
+ error: getErrorMessage(error, 'Failed to generate legacy embeddings'),
363
+ });
364
+ }
365
+ });
366
+ // Get popular models from Ollama library (curated list with live fetch fallback)
367
+ router.get('/library', async (req, res) => {
368
+ try {
369
+ // Try to fetch from ollamadb.dev API first
370
+ let remoteModels = [];
371
+ try {
372
+ const controller = new AbortController();
373
+ const timeoutId = setTimeout(() => controller.abort(), 5000);
374
+ const response = await fetch('https://ollamadb.dev/api/v1/models?sort_by=pulls&order=desc&limit=50&model_type=official', {
375
+ signal: controller.signal,
376
+ headers: {
377
+ Accept: 'application/json',
378
+ },
379
+ });
380
+ clearTimeout(timeoutId);
381
+ if (response.ok) {
382
+ const data = (await response.json());
383
+ if (data.models && Array.isArray(data.models)) {
384
+ remoteModels = data.models.map((m) => ({
385
+ name: m.model_name || '',
386
+ description: m.description || '',
387
+ category: m.capability || 'general',
388
+ sizes: [],
389
+ pulls: m.pulls ? formatPulls(m.pulls) : undefined,
390
+ tags: m.labels || [],
391
+ }));
392
+ }
393
+ }
394
+ }
395
+ catch (_fetchError) {
396
+ // Silently fall back to curated list
397
+ }
398
+ // If remote fetch failed or returned empty, use curated list
399
+ if (remoteModels.length === 0) {
400
+ remoteModels = [
401
+ {
402
+ name: 'deepseek-r1',
403
+ description: 'Family of open reasoning models with exceptional performance',
404
+ category: 'reasoning',
405
+ sizes: ['1.5b', '7b', '8b', '14b', '32b', '70b', '671b'],
406
+ pulls: '200M+',
407
+ tags: ['reasoning', 'thinking'],
408
+ },
409
+ {
410
+ name: 'llama3.2',
411
+ description: "Meta's latest Llama model, great for general tasks",
412
+ category: 'general',
413
+ sizes: ['1b', '3b'],
414
+ pulls: '50M+',
415
+ tags: ['general', 'fast'],
416
+ },
417
+ {
418
+ name: 'llama3.1',
419
+ description: 'State-of-the-art model from Meta with tool support',
420
+ category: 'general',
421
+ sizes: ['8b', '70b', '405b'],
422
+ pulls: '100M+',
423
+ tags: ['tools', 'general'],
424
+ },
425
+ {
426
+ name: 'gemma3',
427
+ description: "Google's most capable model that runs on a single GPU",
428
+ category: 'general',
429
+ sizes: ['1b', '4b', '12b', '27b'],
430
+ pulls: '30M+',
431
+ tags: ['vision', 'general'],
432
+ },
433
+ {
434
+ name: 'qwen2.5',
435
+ description: 'Latest Qwen model with strong multilingual capabilities',
436
+ category: 'general',
437
+ sizes: ['0.5b', '1.5b', '3b', '7b', '14b', '32b', '72b'],
438
+ pulls: '20M+',
439
+ tags: ['multilingual', 'coding'],
440
+ },
441
+ {
442
+ name: 'qwen2.5-coder',
443
+ description: 'Code-focused Qwen model for development tasks',
444
+ category: 'coding',
445
+ sizes: ['0.5b', '1.5b', '3b', '7b', '14b', '32b'],
446
+ pulls: '15M+',
447
+ tags: ['coding'],
448
+ },
449
+ {
450
+ name: 'mistral',
451
+ description: 'Fast and efficient 7B model from Mistral AI',
452
+ category: 'general',
453
+ sizes: ['7b'],
454
+ pulls: '40M+',
455
+ tags: ['fast', 'general'],
456
+ },
457
+ {
458
+ name: 'mixtral',
459
+ description: 'Mixture of experts model with strong performance',
460
+ category: 'general',
461
+ sizes: ['8x7b', '8x22b'],
462
+ pulls: '10M+',
463
+ tags: ['moe', 'general'],
464
+ },
465
+ {
466
+ name: 'codellama',
467
+ description: "Meta's code-specialized Llama model for development",
468
+ category: 'coding',
469
+ sizes: ['7b', '13b', '34b', '70b'],
470
+ pulls: '25M+',
471
+ tags: ['coding'],
472
+ },
473
+ {
474
+ name: 'phi3',
475
+ description: "Microsoft's small but capable model",
476
+ category: 'general',
477
+ sizes: ['3.8b', '14b'],
478
+ pulls: '15M+',
479
+ tags: ['small', 'efficient'],
480
+ },
481
+ {
482
+ name: 'llava',
483
+ description: 'Vision-language model for image understanding',
484
+ category: 'vision',
485
+ sizes: ['7b', '13b', '34b'],
486
+ pulls: '10M+',
487
+ tags: ['vision', 'multimodal'],
488
+ },
489
+ {
490
+ name: 'nomic-embed-text',
491
+ description: 'High-quality text embedding model for RAG and search',
492
+ category: 'embedding',
493
+ sizes: ['137m'],
494
+ pulls: '8M+',
495
+ tags: ['embedding', 'rag'],
496
+ },
497
+ {
498
+ name: 'mxbai-embed-large',
499
+ description: 'Large embedding model with strong semantic understanding',
500
+ category: 'embedding',
501
+ sizes: ['335m'],
502
+ pulls: '5M+',
503
+ tags: ['embedding', 'rag'],
504
+ },
505
+ {
506
+ name: 'starcoder2',
507
+ description: 'Code generation model trained on diverse languages',
508
+ category: 'coding',
509
+ sizes: ['3b', '7b', '15b'],
510
+ pulls: '3M+',
511
+ tags: ['coding'],
512
+ },
513
+ {
514
+ name: 'dolphin-mixtral',
515
+ description: 'Uncensored Mixtral variant for unrestricted conversations',
516
+ category: 'general',
517
+ sizes: ['8x7b'],
518
+ pulls: '2M+',
519
+ tags: ['uncensored', 'moe'],
520
+ },
521
+ ];
522
+ }
523
+ res.json({
524
+ success: true,
525
+ data: remoteModels,
526
+ });
527
+ }
528
+ catch (error) {
529
+ res.status(500).json({
530
+ success: false,
531
+ error: getErrorMessage(error, 'Failed to fetch library models'),
532
+ });
533
+ }
534
+ });
535
+ // Helper function to format pull counts
536
+ function formatPulls(pulls) {
537
+ if (pulls >= 1000000000) {
538
+ return `${(pulls / 1000000000).toFixed(1)}B+`;
539
+ }
540
+ else if (pulls >= 1000000) {
541
+ return `${(pulls / 1000000).toFixed(1)}M+`;
542
+ }
543
+ else if (pulls >= 1000) {
544
+ return `${(pulls / 1000).toFixed(1)}K+`;
545
+ }
546
+ return pulls.toString();
547
+ }
548
+ export default router;
549
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/routes/ollama.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare const router: import("express-serve-static-core").Router;
2
+ export default router;
3
+ //# sourceMappingURL=personas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personas.d.ts","sourceRoot":"","sources":["../../src/routes/personas.ts"],"names":[],"mappings":"AAsBA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA8mBxB,eAAe,MAAM,CAAC"}