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.
- package/README.md +75 -61
- package/backend/dist/db.d.ts.map +1 -1
- package/backend/dist/db.js +21 -19
- package/backend/dist/db.js.map +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +39 -908
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/middleware/auth.d.ts.map +1 -1
- package/backend/dist/middleware/auth.js +4 -2
- package/backend/dist/middleware/auth.js.map +1 -1
- package/backend/dist/middleware/index.d.ts.map +1 -1
- package/backend/dist/middleware/index.js +4 -2
- package/backend/dist/middleware/index.js.map +1 -1
- package/backend/dist/models/personaModel.d.ts.map +1 -1
- package/backend/dist/models/personaModel.js +11 -9
- package/backend/dist/models/personaModel.js.map +1 -1
- package/backend/dist/routes/auth.d.ts.map +1 -1
- package/backend/dist/routes/auth.js +36 -14
- package/backend/dist/routes/auth.js.map +1 -1
- package/backend/dist/routes/chat.d.ts.map +1 -1
- package/backend/dist/routes/chat.js +61 -249
- package/backend/dist/routes/chat.js.map +1 -1
- package/backend/dist/routes/documents.d.ts.map +1 -1
- package/backend/dist/routes/documents.js +10 -8
- package/backend/dist/routes/documents.js.map +1 -1
- package/backend/dist/routes/imageGen.d.ts.map +1 -1
- package/backend/dist/routes/imageGen.js +9 -7
- package/backend/dist/routes/imageGen.js.map +1 -1
- package/backend/dist/routes/libreClaw.d.ts +3 -0
- package/backend/dist/routes/libreClaw.d.ts.map +1 -0
- package/backend/dist/routes/libreClaw.js +156 -0
- package/backend/dist/routes/libreClaw.js.map +1 -0
- package/backend/dist/routes/ollama.d.ts.map +1 -1
- package/backend/dist/routes/ollama.js +7 -247
- package/backend/dist/routes/ollama.js.map +1 -1
- package/backend/dist/routes/plugins.d.ts.map +1 -1
- package/backend/dist/routes/plugins.js +7 -105
- package/backend/dist/routes/plugins.js.map +1 -1
- package/backend/dist/routes/tts.d.ts.map +1 -1
- package/backend/dist/routes/tts.js +7 -5
- package/backend/dist/routes/tts.js.map +1 -1
- package/backend/dist/routes/users.d.ts.map +1 -1
- package/backend/dist/routes/users.js +7 -5
- package/backend/dist/routes/users.js.map +1 -1
- package/backend/dist/services/assistantCompletionService.d.ts +26 -0
- package/backend/dist/services/assistantCompletionService.d.ts.map +1 -0
- package/backend/dist/services/assistantCompletionService.js +53 -0
- package/backend/dist/services/assistantCompletionService.js.map +1 -0
- package/backend/dist/services/authService.d.ts +2 -0
- package/backend/dist/services/authService.d.ts.map +1 -1
- package/backend/dist/services/authService.js +9 -5
- package/backend/dist/services/authService.js.map +1 -1
- package/backend/dist/services/chatGenerationService.d.ts +32 -0
- package/backend/dist/services/chatGenerationService.d.ts.map +1 -0
- package/backend/dist/services/chatGenerationService.js +118 -0
- package/backend/dist/services/chatGenerationService.js.map +1 -0
- package/backend/dist/services/chatRequestService.d.ts +55 -0
- package/backend/dist/services/chatRequestService.d.ts.map +1 -0
- package/backend/dist/services/chatRequestService.js +103 -0
- package/backend/dist/services/chatRequestService.js.map +1 -0
- package/backend/dist/services/chatService.d.ts +0 -1
- package/backend/dist/services/chatService.d.ts.map +1 -1
- package/backend/dist/services/chatService.js +13 -27
- package/backend/dist/services/chatService.js.map +1 -1
- package/backend/dist/services/documentService.d.ts.map +1 -1
- package/backend/dist/services/documentService.js +21 -19
- package/backend/dist/services/documentService.js.map +1 -1
- package/backend/dist/services/embeddingService.d.ts.map +1 -1
- package/backend/dist/services/embeddingService.js +3 -1
- package/backend/dist/services/embeddingService.js.map +1 -1
- package/backend/dist/services/encryptionService.d.ts.map +1 -1
- package/backend/dist/services/encryptionService.js +26 -24
- package/backend/dist/services/encryptionService.js.map +1 -1
- package/backend/dist/services/galleryService.d.ts.map +1 -1
- package/backend/dist/services/galleryService.js +8 -6
- package/backend/dist/services/galleryService.js.map +1 -1
- package/backend/dist/services/libreClawService.d.ts +105 -0
- package/backend/dist/services/libreClawService.d.ts.map +1 -0
- package/backend/dist/services/libreClawService.js +169 -0
- package/backend/dist/services/libreClawService.js.map +1 -0
- package/backend/dist/services/memoryService.d.ts +2 -13
- package/backend/dist/services/memoryService.d.ts.map +1 -1
- package/backend/dist/services/memoryService.js +37 -198
- package/backend/dist/services/memoryService.js.map +1 -1
- package/backend/dist/services/memoryUtils.d.ts +29 -0
- package/backend/dist/services/memoryUtils.d.ts.map +1 -0
- package/backend/dist/services/memoryUtils.js +165 -0
- package/backend/dist/services/memoryUtils.js.map +1 -0
- package/backend/dist/services/mutationEngineService.d.ts.map +1 -1
- package/backend/dist/services/mutationEngineService.js +3 -1
- package/backend/dist/services/mutationEngineService.js.map +1 -1
- package/backend/dist/services/ollamaService.d.ts.map +1 -1
- package/backend/dist/services/ollamaService.js +36 -34
- package/backend/dist/services/ollamaService.js.map +1 -1
- package/backend/dist/services/personaService.d.ts.map +1 -1
- package/backend/dist/services/personaService.js +3 -1
- package/backend/dist/services/personaService.js.map +1 -1
- package/backend/dist/services/pluginCapabilityRegistryService.d.ts +11 -0
- package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -0
- package/backend/dist/services/pluginCapabilityRegistryService.js +70 -0
- package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -0
- package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -1
- package/backend/dist/services/pluginCredentialsService.js +13 -11
- package/backend/dist/services/pluginCredentialsService.js.map +1 -1
- package/backend/dist/services/pluginEmbeddingService.d.ts +26 -0
- package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -0
- package/backend/dist/services/pluginEmbeddingService.js +159 -0
- package/backend/dist/services/pluginEmbeddingService.js.map +1 -0
- package/backend/dist/services/pluginImageGenerationService.d.ts +29 -0
- package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -0
- package/backend/dist/services/pluginImageGenerationService.js +402 -0
- package/backend/dist/services/pluginImageGenerationService.js.map +1 -0
- package/backend/dist/services/pluginService.d.ts +9 -18
- package/backend/dist/services/pluginService.d.ts.map +1 -1
- package/backend/dist/services/pluginService.js +118 -1469
- package/backend/dist/services/pluginService.js.map +1 -1
- package/backend/dist/services/pluginTTSService.d.ts +28 -0
- package/backend/dist/services/pluginTTSService.d.ts.map +1 -0
- package/backend/dist/services/pluginTTSService.js +286 -0
- package/backend/dist/services/pluginTTSService.js.map +1 -0
- package/backend/dist/services/pluginVariablesService.d.ts.map +1 -1
- package/backend/dist/services/pluginVariablesService.js +7 -5
- package/backend/dist/services/pluginVariablesService.js.map +1 -1
- package/backend/dist/services/preferencesService.d.ts.map +1 -1
- package/backend/dist/services/preferencesService.js +9 -7
- package/backend/dist/services/preferencesService.js.map +1 -1
- package/backend/dist/services/simpleGitHubOAuth.d.ts.map +1 -1
- package/backend/dist/services/simpleGitHubOAuth.js +10 -8
- package/backend/dist/services/simpleGitHubOAuth.js.map +1 -1
- package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -1
- package/backend/dist/services/simpleHuggingFaceOAuth.js +11 -9
- package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -1
- package/backend/dist/services/systemSettingsService.d.ts.map +1 -1
- package/backend/dist/services/systemSettingsService.js +4 -2
- package/backend/dist/services/systemSettingsService.js.map +1 -1
- package/backend/dist/services/titleGenerationService.d.ts +55 -0
- package/backend/dist/services/titleGenerationService.d.ts.map +1 -0
- package/backend/dist/services/titleGenerationService.js +121 -0
- package/backend/dist/services/titleGenerationService.js.map +1 -0
- package/backend/dist/services/turnstileService.d.ts +13 -0
- package/backend/dist/services/turnstileService.d.ts.map +1 -0
- package/backend/dist/services/turnstileService.js +79 -0
- package/backend/dist/services/turnstileService.js.map +1 -0
- package/backend/dist/storage.d.ts +2 -22
- package/backend/dist/storage.d.ts.map +1 -1
- package/backend/dist/storage.js +22 -170
- package/backend/dist/storage.js.map +1 -1
- package/backend/dist/storageMappers.d.ts +82 -0
- package/backend/dist/storageMappers.d.ts.map +1 -0
- package/backend/dist/storageMappers.js +85 -0
- package/backend/dist/storageMappers.js.map +1 -0
- package/backend/dist/test-encryption.js +20 -18
- package/backend/dist/test-encryption.js.map +1 -1
- package/backend/dist/types/index.d.ts.map +1 -1
- package/backend/dist/types/index.js.map +1 -1
- package/backend/dist/utils/assistantBranching.d.ts +8 -0
- package/backend/dist/utils/assistantBranching.d.ts.map +1 -0
- package/backend/dist/utils/assistantBranching.js +30 -0
- package/backend/dist/utils/assistantBranching.js.map +1 -0
- package/backend/dist/utils/chatContext.d.ts +17 -0
- package/backend/dist/utils/chatContext.d.ts.map +1 -0
- package/backend/dist/utils/chatContext.js +82 -0
- package/backend/dist/utils/chatContext.js.map +1 -0
- package/backend/dist/utils/chatDocumentContext.d.ts +7 -0
- package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -0
- package/backend/dist/utils/chatDocumentContext.js +51 -0
- package/backend/dist/utils/chatDocumentContext.js.map +1 -0
- package/backend/dist/utils/logger.d.ts +12 -0
- package/backend/dist/utils/logger.d.ts.map +1 -0
- package/backend/dist/utils/logger.js +82 -0
- package/backend/dist/utils/logger.js.map +1 -0
- package/backend/dist/utils/ollamaLibrary.d.ts +17 -0
- package/backend/dist/utils/ollamaLibrary.d.ts.map +1 -0
- package/backend/dist/utils/ollamaLibrary.js +253 -0
- package/backend/dist/utils/ollamaLibrary.js.map +1 -0
- package/backend/dist/utils/ollamaStreaming.d.ts +19 -0
- package/backend/dist/utils/ollamaStreaming.d.ts.map +1 -0
- package/backend/dist/utils/ollamaStreaming.js +67 -0
- package/backend/dist/utils/ollamaStreaming.js.map +1 -0
- package/backend/dist/utils/pluginChatAdapter.d.ts +32 -0
- package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -0
- package/backend/dist/utils/pluginChatAdapter.js +308 -0
- package/backend/dist/utils/pluginChatAdapter.js.map +1 -0
- package/backend/dist/utils/pluginChatContext.d.ts +23 -0
- package/backend/dist/utils/pluginChatContext.d.ts.map +1 -0
- package/backend/dist/utils/pluginChatContext.js +77 -0
- package/backend/dist/utils/pluginChatContext.js.map +1 -0
- package/backend/dist/utils/pluginResponse.d.ts +6 -0
- package/backend/dist/utils/pluginResponse.d.ts.map +1 -0
- package/backend/dist/utils/pluginResponse.js +70 -0
- package/backend/dist/utils/pluginResponse.js.map +1 -0
- package/backend/dist/utils/pluginStreamAdapter.d.ts +16 -0
- package/backend/dist/utils/pluginStreamAdapter.d.ts.map +1 -0
- package/backend/dist/utils/pluginStreamAdapter.js +141 -0
- package/backend/dist/utils/pluginStreamAdapter.js.map +1 -0
- package/backend/dist/utils/pluginStreaming.d.ts +24 -0
- package/backend/dist/utils/pluginStreaming.d.ts.map +1 -0
- package/backend/dist/utils/pluginStreaming.js +106 -0
- package/backend/dist/utils/pluginStreaming.js.map +1 -0
- package/backend/dist/utils/pluginUpload.d.ts +8 -0
- package/backend/dist/utils/pluginUpload.d.ts.map +1 -0
- package/backend/dist/utils/pluginUpload.js +51 -0
- package/backend/dist/utils/pluginUpload.js.map +1 -0
- package/backend/dist/utils/pluginValidation.d.ts +9 -0
- package/backend/dist/utils/pluginValidation.d.ts.map +1 -0
- package/backend/dist/utils/pluginValidation.js +84 -0
- package/backend/dist/utils/pluginValidation.js.map +1 -0
- package/backend/dist/utils/pluginVariableValidation.d.ts +10 -0
- package/backend/dist/utils/pluginVariableValidation.d.ts.map +1 -0
- package/backend/dist/utils/pluginVariableValidation.js +80 -0
- package/backend/dist/utils/pluginVariableValidation.js.map +1 -0
- package/backend/dist/utils/websocketMessages.d.ts +26 -0
- package/backend/dist/utils/websocketMessages.d.ts.map +1 -0
- package/backend/dist/utils/websocketMessages.js +74 -0
- package/backend/dist/utils/websocketMessages.js.map +1 -0
- package/backend/dist/websocketServer.d.ts +3 -0
- package/backend/dist/websocketServer.d.ts.map +1 -0
- package/backend/dist/websocketServer.js +332 -0
- package/backend/dist/websocketServer.js.map +1 -0
- package/backend/package.json +2 -2
- package/frontend/dist/assets/index-Dc8Q4dJZ.css +1 -0
- package/frontend/dist/assets/index-ONn9VIq7.js +5 -0
- package/frontend/dist/assets/markdown-math-CYlHEDRF.css +1 -0
- package/frontend/dist/index.html +11 -10
- package/frontend/dist/js/ArtifactContainer-CqKsiKz0.js +1 -0
- package/frontend/dist/js/ArtifactDemoPage-Dd5BjIu2.js +200 -0
- package/frontend/dist/js/ArtifactSlideOutPanel-Yc7ttIaY.js +1 -0
- package/frontend/dist/js/Button-BUjLpHmR.js +1 -0
- package/frontend/dist/js/ChatPage-Cpy7lQ0D.js +16 -0
- package/frontend/dist/js/FirstTimeSetup-DcGhm0H0.js +1 -0
- package/frontend/dist/js/GalleryPage-DNI2Evvf.js +1 -0
- package/frontend/dist/js/LibreClawPage-CmTiROsJ.js +1 -0
- package/frontend/dist/js/ModelManagerModals-CfvSeNsT.js +1 -0
- package/frontend/dist/js/ModelsPage-CeTGqx4q.js +2 -0
- package/frontend/dist/js/OptimizedSyntaxHighlighter-CNjLqj1Z.js +1 -0
- package/frontend/dist/js/PersonasPage-BUqu7gJ3.js +13 -0
- package/frontend/dist/js/RichMessageContent-B0JO8vkR.js +3 -0
- package/frontend/dist/js/SettingsModal-B5aJ5vfV.js +1 -0
- package/frontend/dist/js/UserManagementPage-BqIIWX2M.js +1 -0
- package/frontend/dist/js/api-CbmZzKBu.js +15 -0
- package/frontend/dist/js/ar-BAOdgn6O.js +2 -0
- package/frontend/dist/js/artifactHtml-B7Oy2e__.js +27 -0
- package/frontend/dist/js/bn-Bp2KS5mx.js +2 -0
- package/frontend/dist/js/cs-DOgJ0c5p.js +2 -0
- package/frontend/dist/js/da-BCKTkC35.js +2 -0
- package/frontend/dist/js/de-BXyECph5.js +2 -0
- package/frontend/dist/js/demoMode-BhEpMVh5.js +1 -0
- package/frontend/dist/js/es-Db4bDYIF.js +2 -0
- package/frontend/dist/js/fr-BPIkf6zH.js +2 -0
- package/frontend/dist/js/hi-Bm8D_Aux.js +2 -0
- package/frontend/dist/js/id-DiWaH74_.js +2 -0
- package/frontend/dist/js/is-DLgJywtZ.js +2 -0
- package/frontend/dist/js/it-lldrM8pE.js +2 -0
- package/frontend/dist/js/ja-Cfe9uZmQ.js +2 -0
- package/frontend/dist/js/ko-BhChO3MQ.js +2 -0
- package/frontend/dist/js/logger-BmpKNkls.js +1 -0
- package/frontend/dist/js/markdown-core-fkbHPd-g.js +16 -0
- package/frontend/dist/js/markdown-math-Ci4QOsf-.js +261 -0
- package/frontend/dist/js/ms-SWtmetXo.js +2 -0
- package/frontend/dist/js/nl-CUO6I3nO.js +2 -0
- package/frontend/dist/js/pl-BUAu96P6.js +2 -0
- package/frontend/dist/js/pt-DCHwoWiE.js +2 -0
- package/frontend/dist/js/{react-vendor-Dh6nfvM2.js → react-vendor-Co1u1rWb.js} +2 -2
- package/frontend/dist/js/ru-Ciz053N7.js +2 -0
- package/frontend/dist/js/sv-D38ZHjv-.js +2 -0
- package/frontend/dist/js/syntax-highlight-D5wpTVgr.js +8 -0
- package/frontend/dist/js/th-D2cAucvn.js +2 -0
- package/frontend/dist/js/tr-Go355oDu.js +2 -0
- package/frontend/dist/js/ui-vendor-BJAeWL11.js +177 -0
- package/frontend/dist/js/uk-cdzjhgya.js +2 -0
- package/frontend/dist/js/useBaseQuery-6OJiOiyu.js +1 -0
- package/frontend/dist/js/useQuery-DfkI6VAv.js +1 -0
- package/frontend/dist/js/utils-BaPYjs_z.js +1 -0
- package/frontend/dist/js/utils-vendor-BX3ZwoIK.js +9 -0
- package/frontend/dist/js/vi-BSOpE423.js +2 -0
- package/frontend/dist/js/zh-BFh6sHZG.js +2 -0
- package/package.json +12 -8
- package/backend/dist/services/openclawSessionService.d.ts +0 -63
- package/backend/dist/services/openclawSessionService.d.ts.map +0 -1
- package/backend/dist/services/openclawSessionService.js +0 -307
- package/backend/dist/services/openclawSessionService.js.map +0 -1
- package/frontend/dist/assets/index-cOuIFv6G.js +0 -314
- package/frontend/dist/assets/index-tuVjvNle.css +0 -1
- package/frontend/dist/js/ArtifactContainer-DXa2t8GS.js +0 -24
- package/frontend/dist/js/ArtifactDemoPage-Dms7P2gI.js +0 -98
- package/frontend/dist/js/ChatPage-C6hOVIAS.js +0 -15
- package/frontend/dist/js/GalleryPage-CGKPECJV.js +0 -1
- package/frontend/dist/js/ModelsPage-CNB-c-JM.js +0 -1
- package/frontend/dist/js/PersonasPage-hDiS0Rvl.js +0 -13
- package/frontend/dist/js/UserManagementPage-1H9kcHeR.js +0 -1
- package/frontend/dist/js/api-MQ7bONaU.js +0 -3
- package/frontend/dist/js/appStore-BpzQfKOd.js +0 -2
- package/frontend/dist/js/authStore-Cn_WS6Kb.js +0 -2
- package/frontend/dist/js/demoMode-PKHbba1m.js +0 -1
- package/frontend/dist/js/markdown-vendor-DLzJCMRQ.js +0 -22
- package/frontend/dist/js/ui-vendor-ClcVY3m-.js +0 -177
- package/frontend/dist/js/utils-vendor-BCQRX-0Q.js +0 -9
- package/plugins/openclaw-agent.json +0 -69
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { UserPublic } from '../models/userModel.js';
|
|
2
|
+
import { TurnstilePublicConfig } from './turnstileService.js';
|
|
2
3
|
export declare const JWT_SECRET: string;
|
|
3
4
|
export interface AuthTokenPayload {
|
|
4
5
|
userId: string;
|
|
@@ -11,6 +12,7 @@ export interface SystemInfo {
|
|
|
11
12
|
userCount: number;
|
|
12
13
|
allowUserModelPull: boolean;
|
|
13
14
|
version?: string;
|
|
15
|
+
turnstile: TurnstilePublicConfig;
|
|
14
16
|
}
|
|
15
17
|
export declare class AuthService {
|
|
16
18
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authService.d.ts","sourceRoot":"","sources":["../../src/services/authService.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAa,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"authService.d.ts","sourceRoot":"","sources":["../../src/services/authService.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAa,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAM/D,OAAO,EAAoB,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAmBhF,eAAO,MAAM,UAAU,QAWjB,CAAC;AAEP,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,qBAAqB,CAAC;CAClC;AAED,qBAAa,WAAW;IACtB;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAUvC;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAiBnD;;OAEG;IACG,KAAK,CACT,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAkBtD;;OAEG;IACH,aAAa,IAAI,UAAU;IAa3B;;OAEG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAOjE;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAerE;;OAEG;IACG,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAyBvD;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|
|
@@ -21,6 +21,9 @@ import { fileURLToPath } from 'url';
|
|
|
21
21
|
import { dirname, join } from 'path';
|
|
22
22
|
import { randomBytes } from 'crypto';
|
|
23
23
|
import { systemSettingsService } from './systemSettingsService.js';
|
|
24
|
+
import { turnstileService } from './turnstileService.js';
|
|
25
|
+
import { createLogger } from '../utils/logger.js';
|
|
26
|
+
const logger = createLogger('services:auth-service');
|
|
24
27
|
const __filename = fileURLToPath(import.meta.url);
|
|
25
28
|
const __dirname = dirname(__filename);
|
|
26
29
|
// Read version from package.json
|
|
@@ -31,14 +34,14 @@ try {
|
|
|
31
34
|
packageVersion = packageJson.version;
|
|
32
35
|
}
|
|
33
36
|
catch (_error) {
|
|
34
|
-
|
|
37
|
+
logger.warn('Could not read version from package.json, using default');
|
|
35
38
|
}
|
|
36
39
|
// Generate or use JWT secret - never use hardcoded secrets in production
|
|
37
40
|
export const JWT_SECRET = process.env.JWT_SECRET ||
|
|
38
41
|
(() => {
|
|
39
42
|
const generatedSecret = randomBytes(64).toString('hex');
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
logger.warn('⚠️ JWT_SECRET not provided - generated random secret for this session');
|
|
44
|
+
logger.warn('🔒 For production, set JWT_SECRET environment variable to persist sessions across restarts');
|
|
42
45
|
return generatedSecret;
|
|
43
46
|
})();
|
|
44
47
|
export class AuthService {
|
|
@@ -65,7 +68,7 @@ export class AuthService {
|
|
|
65
68
|
// token left in the browser), so return null quietly. Only surface
|
|
66
69
|
// genuinely unexpected failures, and without dumping a full stack trace.
|
|
67
70
|
if (!(error instanceof jwt.JsonWebTokenError)) {
|
|
68
|
-
|
|
71
|
+
logger.error('Unexpected token verification error:', error instanceof Error ? error.message : error);
|
|
69
72
|
}
|
|
70
73
|
return null;
|
|
71
74
|
}
|
|
@@ -100,6 +103,7 @@ export class AuthService {
|
|
|
100
103
|
userCount,
|
|
101
104
|
allowUserModelPull: systemSettingsService.getAllowUserModelPull(),
|
|
102
105
|
version: packageVersion,
|
|
106
|
+
turnstile: turnstileService.getPublicConfig(),
|
|
103
107
|
};
|
|
104
108
|
}
|
|
105
109
|
/**
|
|
@@ -150,7 +154,7 @@ export class AuthService {
|
|
|
150
154
|
return { user, token };
|
|
151
155
|
}
|
|
152
156
|
catch (error) {
|
|
153
|
-
|
|
157
|
+
logger.error('Signup error:', error);
|
|
154
158
|
return null;
|
|
155
159
|
}
|
|
156
160
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authService.js","sourceRoot":"","sources":["../../src/services/authService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAc,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"authService.js","sourceRoot":"","sources":["../../src/services/authService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ChatMessage, GenerationOptions, OllamaChatMessage, OllamaChatResponse, Plugin, PluginResponse } from '../types/index.js';
|
|
2
|
+
export interface GenerationTarget {
|
|
3
|
+
actualModelName: string;
|
|
4
|
+
mergedOptions: GenerationOptions;
|
|
5
|
+
activePlugin: Plugin | null;
|
|
6
|
+
pluginVariables: Record<string, string | number | boolean>;
|
|
7
|
+
}
|
|
8
|
+
export type PluginFallbackPolicy = 'allow' | 'disabled';
|
|
9
|
+
export interface NonStreamingExecutionOptions {
|
|
10
|
+
target: GenerationTarget;
|
|
11
|
+
ollamaMessages: OllamaChatMessage[];
|
|
12
|
+
pluginMessages: ChatMessage[];
|
|
13
|
+
userId: string;
|
|
14
|
+
pluginFallbackPolicy?: PluginFallbackPolicy;
|
|
15
|
+
}
|
|
16
|
+
export interface NonStreamingExecutionResult {
|
|
17
|
+
response: OllamaChatResponse;
|
|
18
|
+
assistantContent: string;
|
|
19
|
+
source: 'plugin' | 'ollama';
|
|
20
|
+
pluginError?: Error;
|
|
21
|
+
}
|
|
22
|
+
declare class ChatGenerationService {
|
|
23
|
+
resolveActualModelName(sessionModel: string, userId?: string): Promise<string>;
|
|
24
|
+
mergeOptions(options?: GenerationOptions): GenerationOptions;
|
|
25
|
+
prepareGenerationTarget(sessionModel: string, userId: string, options?: GenerationOptions): Promise<GenerationTarget>;
|
|
26
|
+
extractPluginAssistantContent(response: PluginResponse): string;
|
|
27
|
+
createPluginChatResponse(model: string, assistantContent: string): OllamaChatResponse;
|
|
28
|
+
executeNonStreaming({ target, ollamaMessages, pluginMessages, userId, pluginFallbackPolicy, }: NonStreamingExecutionOptions): Promise<NonStreamingExecutionResult>;
|
|
29
|
+
}
|
|
30
|
+
declare const _default: ChatGenerationService;
|
|
31
|
+
export default _default;
|
|
32
|
+
//# sourceMappingURL=chatGenerationService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatGenerationService.d.ts","sourceRoot":"","sources":["../../src/services/chatGenerationService.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,EACN,cAAc,EACf,MAAM,mBAAmB,CAAC;AAK3B,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,iBAAiB,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CAC5D;AAED,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,gBAAgB,CAAC;IACzB,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB;AAED,cAAM,qBAAqB;IACnB,sBAAsB,CAC1B,YAAY,EAAE,MAAM,EACpB,MAAM,GAAE,MAAkB,GACzB,OAAO,CAAC,MAAM,CAAC;IA2BlB,YAAY,CAAC,OAAO,GAAE,iBAAsB,GAAG,iBAAiB;IAO1D,uBAAuB,CAC3B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC;IAsB5B,6BAA6B,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM;IAI/D,wBAAwB,CACtB,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,MAAM,GACvB,kBAAkB;IAYf,mBAAmB,CAAC,EACxB,MAAM,EACN,cAAc,EACd,cAAc,EACd,MAAM,EACN,oBAAiC,GAClC,EAAE,4BAA4B,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAoDvE;;AAED,wBAA2C"}
|
|
@@ -0,0 +1,118 @@
|
|
|
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 { mergeGenerationOptions } from '../utils/generationUtils.js';
|
|
18
|
+
import { extractPluginAssistantContent } from '../utils/pluginResponse.js';
|
|
19
|
+
import ollamaService from './ollamaService.js';
|
|
20
|
+
import { personaService } from './personaService.js';
|
|
21
|
+
import pluginService from './pluginService.js';
|
|
22
|
+
import preferencesService from './preferencesService.js';
|
|
23
|
+
import { createLogger } from '../utils/logger.js';
|
|
24
|
+
const logger = createLogger('services:chat-generation-service');
|
|
25
|
+
class ChatGenerationService {
|
|
26
|
+
async resolveActualModelName(sessionModel, userId = 'default') {
|
|
27
|
+
if (!sessionModel.startsWith('persona:')) {
|
|
28
|
+
return sessionModel;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
const personaId = sessionModel.replace('persona:', '');
|
|
32
|
+
let persona = await personaService.getPersonaById(personaId, userId);
|
|
33
|
+
if (!persona && userId !== 'default') {
|
|
34
|
+
persona = await personaService.getPersonaById(personaId, 'default');
|
|
35
|
+
}
|
|
36
|
+
if (persona?.model) {
|
|
37
|
+
return persona.model;
|
|
38
|
+
}
|
|
39
|
+
logger.warn(`Persona ${personaId} not found, falling back to session model`);
|
|
40
|
+
return sessionModel;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
logger.error('Error resolving persona model:', error);
|
|
44
|
+
return sessionModel;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
mergeOptions(options = {}) {
|
|
48
|
+
return mergeGenerationOptions(preferencesService.getGenerationOptions(), options);
|
|
49
|
+
}
|
|
50
|
+
async prepareGenerationTarget(sessionModel, userId, options = {}) {
|
|
51
|
+
const actualModelName = await this.resolveActualModelName(sessionModel, userId);
|
|
52
|
+
const mergedOptions = this.mergeOptions(options);
|
|
53
|
+
const activePlugin = pluginService.getActivePluginForModel(actualModelName, userId);
|
|
54
|
+
const pluginVariables = activePlugin
|
|
55
|
+
? pluginService.getPluginVariables(activePlugin, userId)
|
|
56
|
+
: {};
|
|
57
|
+
return {
|
|
58
|
+
actualModelName,
|
|
59
|
+
mergedOptions,
|
|
60
|
+
activePlugin,
|
|
61
|
+
pluginVariables,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
extractPluginAssistantContent(response) {
|
|
65
|
+
return extractPluginAssistantContent(response);
|
|
66
|
+
}
|
|
67
|
+
createPluginChatResponse(model, assistantContent) {
|
|
68
|
+
return {
|
|
69
|
+
model,
|
|
70
|
+
created_at: new Date().toISOString(),
|
|
71
|
+
message: {
|
|
72
|
+
role: 'assistant',
|
|
73
|
+
content: assistantContent,
|
|
74
|
+
},
|
|
75
|
+
done: true,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
async executeNonStreaming({ target, ollamaMessages, pluginMessages, userId, pluginFallbackPolicy = 'disabled', }) {
|
|
79
|
+
const chatRequest = {
|
|
80
|
+
model: target.actualModelName,
|
|
81
|
+
messages: ollamaMessages,
|
|
82
|
+
stream: false,
|
|
83
|
+
options: target.mergedOptions,
|
|
84
|
+
};
|
|
85
|
+
if (target.activePlugin) {
|
|
86
|
+
try {
|
|
87
|
+
const pluginResponse = await pluginService.executePluginRequest(target.actualModelName, pluginMessages, target.mergedOptions, userId);
|
|
88
|
+
const assistantContent = this.extractPluginAssistantContent(pluginResponse);
|
|
89
|
+
return {
|
|
90
|
+
response: this.createPluginChatResponse(target.actualModelName, assistantContent),
|
|
91
|
+
assistantContent,
|
|
92
|
+
source: 'plugin',
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
const pluginError = error instanceof Error ? error : new Error(String(error));
|
|
97
|
+
if (pluginFallbackPolicy === 'disabled') {
|
|
98
|
+
throw pluginError;
|
|
99
|
+
}
|
|
100
|
+
const response = await ollamaService.generateChatResponse(chatRequest);
|
|
101
|
+
return {
|
|
102
|
+
response,
|
|
103
|
+
assistantContent: response.message.content,
|
|
104
|
+
source: 'ollama',
|
|
105
|
+
pluginError,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const response = await ollamaService.generateChatResponse(chatRequest);
|
|
110
|
+
return {
|
|
111
|
+
response,
|
|
112
|
+
assistantContent: response.message.content,
|
|
113
|
+
source: 'ollama',
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export default new ChatGenerationService();
|
|
118
|
+
//# sourceMappingURL=chatGenerationService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatGenerationService.js","sourceRoot":"","sources":["../../src/services/chatGenerationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type ChatContextMessage } from '../utils/chatContext.js';
|
|
2
|
+
import { type PluginVariables } from '../utils/pluginChatContext.js';
|
|
3
|
+
import type { GenerationTarget } from './chatGenerationService.js';
|
|
4
|
+
import type { ChatMessage, ChatSession, GenerationOptions, OllamaChatMessage, Persona } from '../types/index.js';
|
|
5
|
+
export interface ChatGenerationTargetService {
|
|
6
|
+
prepareGenerationTarget(sessionModel: string, userId: string, options?: GenerationOptions): Promise<GenerationTarget>;
|
|
7
|
+
}
|
|
8
|
+
export interface ChatPersonaLookupService {
|
|
9
|
+
getPersonaById(id: string, userId?: string): Promise<Persona | null>;
|
|
10
|
+
}
|
|
11
|
+
export interface ChatRequestServiceDependencies {
|
|
12
|
+
chatGenerationService: ChatGenerationTargetService;
|
|
13
|
+
personaService?: ChatPersonaLookupService;
|
|
14
|
+
}
|
|
15
|
+
export interface PrepareGenerationMessagesOptions {
|
|
16
|
+
isPrivate?: boolean;
|
|
17
|
+
persistedMessages: readonly ChatMessage[];
|
|
18
|
+
messageHistory?: readonly ChatContextMessage[];
|
|
19
|
+
regenerate?: boolean;
|
|
20
|
+
content: string;
|
|
21
|
+
images?: string[];
|
|
22
|
+
hasRelevantContext?: boolean;
|
|
23
|
+
enhancedContent?: string;
|
|
24
|
+
personaSystemPrompt?: string;
|
|
25
|
+
pluginVariables?: PluginVariables;
|
|
26
|
+
now?: () => number;
|
|
27
|
+
}
|
|
28
|
+
export interface PreparedGenerationMessages {
|
|
29
|
+
enhancedContent: string;
|
|
30
|
+
hasRelevantContext: boolean;
|
|
31
|
+
contextMessages: ChatContextMessage[];
|
|
32
|
+
ollamaMessages: OllamaChatMessage[];
|
|
33
|
+
pluginMessages: ChatMessage[];
|
|
34
|
+
shouldStreamPlugin: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface PrepareChatGenerationRequestOptions extends Omit<PrepareGenerationMessagesOptions, 'pluginVariables' | 'personaSystemPrompt'> {
|
|
37
|
+
session: Pick<ChatSession, 'model' | 'personaId'>;
|
|
38
|
+
userId: string;
|
|
39
|
+
options?: GenerationOptions;
|
|
40
|
+
personaSystemPrompt?: string;
|
|
41
|
+
includePersonaPrompt?: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface PreparedChatGenerationRequest extends PreparedGenerationMessages, GenerationTarget {
|
|
44
|
+
target: GenerationTarget;
|
|
45
|
+
}
|
|
46
|
+
export declare function buildDocumentEnhancedContent(content: string, relevantContext: readonly string[]): string;
|
|
47
|
+
export declare function prepareGenerationMessages({ isPrivate, persistedMessages, messageHistory, regenerate, content, images, hasRelevantContext, enhancedContent, personaSystemPrompt, pluginVariables, now, }: PrepareGenerationMessagesOptions): PreparedGenerationMessages;
|
|
48
|
+
export declare class ChatRequestService {
|
|
49
|
+
private readonly chatGenerationService;
|
|
50
|
+
private readonly personaService?;
|
|
51
|
+
constructor({ chatGenerationService, personaService, }: ChatRequestServiceDependencies);
|
|
52
|
+
resolvePersonaSystemPrompt(session: Pick<ChatSession, 'personaId'>, userId: string): Promise<string | undefined>;
|
|
53
|
+
prepareGenerationRequest({ session, userId, options, personaSystemPrompt, includePersonaPrompt, ...messageOptions }: PrepareChatGenerationRequestOptions): Promise<PreparedChatGenerationRequest>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=chatRequestService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatRequestService.d.ts","sourceRoot":"","sources":["../../src/services/chatRequestService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
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 { toOllamaMessages, withSystemPrompt, } from '../utils/chatContext.js';
|
|
18
|
+
import { preparePluginChatContext, } from '../utils/pluginChatContext.js';
|
|
19
|
+
import { createLogger } from '../utils/logger.js';
|
|
20
|
+
const logger = createLogger('services:chat-request-service');
|
|
21
|
+
export function buildDocumentEnhancedContent(content, relevantContext) {
|
|
22
|
+
if (relevantContext.length === 0) {
|
|
23
|
+
return content;
|
|
24
|
+
}
|
|
25
|
+
const contextString = relevantContext.join('\n\n---\n\n');
|
|
26
|
+
return `Context from uploaded documents:\n\n${contextString}\n\n---\n\nUser question: ${content}`;
|
|
27
|
+
}
|
|
28
|
+
export function prepareGenerationMessages({ isPrivate = false, persistedMessages, messageHistory = [], regenerate = false, content, images, hasRelevantContext, enhancedContent, personaSystemPrompt, pluginVariables = {}, now = Date.now, }) {
|
|
29
|
+
const contextMessages = isPrivate
|
|
30
|
+
? regenerate
|
|
31
|
+
? [...messageHistory]
|
|
32
|
+
: [
|
|
33
|
+
...messageHistory,
|
|
34
|
+
{
|
|
35
|
+
role: 'user',
|
|
36
|
+
content,
|
|
37
|
+
images,
|
|
38
|
+
},
|
|
39
|
+
]
|
|
40
|
+
: [...persistedMessages];
|
|
41
|
+
const finalEnhancedContent = enhancedContent ?? content;
|
|
42
|
+
const usesRelevantContext = hasRelevantContext ?? finalEnhancedContent !== content;
|
|
43
|
+
const ollamaMessages = withSystemPrompt(toOllamaMessages(contextMessages, {
|
|
44
|
+
latestUserContent: usesRelevantContext ? finalEnhancedContent : undefined,
|
|
45
|
+
}), personaSystemPrompt);
|
|
46
|
+
const { messages: pluginMessages, shouldStream } = preparePluginChatContext({
|
|
47
|
+
isPrivate,
|
|
48
|
+
persistedMessages,
|
|
49
|
+
messageHistory,
|
|
50
|
+
regenerate,
|
|
51
|
+
content,
|
|
52
|
+
images,
|
|
53
|
+
hasRelevantContext: usesRelevantContext,
|
|
54
|
+
enhancedContent: finalEnhancedContent,
|
|
55
|
+
pluginVariables,
|
|
56
|
+
now,
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
enhancedContent: finalEnhancedContent,
|
|
60
|
+
hasRelevantContext: usesRelevantContext,
|
|
61
|
+
contextMessages,
|
|
62
|
+
ollamaMessages,
|
|
63
|
+
pluginMessages,
|
|
64
|
+
shouldStreamPlugin: shouldStream,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export class ChatRequestService {
|
|
68
|
+
constructor({ chatGenerationService, personaService, }) {
|
|
69
|
+
this.chatGenerationService = chatGenerationService;
|
|
70
|
+
this.personaService = personaService;
|
|
71
|
+
}
|
|
72
|
+
async resolvePersonaSystemPrompt(session, userId) {
|
|
73
|
+
if (!session.personaId || !this.personaService) {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const persona = await this.personaService.getPersonaById(session.personaId, userId);
|
|
78
|
+
return persona?.parameters?.system_prompt?.trim() || undefined;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
logger.error('Error loading persona system prompt:', error);
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async prepareGenerationRequest({ session, userId, options = {}, personaSystemPrompt, includePersonaPrompt = true, ...messageOptions }) {
|
|
86
|
+
const target = await this.chatGenerationService.prepareGenerationTarget(session.model, userId, options);
|
|
87
|
+
const resolvedPersonaSystemPrompt = personaSystemPrompt ??
|
|
88
|
+
(includePersonaPrompt
|
|
89
|
+
? await this.resolvePersonaSystemPrompt(session, userId)
|
|
90
|
+
: undefined);
|
|
91
|
+
const preparedMessages = prepareGenerationMessages({
|
|
92
|
+
...messageOptions,
|
|
93
|
+
personaSystemPrompt: resolvedPersonaSystemPrompt,
|
|
94
|
+
pluginVariables: target.pluginVariables,
|
|
95
|
+
});
|
|
96
|
+
return {
|
|
97
|
+
target,
|
|
98
|
+
...target,
|
|
99
|
+
...preparedMessages,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=chatRequestService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatRequestService.js","sourceRoot":"","sources":["../../src/services/chatRequestService.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,6 @@ declare class ChatService {
|
|
|
14
14
|
updateMessage(sessionId: string, messageId: string, updates: Partial<ChatMessage>, userId?: string): ChatMessage | undefined;
|
|
15
15
|
deleteSession(sessionId: string, userId?: string): boolean;
|
|
16
16
|
clearAllSessions(userId?: string): void;
|
|
17
|
-
private generateTitle;
|
|
18
17
|
getMessagesForContext(sessionId: string, maxMessages?: number): ChatMessage[];
|
|
19
18
|
private updateSystemMessageForPersona;
|
|
20
19
|
private updateSystemMessageToDefault;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatService.d.ts","sourceRoot":"","sources":["../../src/services/chatService.ts"],"names":[],"mappings":"AAiBA,OAAO,EACL,WAAW,EACX,WAAW,EAGZ,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"chatService.d.ts","sourceRoot":"","sources":["../../src/services/chatService.ts"],"names":[],"mappings":"AAiBA,OAAO,EACL,WAAW,EACX,WAAW,EAGZ,MAAM,mBAAmB,CAAC;AAW3B,cAAM,WAAW;IACf,OAAO,CAAC,QAAQ,CAAuC;;IAMvD,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,YAAY;IAKd,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,GAAE,MAAkB,EAC1B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC;IAgEvB,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,MAAkB,GACzB,WAAW,GAAG,SAAS;IAwB1B,cAAc,CAAC,MAAM,GAAE,MAAkB,GAAG,WAAW,EAAE;IAanD,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,MAAM,GAAE,MAAkB,GACzB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAqCnC,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,EAChE,MAAM,GAAE,MAAkB,GACzB,WAAW,GAAG,SAAS;IAsE1B,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,MAAM,GAAE,MAAkB,GACzB,WAAW,GAAG,SAAS;IAkC1B,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,MAAkB,GAAG,OAAO;IAYrE,gBAAgB,CAAC,MAAM,GAAE,MAAkB,GAAG,IAAI;IAelD,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,SAAK,GAAG,WAAW,EAAE;YAsB3D,6BAA6B;IA6B3C,OAAO,CAAC,4BAA4B;IAQpC,OAAO,CAAC,oBAAoB;IA4B5B;;OAEG;YACW,iCAAiC;IAuE/C;;OAEG;YACW,+BAA+B;IAuG7C;;OAEG;YACW,8BAA8B;IAuC5C;;;OAGG;IACH,mBAAmB,CACjB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,EACnE,MAAM,GAAE,MAAkB,GACzB,WAAW,GAAG,SAAS;IAgD1B;;OAEG;IACH,mBAAmB,CACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,MAAM,GAAE,MAAkB,GACzB,WAAW,GAAG,SAAS;IA6B1B;;OAEG;IACH,kBAAkB,CAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,MAAkB,GACzB,WAAW,EAAE;CAcjB;;AAED,wBAAiC"}
|
|
@@ -20,6 +20,8 @@ import preferencesService from './preferencesService.js';
|
|
|
20
20
|
import { personaService } from './personaService.js';
|
|
21
21
|
import { memoryService } from './memoryService.js';
|
|
22
22
|
import { mutationEngineService } from './mutationEngineService.js';
|
|
23
|
+
import { createLogger } from '../utils/logger.js';
|
|
24
|
+
const logger = createLogger('chat-service');
|
|
23
25
|
class ChatService {
|
|
24
26
|
constructor() {
|
|
25
27
|
this.sessions = new Map();
|
|
@@ -29,10 +31,10 @@ class ChatService {
|
|
|
29
31
|
try {
|
|
30
32
|
const sessionsArray = storageService.getAllSessions();
|
|
31
33
|
this.sessions = new Map(sessionsArray.map(session => [session.id, session]));
|
|
32
|
-
|
|
34
|
+
logger.debug(`Loaded ${sessionsArray.length} sessions from storage`);
|
|
33
35
|
}
|
|
34
36
|
catch (error) {
|
|
35
|
-
|
|
37
|
+
logger.error('Failed to load sessions:', error);
|
|
36
38
|
}
|
|
37
39
|
}
|
|
38
40
|
saveSessions() {
|
|
@@ -65,7 +67,7 @@ class ChatService {
|
|
|
65
67
|
}
|
|
66
68
|
}
|
|
67
69
|
catch (error) {
|
|
68
|
-
|
|
70
|
+
logger.error(`Error getting persona system prompt:`, error);
|
|
69
71
|
}
|
|
70
72
|
}
|
|
71
73
|
// If no persona system prompt, fall back to global preferences
|
|
@@ -191,19 +193,12 @@ class ChatService {
|
|
|
191
193
|
// Process advanced persona features if applicable
|
|
192
194
|
if (session.personaId) {
|
|
193
195
|
if (message.role === 'user') {
|
|
194
|
-
this.processAdvancedPersonaInteraction(session.personaId, userId, message.content, session).catch((error) =>
|
|
196
|
+
this.processAdvancedPersonaInteraction(session.personaId, userId, message.content, session).catch((error) => logger.error('Advanced persona processing error:', error));
|
|
195
197
|
}
|
|
196
198
|
else if (message.role === 'assistant') {
|
|
197
|
-
this.processAdvancedPersonaResponse(session.personaId, userId, message.content).catch((error) =>
|
|
199
|
+
this.processAdvancedPersonaResponse(session.personaId, userId, message.content).catch((error) => logger.error('Advanced persona response processing error:', error));
|
|
198
200
|
}
|
|
199
201
|
}
|
|
200
|
-
// Auto-generate title from first user message
|
|
201
|
-
const userMessages = session.messages.filter(msg => msg.role === 'user');
|
|
202
|
-
if (userMessages.length === 1 &&
|
|
203
|
-
message.role === 'user' &&
|
|
204
|
-
session.title === 'New Chat') {
|
|
205
|
-
session.title = this.generateTitle(message.content);
|
|
206
|
-
}
|
|
207
202
|
this.sessions.set(sessionId, session);
|
|
208
203
|
storageService.saveSession(session, userId);
|
|
209
204
|
return newMessage;
|
|
@@ -212,13 +207,13 @@ class ChatService {
|
|
|
212
207
|
// First verify the session belongs to the user
|
|
213
208
|
const session = this.getSession(sessionId, userId);
|
|
214
209
|
if (!session) {
|
|
215
|
-
|
|
210
|
+
logger.error('Session not found or access denied:', sessionId, userId);
|
|
216
211
|
return undefined;
|
|
217
212
|
}
|
|
218
213
|
// Find the message to update
|
|
219
214
|
const messageIndex = session.messages.findIndex(msg => msg.id === messageId);
|
|
220
215
|
if (messageIndex === -1) {
|
|
221
|
-
|
|
216
|
+
logger.error('Message not found:', messageId);
|
|
222
217
|
return undefined;
|
|
223
218
|
}
|
|
224
219
|
// Update the message
|
|
@@ -257,15 +252,6 @@ class ChatService {
|
|
|
257
252
|
storageService.deleteSession(session.id, userId);
|
|
258
253
|
});
|
|
259
254
|
}
|
|
260
|
-
generateTitle(content) {
|
|
261
|
-
// Generate a concise title from the first message
|
|
262
|
-
const words = content.trim().split(/\s+/).slice(0, 6);
|
|
263
|
-
let title = words.join(' ');
|
|
264
|
-
if (title.length > 50) {
|
|
265
|
-
title = title.substring(0, 47) + '...';
|
|
266
|
-
}
|
|
267
|
-
return title || 'New Chat';
|
|
268
|
-
}
|
|
269
255
|
getMessagesForContext(sessionId, maxMessages = 10) {
|
|
270
256
|
const session = this.sessions.get(sessionId);
|
|
271
257
|
if (!session)
|
|
@@ -295,7 +281,7 @@ class ChatService {
|
|
|
295
281
|
}
|
|
296
282
|
}
|
|
297
283
|
catch (error) {
|
|
298
|
-
|
|
284
|
+
logger.error(`updateSystemMessageForPersona: Error getting persona %s:`, personaId, error);
|
|
299
285
|
// Fallback to default system message
|
|
300
286
|
this.updateSystemMessageToDefault(session, userId);
|
|
301
287
|
}
|
|
@@ -363,7 +349,7 @@ class ChatService {
|
|
|
363
349
|
}
|
|
364
350
|
}
|
|
365
351
|
catch (error) {
|
|
366
|
-
|
|
352
|
+
logger.error(`Error processing persona interaction:`, error);
|
|
367
353
|
}
|
|
368
354
|
}
|
|
369
355
|
/**
|
|
@@ -448,7 +434,7 @@ Guidelines:
|
|
|
448
434
|
storageService.saveSession(session, userId);
|
|
449
435
|
}
|
|
450
436
|
catch (error) {
|
|
451
|
-
|
|
437
|
+
logger.error(`Error updating system message with memories:`, error);
|
|
452
438
|
}
|
|
453
439
|
}
|
|
454
440
|
/**
|
|
@@ -474,7 +460,7 @@ Guidelines:
|
|
|
474
460
|
);
|
|
475
461
|
}
|
|
476
462
|
catch (error) {
|
|
477
|
-
|
|
463
|
+
logger.error(`Error processing persona response:`, error);
|
|
478
464
|
}
|
|
479
465
|
}
|
|
480
466
|
/**
|