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,373 @@
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 { personaModel } from '../models/personaModel.js';
18
+ export class PersonaService {
19
+ /**
20
+ * Get all personas for a user with optional advanced features
21
+ */
22
+ async getPersonas(userId = 'default') {
23
+ const basePersonas = await personaModel.getPersonas(userId);
24
+ // Check each persona for advanced features and merge them
25
+ const enhancedPersonas = await Promise.all(basePersonas.map(async (persona) => {
26
+ // Check if this persona has advanced features stored
27
+ const advancedFeatures = await this.getAdvancedFeatures(persona.id, userId);
28
+ return {
29
+ ...persona,
30
+ ...advancedFeatures,
31
+ };
32
+ }));
33
+ return enhancedPersonas;
34
+ }
35
+ /**
36
+ * Get advanced features for a persona if they exist
37
+ */
38
+ async getAdvancedFeatures(personaId, userId) {
39
+ try {
40
+ const { getDatabase } = await import('../db.js');
41
+ const db = getDatabase();
42
+ // Retrieve the embedding_model and other advanced features from the database
43
+ const personaAdvancedData = db
44
+ .prepare(`
45
+ SELECT embedding_model, memory_settings, mutation_settings
46
+ FROM personas
47
+ WHERE id = ? AND user_id = ?
48
+ `)
49
+ .get(personaId, userId);
50
+ if (!personaAdvancedData) {
51
+ return {};
52
+ }
53
+ // Parse JSON settings or use defaults
54
+ let memorySettings;
55
+ let mutationSettings;
56
+ try {
57
+ memorySettings = personaAdvancedData.memory_settings
58
+ ? JSON.parse(personaAdvancedData.memory_settings)
59
+ : undefined;
60
+ }
61
+ catch {
62
+ memorySettings = undefined;
63
+ }
64
+ try {
65
+ mutationSettings = personaAdvancedData.mutation_settings
66
+ ? JSON.parse(personaAdvancedData.mutation_settings)
67
+ : undefined;
68
+ }
69
+ catch {
70
+ mutationSettings = undefined;
71
+ }
72
+ // Check if persona has memory entries to determine if it has advanced features
73
+ const memoryCheck = db
74
+ .prepare(`
75
+ SELECT COUNT(*) as count FROM persona_memories
76
+ WHERE persona_id = ? AND user_id = ?
77
+ `)
78
+ .get(personaId, userId);
79
+ const stateCheck = db
80
+ .prepare(`
81
+ SELECT * FROM persona_states
82
+ WHERE persona_id = ? AND user_id = ?
83
+ `)
84
+ .get(personaId, userId);
85
+ // If persona has memories, state, or stored advanced settings, return advanced features
86
+ if ((memoryCheck?.count ?? 0) > 0 ||
87
+ stateCheck ||
88
+ personaAdvancedData.embedding_model ||
89
+ memorySettings ||
90
+ mutationSettings) {
91
+ return {
92
+ embedding_model: personaAdvancedData.embedding_model || 'nomic-embed-text',
93
+ memory_settings: memorySettings || {
94
+ enabled: true,
95
+ max_memories: 1000,
96
+ auto_cleanup: true,
97
+ retention_days: 90,
98
+ },
99
+ mutation_settings: mutationSettings || {
100
+ enabled: true,
101
+ sensitivity: 'medium',
102
+ auto_adapt: true,
103
+ },
104
+ };
105
+ }
106
+ return {};
107
+ }
108
+ catch (_error) {
109
+ // If tables don't exist or error occurs, return empty
110
+ return {};
111
+ }
112
+ }
113
+ /**
114
+ * Get all personas for a user (original method)
115
+ */
116
+ async getBasicPersonas(userId = 'default') {
117
+ return await personaModel.getPersonas(userId);
118
+ }
119
+ /**
120
+ * Get a specific persona by ID with optional advanced features
121
+ */
122
+ async getPersonaById(id, userId = 'default') {
123
+ const basePersona = await personaModel.getPersonaById(id, userId);
124
+ if (!basePersona) {
125
+ return null;
126
+ }
127
+ // Check for advanced features and merge them
128
+ const advancedFeatures = await this.getAdvancedFeatures(id, userId);
129
+ return {
130
+ ...basePersona,
131
+ ...advancedFeatures,
132
+ };
133
+ }
134
+ /**
135
+ * Get a specific persona by ID (basic version)
136
+ */
137
+ async getBasicPersonaById(id, userId = 'default') {
138
+ return await personaModel.getPersonaById(id, userId);
139
+ }
140
+ /**
141
+ * Create a new persona with validation
142
+ */
143
+ async createPersona(data, userId = 'default') {
144
+ // Validate required fields
145
+ if (!data.name || !data.name.trim()) {
146
+ throw new Error('Persona name is required');
147
+ }
148
+ if (!data.model || !data.model.trim()) {
149
+ throw new Error('Model is required');
150
+ }
151
+ // Check for duplicate name
152
+ const existingPersona = await personaModel.getPersonaByName(data.name.trim(), userId);
153
+ if (existingPersona) {
154
+ throw new Error('A persona with this name already exists');
155
+ }
156
+ // Validate parameters
157
+ if (!data.parameters) {
158
+ throw new Error('Persona parameters are required');
159
+ }
160
+ // Set default parameters if not provided
161
+ const parameters = {
162
+ temperature: data.parameters.temperature ?? 0.7,
163
+ top_p: data.parameters.top_p ?? 0.9,
164
+ top_k: data.parameters.top_k ?? 40,
165
+ context_window: data.parameters.context_window ?? 4096,
166
+ max_tokens: data.parameters.max_tokens ?? 1024,
167
+ system_prompt: data.parameters.system_prompt ?? '',
168
+ repeat_penalty: data.parameters.repeat_penalty ?? 1.1,
169
+ presence_penalty: data.parameters.presence_penalty ?? 0.0,
170
+ frequency_penalty: data.parameters.frequency_penalty ?? 0.0,
171
+ };
172
+ // Validate parameter ranges
173
+ if (parameters.temperature < 0 || parameters.temperature > 2) {
174
+ throw new Error('Temperature must be between 0 and 2');
175
+ }
176
+ if (parameters.top_p < 0 || parameters.top_p > 1) {
177
+ throw new Error('Top P must be between 0 and 1');
178
+ }
179
+ if (parameters.top_k < 1 || parameters.top_k > 100) {
180
+ throw new Error('Top K must be between 1 and 100');
181
+ }
182
+ if (parameters.context_window < 128 || parameters.context_window > 131072) {
183
+ throw new Error('Context window must be between 128 and 131072');
184
+ }
185
+ if (parameters.max_tokens < 1 || parameters.max_tokens > 8192) {
186
+ throw new Error('Max tokens must be between 1 and 8192');
187
+ }
188
+ const personaData = {
189
+ ...data,
190
+ name: data.name.trim(),
191
+ model: data.model.trim(),
192
+ parameters,
193
+ };
194
+ const createdPersona = await personaModel.createPersona(personaData, userId);
195
+ // If advanced features are provided, initialize them
196
+ if (data.memory_settings?.enabled || data.mutation_settings?.enabled) {
197
+ await this.initializeAdvancedFeatures(createdPersona.id, userId, {
198
+ embedding_model: data.embedding_model,
199
+ memory_settings: data.memory_settings,
200
+ mutation_settings: data.mutation_settings,
201
+ });
202
+ }
203
+ // Return enhanced persona with advanced features if they were initialized
204
+ return ((await this.getPersonaById(createdPersona.id, userId)) || createdPersona);
205
+ }
206
+ /**
207
+ * Initialize advanced features for a persona
208
+ */
209
+ async initializeAdvancedFeatures(personaId, userId, features) {
210
+ try {
211
+ // Initialize mutation engine state if mutation settings are enabled
212
+ if (features.mutation_settings?.enabled) {
213
+ const { mutationEngineService } = await import('./mutationEngineService.js');
214
+ await mutationEngineService.initializePersonaState(personaId, userId);
215
+ }
216
+ }
217
+ catch (error) {
218
+ console.error('Failed to initialize advanced features:', error);
219
+ // Don't throw error - persona creation should still succeed
220
+ }
221
+ }
222
+ /**
223
+ * Update an existing persona with validation
224
+ */
225
+ async updatePersona(id, data, userId = 'default') {
226
+ const existingPersona = await personaModel.getPersonaById(id, userId);
227
+ if (!existingPersona) {
228
+ throw new Error('Persona not found');
229
+ }
230
+ // Validate name if provided
231
+ if (data.name !== undefined) {
232
+ if (!data.name.trim()) {
233
+ throw new Error('Persona name cannot be empty');
234
+ }
235
+ // Check for duplicate name (excluding current persona)
236
+ const duplicatePersona = await personaModel.getPersonaByName(data.name.trim(), userId);
237
+ if (duplicatePersona && duplicatePersona.id !== id) {
238
+ throw new Error('A persona with this name already exists');
239
+ }
240
+ }
241
+ // Validate model if provided
242
+ if (data.model !== undefined && !data.model.trim()) {
243
+ throw new Error('Model cannot be empty');
244
+ }
245
+ // Validate parameters if provided
246
+ if (data.parameters) {
247
+ if (data.parameters.temperature !== undefined) {
248
+ if (data.parameters.temperature < 0 ||
249
+ data.parameters.temperature > 2) {
250
+ throw new Error('Temperature must be between 0 and 2');
251
+ }
252
+ }
253
+ if (data.parameters.top_p !== undefined) {
254
+ if (data.parameters.top_p < 0 || data.parameters.top_p > 1) {
255
+ throw new Error('Top P must be between 0 and 1');
256
+ }
257
+ }
258
+ if (data.parameters.top_k !== undefined) {
259
+ if (data.parameters.top_k < 1 || data.parameters.top_k > 100) {
260
+ throw new Error('Top K must be between 1 and 100');
261
+ }
262
+ }
263
+ if (data.parameters.context_window !== undefined) {
264
+ if (data.parameters.context_window < 128 ||
265
+ data.parameters.context_window > 131072) {
266
+ throw new Error('Context window must be between 128 and 131072');
267
+ }
268
+ }
269
+ if (data.parameters.max_tokens !== undefined) {
270
+ if (data.parameters.max_tokens < 1 ||
271
+ data.parameters.max_tokens > 8192) {
272
+ throw new Error('Max tokens must be between 1 and 8192');
273
+ }
274
+ }
275
+ }
276
+ const updateData = { ...data };
277
+ if (updateData.name) {
278
+ updateData.name = updateData.name.trim();
279
+ }
280
+ if (updateData.model) {
281
+ updateData.model = updateData.model.trim();
282
+ }
283
+ return await personaModel.updatePersona(id, updateData, userId);
284
+ }
285
+ /**
286
+ * Delete a persona
287
+ */
288
+ async deletePersona(id, userId = 'default') {
289
+ const existingPersona = await personaModel.getPersonaById(id, userId);
290
+ if (!existingPersona) {
291
+ throw new Error('Persona not found');
292
+ }
293
+ return await personaModel.deletePersona(id, userId);
294
+ }
295
+ /**
296
+ * Export a persona as JSON
297
+ */
298
+ async exportPersona(id, userId = 'default') {
299
+ const persona = await personaModel.getPersonaById(id, userId);
300
+ if (!persona) {
301
+ throw new Error('Persona not found');
302
+ }
303
+ return {
304
+ name: persona.name,
305
+ description: persona.description,
306
+ model: persona.model,
307
+ params: persona.parameters,
308
+ avatar: persona.avatar,
309
+ background: persona.background,
310
+ exportedAt: Date.now(),
311
+ version: '1.0.0',
312
+ // Include advanced features in export
313
+ embedding_model: persona.embedding_model,
314
+ memory_settings: persona.memory_settings,
315
+ mutation_settings: persona.mutation_settings,
316
+ };
317
+ }
318
+ /**
319
+ * Import a persona from JSON
320
+ */
321
+ async importPersona(personaData, userId = 'default') {
322
+ // Validate import data
323
+ if (!personaData.name || !personaData.model || !personaData.params) {
324
+ throw new Error('Invalid persona data: missing required fields');
325
+ }
326
+ // Create persona request from import data
327
+ const createRequest = {
328
+ name: personaData.name,
329
+ description: personaData.description,
330
+ model: personaData.model,
331
+ parameters: personaData.params,
332
+ avatar: personaData.avatar,
333
+ background: personaData.background,
334
+ // Include advanced features from import data
335
+ embedding_model: personaData.embedding_model,
336
+ memory_settings: personaData.memory_settings,
337
+ mutation_settings: personaData.mutation_settings,
338
+ };
339
+ // Check if persona with same name exists and add suffix if needed
340
+ let finalName = createRequest.name;
341
+ let counter = 1;
342
+ while (await personaModel.getPersonaByName(finalName, userId)) {
343
+ finalName = `${createRequest.name} (${counter})`;
344
+ counter++;
345
+ }
346
+ createRequest.name = finalName;
347
+ return await this.createPersona(createRequest, userId);
348
+ }
349
+ /**
350
+ * Get personas count for a user
351
+ */
352
+ async getPersonasCount(userId = 'default') {
353
+ return await personaModel.getPersonasCount(userId);
354
+ }
355
+ /**
356
+ * Get default persona parameters
357
+ */
358
+ getDefaultParameters() {
359
+ return {
360
+ temperature: 0.7,
361
+ top_p: 0.9,
362
+ top_k: 40,
363
+ context_window: 4096,
364
+ max_tokens: 1024,
365
+ system_prompt: '',
366
+ repeat_penalty: 1.1,
367
+ presence_penalty: 0.0,
368
+ frequency_penalty: 0.0,
369
+ };
370
+ }
371
+ }
372
+ export const personaService = new PersonaService();
373
+ //# sourceMappingURL=personaService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personaService.js","sourceRoot":"","sources":["../../src/services/personaService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { Plugin, PluginStatus, PluginResponse, ChatMessage, GenerationOptions, TTSConfig, PluginType } from '../types/index.js';
2
+ declare class PluginService {
3
+ private pluginsDir;
4
+ private activePluginIds;
5
+ constructor();
6
+ private ensurePluginsDirectory;
7
+ private loadActivePlugins;
8
+ private saveActivePlugins;
9
+ getAllPlugins(): Plugin[];
10
+ getPlugin(id: string): Plugin | null;
11
+ installPlugin(pluginData: Plugin): Plugin;
12
+ deletePlugin(id: string): boolean;
13
+ activatePlugin(id: string): boolean;
14
+ deactivatePlugin(id?: string): boolean;
15
+ getActivePluginForModel(model: string): Plugin | null;
16
+ getActivePlugins(): Plugin[];
17
+ getActivePlugin(): Plugin | null;
18
+ getPluginStatus(): PluginStatus[];
19
+ executePluginRequest(model: string, messages: ChatMessage[], options?: GenerationOptions): Promise<PluginResponse>;
20
+ private convertAnthropicResponse;
21
+ private convertGeminiResponse;
22
+ private validatePlugin;
23
+ exportPlugin(id: string): Plugin | null;
24
+ importPlugin(pluginData: unknown): Plugin;
25
+ getPluginForTTS(model: string): Plugin | null;
26
+ getAvailableTTSModels(): {
27
+ model: string;
28
+ plugin: string;
29
+ config?: TTSConfig;
30
+ }[];
31
+ executeTTSRequest(model: string, input: string, options?: {
32
+ voice?: string;
33
+ response_format?: 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm';
34
+ speed?: number;
35
+ }): Promise<Buffer>;
36
+ private splitTextForTTS;
37
+ getTTSConfig(pluginId: string): TTSConfig | null;
38
+ getPluginsByCapability(capabilityType: PluginType): Plugin[];
39
+ }
40
+ declare const _default: PluginService;
41
+ export default _default;
42
+ //# sourceMappingURL=pluginService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginService.d.ts","sourceRoot":"","sources":["../../src/services/pluginService.ts"],"names":[],"mappings":"AAqBA,OAAO,EACL,MAAM,EACN,YAAY,EACZ,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,UAAU,EACX,MAAM,mBAAmB,CAAC;AAE3B,cAAM,aAAa;IACjB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAA0B;;IAQjD,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,iBAAiB;IAUzB,aAAa,IAAI,MAAM,EAAE;IA+BzB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkCpC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAoBzC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IA2CjC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAanC,gBAAgB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IAYtC,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAqCrD,gBAAgB,IAAI,MAAM,EAAE;IAqB5B,eAAe,IAAI,MAAM,GAAG,IAAI;IAMhC,eAAe,IAAI,YAAY,EAAE;IAU3B,oBAAoB,CACxB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,cAAc,CAAC;IAkT1B,OAAO,CAAC,wBAAwB;IA8EhC,OAAO,CAAC,qBAAqB;IAyF7B,OAAO,CAAC,cAAc;IA2BtB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKvC,YAAY,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM;IAoBzC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkD7C,qBAAqB,IAAI;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,SAAS,CAAC;KACpB,EAAE;IAuCG,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;QAClE,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GACL,OAAO,CAAC,MAAM,CAAC;IA4NlB,OAAO,CAAC,eAAe;IA4CvB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAYhD,sBAAsB,CAAC,cAAc,EAAE,UAAU,GAAG,MAAM,EAAE;CAgD7D;;AAED,wBAAmC"}