libre-webui 0.15.0 → 0.16.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 +26 -10
- package/backend/dist/db.d.ts.map +1 -1
- package/backend/dist/db.js +63 -0
- package/backend/dist/db.js.map +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +4 -4
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/routes/chat.d.ts.map +1 -1
- package/backend/dist/routes/chat.js +93 -10
- package/backend/dist/routes/chat.js.map +1 -1
- package/backend/dist/routes/imageGen.d.ts.map +1 -1
- package/backend/dist/routes/imageGen.js +52 -29
- package/backend/dist/routes/imageGen.js.map +1 -1
- package/backend/dist/routes/plugins.d.ts.map +1 -1
- package/backend/dist/routes/plugins.js +218 -41
- package/backend/dist/routes/plugins.js.map +1 -1
- package/backend/dist/routes/preferences.d.ts.map +1 -1
- package/backend/dist/routes/preferences.js +5 -4
- package/backend/dist/routes/preferences.js.map +1 -1
- package/backend/dist/routes/tts.js +2 -2
- package/backend/dist/routes/tts.js.map +1 -1
- package/backend/dist/services/assistantCompletionService.d.ts +2 -1
- package/backend/dist/services/assistantCompletionService.d.ts.map +1 -1
- package/backend/dist/services/assistantCompletionService.js +3 -1
- package/backend/dist/services/assistantCompletionService.js.map +1 -1
- package/backend/dist/services/chatGenerationService.d.ts +5 -3
- package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
- package/backend/dist/services/chatGenerationService.js +18 -6
- package/backend/dist/services/chatGenerationService.js.map +1 -1
- package/backend/dist/services/chatRequestService.d.ts +6 -4
- package/backend/dist/services/chatRequestService.d.ts.map +1 -1
- package/backend/dist/services/chatRequestService.js +10 -2
- package/backend/dist/services/chatRequestService.js.map +1 -1
- package/backend/dist/services/chatService.d.ts +2 -2
- package/backend/dist/services/chatService.d.ts.map +1 -1
- package/backend/dist/services/chatService.js +29 -17
- package/backend/dist/services/chatService.js.map +1 -1
- package/backend/dist/services/embeddingService.js +1 -1
- package/backend/dist/services/embeddingService.js.map +1 -1
- package/backend/dist/services/pluginActivationService.d.ts +11 -0
- package/backend/dist/services/pluginActivationService.d.ts.map +1 -0
- package/backend/dist/services/pluginActivationService.js +163 -0
- package/backend/dist/services/pluginActivationService.js.map +1 -0
- package/backend/dist/services/pluginCapabilityRegistryService.d.ts +1 -1
- package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -1
- package/backend/dist/services/pluginCapabilityRegistryService.js +1 -1
- package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -1
- package/backend/dist/services/pluginCredentialsService.d.ts +16 -8
- package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -1
- package/backend/dist/services/pluginCredentialsService.js +47 -14
- package/backend/dist/services/pluginCredentialsService.js.map +1 -1
- package/backend/dist/services/pluginEmbeddingService.d.ts +2 -2
- package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -1
- package/backend/dist/services/pluginEmbeddingService.js +33 -13
- package/backend/dist/services/pluginEmbeddingService.js.map +1 -1
- package/backend/dist/services/pluginImageGenerationService.d.ts +11 -7
- package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
- package/backend/dist/services/pluginImageGenerationService.js +265 -81
- package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
- package/backend/dist/services/pluginService.d.ts +55 -25
- package/backend/dist/services/pluginService.d.ts.map +1 -1
- package/backend/dist/services/pluginService.js +663 -174
- package/backend/dist/services/pluginService.js.map +1 -1
- package/backend/dist/services/pluginTTSService.d.ts +4 -4
- package/backend/dist/services/pluginTTSService.d.ts.map +1 -1
- package/backend/dist/services/pluginTTSService.js +24 -28
- package/backend/dist/services/pluginTTSService.js.map +1 -1
- package/backend/dist/services/pluginVariablesService.d.ts +6 -1
- package/backend/dist/services/pluginVariablesService.d.ts.map +1 -1
- package/backend/dist/services/pluginVariablesService.js +59 -1
- package/backend/dist/services/pluginVariablesService.js.map +1 -1
- package/backend/dist/services/preferencesService.d.ts +2 -2
- package/backend/dist/services/preferencesService.d.ts.map +1 -1
- package/backend/dist/services/preferencesService.js +78 -10
- package/backend/dist/services/preferencesService.js.map +1 -1
- package/backend/dist/services/titleGenerationService.d.ts +6 -4
- package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
- package/backend/dist/services/titleGenerationService.js +9 -5
- package/backend/dist/services/titleGenerationService.js.map +1 -1
- package/backend/dist/services/workAgentGuidance.d.ts +1 -0
- package/backend/dist/services/workAgentGuidance.d.ts.map +1 -1
- package/backend/dist/services/workAgentGuidance.js +2 -0
- package/backend/dist/services/workAgentGuidance.js.map +1 -1
- package/backend/dist/services/workAgentService.d.ts +5 -2
- package/backend/dist/services/workAgentService.d.ts.map +1 -1
- package/backend/dist/services/workAgentService.js +379 -53
- package/backend/dist/services/workAgentService.js.map +1 -1
- package/backend/dist/services/workModelProviderService.d.ts +8 -3
- package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
- package/backend/dist/services/workModelProviderService.js +293 -33
- package/backend/dist/services/workModelProviderService.js.map +1 -1
- package/backend/dist/services/workTaskService.d.ts +2 -0
- package/backend/dist/services/workTaskService.d.ts.map +1 -1
- package/backend/dist/services/workTaskService.js +89 -14
- package/backend/dist/services/workTaskService.js.map +1 -1
- package/backend/dist/storage.d.ts.map +1 -1
- package/backend/dist/storage.js +9 -6
- package/backend/dist/storage.js.map +1 -1
- package/backend/dist/storageMappers.d.ts +3 -0
- package/backend/dist/storageMappers.d.ts.map +1 -1
- package/backend/dist/storageMappers.js +3 -0
- package/backend/dist/storageMappers.js.map +1 -1
- package/backend/dist/types/index.d.ts +54 -1
- package/backend/dist/types/index.d.ts.map +1 -1
- package/backend/dist/types/index.js.map +1 -1
- package/backend/dist/types/work.d.ts +1 -1
- package/backend/dist/types/work.d.ts.map +1 -1
- package/backend/dist/utils/chatContext.d.ts +13 -1
- package/backend/dist/utils/chatContext.d.ts.map +1 -1
- package/backend/dist/utils/chatContext.js +52 -0
- package/backend/dist/utils/chatContext.js.map +1 -1
- package/backend/dist/utils/chatProviderSelection.d.ts +15 -0
- package/backend/dist/utils/chatProviderSelection.d.ts.map +1 -0
- package/backend/dist/utils/chatProviderSelection.js +59 -0
- package/backend/dist/utils/chatProviderSelection.js.map +1 -0
- package/backend/dist/utils/imageGenerationValidation.d.ts +3 -0
- package/backend/dist/utils/imageGenerationValidation.d.ts.map +1 -0
- package/backend/dist/utils/imageGenerationValidation.js +55 -0
- package/backend/dist/utils/imageGenerationValidation.js.map +1 -0
- package/backend/dist/utils/ollamaLibrary.d.ts.map +1 -1
- package/backend/dist/utils/ollamaLibrary.js +81 -8
- package/backend/dist/utils/ollamaLibrary.js.map +1 -1
- package/backend/dist/utils/openAIResponsesAdapter.d.ts +88 -0
- package/backend/dist/utils/openAIResponsesAdapter.d.ts.map +1 -0
- package/backend/dist/utils/openAIResponsesAdapter.js +521 -0
- package/backend/dist/utils/openAIResponsesAdapter.js.map +1 -0
- package/backend/dist/utils/pluginChatAdapter.d.ts +7 -4
- package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
- package/backend/dist/utils/pluginChatAdapter.js +33 -5
- package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
- package/backend/dist/utils/pluginChatContext.d.ts.map +1 -1
- package/backend/dist/utils/pluginChatContext.js +5 -1
- package/backend/dist/utils/pluginChatContext.js.map +1 -1
- package/backend/dist/utils/pluginConnectionVariables.d.ts +6 -0
- package/backend/dist/utils/pluginConnectionVariables.d.ts.map +1 -0
- package/backend/dist/utils/pluginConnectionVariables.js +52 -0
- package/backend/dist/utils/pluginConnectionVariables.js.map +1 -0
- package/backend/dist/utils/pluginDefinitionTrust.d.ts +9 -0
- package/backend/dist/utils/pluginDefinitionTrust.d.ts.map +1 -0
- package/backend/dist/utils/pluginDefinitionTrust.js +71 -0
- package/backend/dist/utils/pluginDefinitionTrust.js.map +1 -0
- package/backend/dist/utils/pluginStreamAdapter.d.ts +3 -0
- package/backend/dist/utils/pluginStreamAdapter.d.ts.map +1 -1
- package/backend/dist/utils/pluginStreamAdapter.js +410 -0
- package/backend/dist/utils/pluginStreamAdapter.js.map +1 -1
- package/backend/dist/utils/pluginStreaming.d.ts +7 -1
- package/backend/dist/utils/pluginStreaming.d.ts.map +1 -1
- package/backend/dist/utils/pluginStreaming.js +12 -1
- package/backend/dist/utils/pluginStreaming.js.map +1 -1
- package/backend/dist/utils/pluginValidation.d.ts +21 -2
- package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
- package/backend/dist/utils/pluginValidation.js +190 -17
- package/backend/dist/utils/pluginValidation.js.map +1 -1
- package/backend/dist/utils/pluginVariableValidation.d.ts +7 -0
- package/backend/dist/utils/pluginVariableValidation.d.ts.map +1 -1
- package/backend/dist/utils/pluginVariableValidation.js +79 -4
- package/backend/dist/utils/pluginVariableValidation.js.map +1 -1
- package/backend/dist/websocketServer.d.ts.map +1 -1
- package/backend/dist/websocketServer.js +16 -3
- package/backend/dist/websocketServer.js.map +1 -1
- package/backend/package.json +1 -1
- package/frontend/dist/assets/index-CKV9Lnj8.js +5 -0
- package/frontend/dist/assets/index-Dme2Ozol.css +1 -0
- package/frontend/dist/index.html +4 -4
- package/frontend/dist/js/{ArtifactContainer-CXfmVx8T.js → ArtifactContainer-B0uVR8Z9.js} +1 -1
- package/frontend/dist/js/{ArtifactDemoPage-B1_AuMd2.js → ArtifactDemoPage-DBVPHFxk.js} +1 -1
- package/frontend/dist/js/{ArtifactSlideOutPanel-C0eTguNL.js → ArtifactSlideOutPanel-Cg5kAwv9.js} +1 -1
- package/frontend/dist/js/ChatPage-CPHlIZqU.js +16 -0
- package/frontend/dist/js/{FirstTimeSetup-DOoZUaRs.js → FirstTimeSetup-DksL5arK.js} +1 -1
- package/frontend/dist/js/GalleryPage-1mdUGo_N.js +1 -0
- package/frontend/dist/js/LibreClawPage-qGr1Jy8p.js +1 -0
- package/frontend/dist/js/{ModelManagerModals-DneqFQJC.js → ModelManagerModals-DltRprHU.js} +1 -1
- package/frontend/dist/js/ModelSelector-CUnwRmNU.js +1 -0
- package/frontend/dist/js/ModelsPage-DMYVg3LT.js +2 -0
- package/frontend/dist/js/PersonasPage-Ct-KKW-j.js +13 -0
- package/frontend/dist/js/{RichMessageContent-WQLdJ5jq.js → RichMessageContent-CGBAcUES.js} +1 -1
- package/frontend/dist/js/SettingsModal-BVj3gFCS.js +1 -0
- package/frontend/dist/js/UserManagementPage-D3tLGtTu.js +1 -0
- package/frontend/dist/js/WorkPage-DhTjy-kf.js +2 -0
- package/frontend/dist/js/api-YWoSobKv.js +19 -0
- package/frontend/dist/js/{ar-CCVY0-7X.js → ar-KceI0PfT.js} +1 -1
- package/frontend/dist/js/{bn-CoU5CSph.js → bn-DsKo2dzS.js} +1 -1
- package/frontend/dist/js/{cs-CR6pjIbG.js → cs-6UKhKj0A.js} +1 -1
- package/frontend/dist/js/{da-CkyYITRz.js → da-CJgZ3YuL.js} +1 -1
- package/frontend/dist/js/{de-DwNANzB-.js → de-BZAmOuCT.js} +1 -1
- package/frontend/dist/js/{es-TxygiaVQ.js → es-CD4u7no9.js} +1 -1
- package/frontend/dist/js/{estree-DPzMpjFm.js → estree-PDLT672k.js} +1 -1
- package/frontend/dist/js/{fr-DvEqVpZr.js → fr-Cou2jOS3.js} +1 -1
- package/frontend/dist/js/{hi-CyrWkyh7.js → hi-ZxkbNCyB.js} +1 -1
- package/frontend/dist/js/{html-R50jmBYq.js → html-CkhF9wDQ.js} +1 -1
- package/frontend/dist/js/{id-PJjIGHGM.js → id-DT9CqaWQ.js} +1 -1
- package/frontend/dist/js/{is-ChXcN1tI.js → is-BWSbAIoq.js} +1 -1
- package/frontend/dist/js/{it-DsgM8-MJ.js → it-CdNoTXm3.js} +1 -1
- package/frontend/dist/js/{ja-ivtt80N2.js → ja-CIuQg0xv.js} +1 -1
- package/frontend/dist/js/{ko-B8l_Ice1.js → ko-BWRUjDOH.js} +1 -1
- package/frontend/dist/js/{markdown-C08x2H-K.js → markdown-B1iNUbse.js} +1 -1
- package/frontend/dist/js/{ms-DoUBI6Qi.js → ms-gJstIj2a.js} +1 -1
- package/frontend/dist/js/{nl-DsX5Hj8m.js → nl-CydjVNUw.js} +1 -1
- package/frontend/dist/js/{pl-Db_NKL4x.js → pl-DPN9mAa5.js} +1 -1
- package/frontend/dist/js/{pt-CpzBhb5J.js → pt-MRXGqIjQ.js} +1 -1
- package/frontend/dist/js/{ru-DCXvJyXJ.js → ru-CvQ9GkJF.js} +1 -1
- package/frontend/dist/js/{standalone-DpMZUvjd.js → standalone-CCd6rkf-.js} +1 -1
- package/frontend/dist/js/{sv-DcVoybc7.js → sv-BxS2fvhU.js} +1 -1
- package/frontend/dist/js/{th-D0G7HyQn.js → th-DMxyn6e4.js} +1 -1
- package/frontend/dist/js/{tr-CMDOh4Aq.js → tr-BTPldUaA.js} +1 -1
- package/frontend/dist/js/{typescript-B6y_hxBm.js → typescript-DKJ1uM5L.js} +1 -1
- package/frontend/dist/js/ui-vendor-CAFEDSaO.js +177 -0
- package/frontend/dist/js/{uk-D2MMa6LP.js → uk-BGxZOKgp.js} +1 -1
- package/frontend/dist/js/useBaseQuery-MuQj7vA5.js +1 -0
- package/frontend/dist/js/useQuery-CYGPkxWR.js +1 -0
- package/frontend/dist/js/{vi-B8uHT8yh.js → vi-82JkwFsQ.js} +1 -1
- package/frontend/dist/js/{zh-CNqa_15K.js → zh-Bxxfwci3.js} +1 -1
- package/package.json +3 -2
- package/plugins/github.json +1 -2
- package/plugins/huggingface.json +30 -30
- package/plugins/mlx-lm.json +55 -0
- package/plugins/openai.json +53 -22
- package/frontend/dist/assets/index-Bv-twCuY.css +0 -1
- package/frontend/dist/assets/index-uCHBH_PM.js +0 -5
- package/frontend/dist/js/ChatPage-1bK0gDBy.js +0 -16
- package/frontend/dist/js/GalleryPage-6WwyH3kt.js +0 -1
- package/frontend/dist/js/LibreClawPage-ChHVfPLb.js +0 -1
- package/frontend/dist/js/ModelsPage-Dw6wdiMt.js +0 -2
- package/frontend/dist/js/PersonasPage-BxdI2e1-.js +0 -13
- package/frontend/dist/js/SettingsModal-C-cK6TNb.js +0 -1
- package/frontend/dist/js/UserManagementPage-DqjNXPkf.js +0 -1
- package/frontend/dist/js/WorkPage-MGR3odo6.js +0 -2
- package/frontend/dist/js/api-DD5qhhLf.js +0 -19
- package/frontend/dist/js/ui-vendor-DUqvZsfs.js +0 -177
- package/frontend/dist/js/useBaseQuery-Duml3DYp.js +0 -1
- package/frontend/dist/js/useQuery-C0lZwNoc.js +0 -1
|
@@ -0,0 +1,59 @@
|
|
|
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
|
+
export class ChatProviderSelectionError extends Error {
|
|
18
|
+
constructor(message) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.name = 'ChatProviderSelectionError';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function normalizeChatProviderSelection(selection) {
|
|
24
|
+
if (!selection) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
const rawProviderType = selection.providerType;
|
|
28
|
+
const rawProviderId = selection.providerId;
|
|
29
|
+
const hasProviderType = rawProviderType !== undefined &&
|
|
30
|
+
rawProviderType !== null &&
|
|
31
|
+
rawProviderType !== '';
|
|
32
|
+
const hasProviderId = rawProviderId !== undefined &&
|
|
33
|
+
rawProviderId !== null &&
|
|
34
|
+
String(rawProviderId).trim() !== '';
|
|
35
|
+
if (!hasProviderType) {
|
|
36
|
+
if (hasProviderId) {
|
|
37
|
+
throw new ChatProviderSelectionError('providerId requires providerType to be set.');
|
|
38
|
+
}
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
if (rawProviderType !== 'ollama' && rawProviderType !== 'plugin') {
|
|
42
|
+
throw new ChatProviderSelectionError('providerType must be "ollama" or "plugin".');
|
|
43
|
+
}
|
|
44
|
+
if (rawProviderType === 'ollama') {
|
|
45
|
+
if (hasProviderId) {
|
|
46
|
+
throw new ChatProviderSelectionError('providerId is only valid when providerType is "plugin".');
|
|
47
|
+
}
|
|
48
|
+
return { providerType: 'ollama' };
|
|
49
|
+
}
|
|
50
|
+
if (typeof rawProviderId !== 'string' || !rawProviderId.trim()) {
|
|
51
|
+
throw new ChatProviderSelectionError('providerId is required when providerType is "plugin".');
|
|
52
|
+
}
|
|
53
|
+
const providerId = rawProviderId.trim();
|
|
54
|
+
if (providerId.length > 200) {
|
|
55
|
+
throw new ChatProviderSelectionError('providerId exceeds the 200 character limit.');
|
|
56
|
+
}
|
|
57
|
+
return { providerType: 'plugin', providerId };
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=chatProviderSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatProviderSelection.js","sourceRoot":"","sources":["../../src/utils/chatProviderSelection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAYH,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACnD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAOD,MAAM,UAAU,8BAA8B,CAC5C,SAAqE;IAErE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC;IAC/C,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC;IAC3C,MAAM,eAAe,GACnB,eAAe,KAAK,SAAS;QAC7B,eAAe,KAAK,IAAI;QACxB,eAAe,KAAK,EAAE,CAAC;IACzB,MAAM,aAAa,GACjB,aAAa,KAAK,SAAS;QAC3B,aAAa,KAAK,IAAI;QACtB,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IAEtC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,IAAI,0BAA0B,CAClC,6CAA6C,CAC9C,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,eAAe,KAAK,QAAQ,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;QACjE,MAAM,IAAI,0BAA0B,CAClC,4CAA4C,CAC7C,CAAC;IACJ,CAAC;IAED,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;QACjC,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,IAAI,0BAA0B,CAClC,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;IACpC,CAAC;IAED,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/D,MAAM,IAAI,0BAA0B,CAClC,uDAAuD,CACxD,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,UAAU,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,0BAA0B,CAClC,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageGenerationValidation.d.ts","sourceRoot":"","sources":["../../src/utils/imageGenerationValidation.ts"],"names":[],"mappings":"AAiBA,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,GACb,MAAM,GAAG,SAAS,CAepB;AAsBD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAQ1E"}
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
+
export function normalizeImageGenerationCount(value) {
|
|
18
|
+
if (value === undefined) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
if (typeof value !== 'number' ||
|
|
22
|
+
!Number.isInteger(value) ||
|
|
23
|
+
value < 1 ||
|
|
24
|
+
value > 10) {
|
|
25
|
+
throw new RangeError('n must be an integer between 1 and 10');
|
|
26
|
+
}
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
const IMAGE_MEDIA_TYPE_ALIASES = {
|
|
30
|
+
'image/jpg': 'image/jpeg',
|
|
31
|
+
'image/x-png': 'image/png',
|
|
32
|
+
};
|
|
33
|
+
const SAFE_IMAGE_MEDIA_TYPES = new Set([
|
|
34
|
+
'image/apng',
|
|
35
|
+
'image/avif',
|
|
36
|
+
'image/bmp',
|
|
37
|
+
'image/gif',
|
|
38
|
+
'image/heic',
|
|
39
|
+
'image/heif',
|
|
40
|
+
'image/jpeg',
|
|
41
|
+
'image/png',
|
|
42
|
+
'image/tiff',
|
|
43
|
+
'image/vnd.microsoft.icon',
|
|
44
|
+
'image/webp',
|
|
45
|
+
'image/x-icon',
|
|
46
|
+
]);
|
|
47
|
+
export function normalizeImageMediaType(value) {
|
|
48
|
+
if (typeof value !== 'string') {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
const mediaType = value.split(';', 1)[0].trim().toLowerCase();
|
|
52
|
+
const normalized = IMAGE_MEDIA_TYPE_ALIASES[mediaType] || mediaType;
|
|
53
|
+
return SAFE_IMAGE_MEDIA_TYPES.has(normalized) ? normalized : undefined;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=imageGenerationValidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageGenerationValidation.js","sourceRoot":"","sources":["../../src/utils/imageGenerationValidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,UAAU,6BAA6B,CAC3C,KAAc;IAEd,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QACxB,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,EAAE,EACV,CAAC;QACD,MAAM,IAAI,UAAU,CAAC,uCAAuC,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,wBAAwB,GAAqC;IACjE,WAAW,EAAE,YAAY;IACzB,aAAa,EAAE,WAAW;CAC3B,CAAC;AAEF,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,0BAA0B;IAC1B,YAAY;IACZ,cAAc;CACf,CAAC,CAAC;AAEH,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9D,MAAM,UAAU,GAAG,wBAAwB,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;IACpE,OAAO,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACzE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollamaLibrary.d.ts","sourceRoot":"","sources":["../../src/utils/ollamaLibrary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ollamaLibrary.d.ts","sourceRoot":"","sources":["../../src/utils/ollamaLibrary.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAwMD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAuCrE;AAyFD,wBAAsB,sBAAsB,CAAC,EAC3C,MAAW,EACX,IAAgB,EAChB,QAAa,EACb,KAAU,GACX,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA4CjD"}
|
|
@@ -14,6 +14,16 @@
|
|
|
14
14
|
* See the License for the specific language governing permissions and
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
|
+
import { createLogger } from './logger.js';
|
|
18
|
+
const logger = createLogger('utils:ollama-library');
|
|
19
|
+
const MODEL_CAPABILITY_TAGS = new Set([
|
|
20
|
+
'audio',
|
|
21
|
+
'cloud',
|
|
22
|
+
'embedding',
|
|
23
|
+
'thinking',
|
|
24
|
+
'tools',
|
|
25
|
+
'vision',
|
|
26
|
+
]);
|
|
17
27
|
const CURATED_MODELS = [
|
|
18
28
|
{
|
|
19
29
|
name: 'deepseek-r1',
|
|
@@ -136,23 +146,82 @@ const CURATED_MODELS = [
|
|
|
136
146
|
tags: ['uncensored', 'moe'],
|
|
137
147
|
},
|
|
138
148
|
];
|
|
149
|
+
const decodeHtmlEntities = (value) => value.replace(/&(#x[\da-f]+|#\d+|amp|apos|gt|lt|nbsp|quot);/gi, (entity, code) => {
|
|
150
|
+
const normalized = code.toLowerCase();
|
|
151
|
+
if (normalized.startsWith('#x')) {
|
|
152
|
+
return String.fromCodePoint(parseInt(normalized.slice(2), 16));
|
|
153
|
+
}
|
|
154
|
+
if (normalized.startsWith('#')) {
|
|
155
|
+
return String.fromCodePoint(parseInt(normalized.slice(1), 10));
|
|
156
|
+
}
|
|
157
|
+
return ({
|
|
158
|
+
amp: '&',
|
|
159
|
+
apos: "'",
|
|
160
|
+
gt: '>',
|
|
161
|
+
lt: '<',
|
|
162
|
+
nbsp: ' ',
|
|
163
|
+
quot: '"',
|
|
164
|
+
}[normalized] || entity);
|
|
165
|
+
});
|
|
166
|
+
const htmlText = (value) => decodeHtmlEntities(value.replace(/<[^>]*>/g, ' '))
|
|
167
|
+
.replace(/\s+/g, ' ')
|
|
168
|
+
.trim();
|
|
169
|
+
const parseModelBadges = (cardHtml) => {
|
|
170
|
+
const badgesHtml = cardHtml.match(/<div\b[^>]*class=["'][^"']*\bflex-wrap\b[^"']*["'][^>]*>([\s\S]*?)<\/div>/i)?.[1] || '';
|
|
171
|
+
const sizes = [];
|
|
172
|
+
const tags = [];
|
|
173
|
+
const badgePattern = /<span\b[^>]*class=["']([^"']*)["'][^>]*>([\s\S]*?)<\/span>/gi;
|
|
174
|
+
let badgeMatch;
|
|
175
|
+
while ((badgeMatch = badgePattern.exec(badgesHtml)) !== null) {
|
|
176
|
+
const label = htmlText(badgeMatch[2]).toLowerCase();
|
|
177
|
+
if (!label)
|
|
178
|
+
continue;
|
|
179
|
+
if (MODEL_CAPABILITY_TAGS.has(label) ||
|
|
180
|
+
!badgeMatch[1].includes('text-blue-600')) {
|
|
181
|
+
if (!tags.includes(label))
|
|
182
|
+
tags.push(label);
|
|
183
|
+
}
|
|
184
|
+
else if (!sizes.includes(label)) {
|
|
185
|
+
sizes.push(label);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return { sizes, tags };
|
|
189
|
+
};
|
|
190
|
+
const parsePullCount = (cardHtml) => {
|
|
191
|
+
const match = cardHtml.match(/<span\b[^>]*class=["'][^"']*\bflex items-center\b[^"']*["'][^>]*>[\s\S]*?<span\b[^>]*>([^<]+)<\/span>\s*<span\b[^>]*>[^<]*Pulls?<\/span>/i);
|
|
192
|
+
return match ? htmlText(match[1]) : undefined;
|
|
193
|
+
};
|
|
139
194
|
export function parseOllamaSearchHtml(html) {
|
|
140
195
|
const models = [];
|
|
141
|
-
const modelPattern = /<a
|
|
196
|
+
const modelPattern = /<a\b[^>]*href=["']\/library\/([^"'?#]+)["'][^>]*>([\s\S]*?)<\/a>/gi;
|
|
142
197
|
let match;
|
|
143
198
|
while ((match = modelPattern.exec(html)) !== null) {
|
|
144
|
-
|
|
145
|
-
|
|
199
|
+
let name = match[1];
|
|
200
|
+
try {
|
|
201
|
+
name = decodeURIComponent(name);
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
// Keep the safe URL path segment when it is not valid percent encoding.
|
|
205
|
+
}
|
|
146
206
|
if (models.some(model => model.name === name))
|
|
147
207
|
continue;
|
|
148
|
-
const
|
|
208
|
+
const cardHtml = match[2];
|
|
209
|
+
const descriptionMatch = cardHtml.match(/<p\b[^>]*class=["'][^"']*\btext-neutral-800\b[^"']*["'][^>]*>([\s\S]*?)<\/p>/i);
|
|
210
|
+
const { sizes, tags } = parseModelBadges(cardHtml);
|
|
211
|
+
const category = tags.includes('embedding')
|
|
212
|
+
? 'embedding'
|
|
213
|
+
: tags.includes('vision')
|
|
214
|
+
? 'vision'
|
|
215
|
+
: tags.includes('thinking')
|
|
216
|
+
? 'reasoning'
|
|
217
|
+
: inferOllamaModelCategory(name);
|
|
149
218
|
models.push({
|
|
150
219
|
name,
|
|
151
|
-
description: '',
|
|
220
|
+
description: descriptionMatch ? htmlText(descriptionMatch[1]) : '',
|
|
152
221
|
category,
|
|
153
|
-
sizes
|
|
154
|
-
pulls,
|
|
155
|
-
tags: [category],
|
|
222
|
+
sizes,
|
|
223
|
+
pulls: parsePullCount(cardHtml),
|
|
224
|
+
tags: Array.from(new Set([category, ...tags])),
|
|
156
225
|
});
|
|
157
226
|
}
|
|
158
227
|
return models;
|
|
@@ -244,8 +313,12 @@ export async function getOllamaLibraryModels({ search = '', sort = 'popular', ca
|
|
|
244
313
|
remoteModels = [];
|
|
245
314
|
}
|
|
246
315
|
if (remoteModels.length === 0) {
|
|
316
|
+
logger.warn('The live Ollama catalogue returned no readable model cards; using the curated fallback.');
|
|
247
317
|
remoteModels = filterCuratedModels(search, category);
|
|
248
318
|
}
|
|
319
|
+
else {
|
|
320
|
+
logger.debug(`Loaded ${remoteModels.length} models from ollama.com`);
|
|
321
|
+
}
|
|
249
322
|
return category === 'cloud'
|
|
250
323
|
? normalizeCloudModels(remoteModels)
|
|
251
324
|
: remoteModels;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollamaLibrary.js","sourceRoot":"","sources":["../../src/utils/ollamaLibrary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"ollamaLibrary.js","sourceRoot":"","sources":["../../src/utils/ollamaLibrary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { PluginResponse } from '../types/index.js';
|
|
2
|
+
type JsonObject = Record<string, unknown>;
|
|
3
|
+
export declare const OPENAI_RESPONSES_OUTPUT_ITEMS_METADATA_KEY = "openAIResponsesOutputItems";
|
|
4
|
+
export declare const OPENAI_RESPONSES_INCOMPLETE_REASON_METADATA_KEY = "openAIResponsesIncompleteReason";
|
|
5
|
+
export declare const OPENAI_RESPONSES_STATE_SCOPE_METADATA_KEY = "openAIResponsesStateScope";
|
|
6
|
+
export declare const OPENAI_RESPONSES_STATE_DROPPED_METADATA_KEY = "openAIResponsesStateDropped";
|
|
7
|
+
export declare const OPENAI_RESPONSES_REPLAY_MAX_ITEMS = 64;
|
|
8
|
+
export declare const OPENAI_RESPONSES_REPLAY_MAX_BYTES = 90000;
|
|
9
|
+
export interface OpenAICompatibleChatMessage {
|
|
10
|
+
role: string;
|
|
11
|
+
content?: unknown;
|
|
12
|
+
name?: string;
|
|
13
|
+
tool_call_id?: string;
|
|
14
|
+
call_id?: string;
|
|
15
|
+
tool_calls?: unknown;
|
|
16
|
+
providerMetadata?: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
export interface OpenAIResponsesPayloadOptions {
|
|
19
|
+
tools?: readonly JsonObject[];
|
|
20
|
+
tool_choice?: unknown;
|
|
21
|
+
max_tokens?: number;
|
|
22
|
+
temperature?: number;
|
|
23
|
+
top_p?: number;
|
|
24
|
+
stream?: boolean;
|
|
25
|
+
stateScope?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface OpenAIResponsesPayload extends JsonObject {
|
|
28
|
+
model: string;
|
|
29
|
+
input: JsonObject[];
|
|
30
|
+
store: false;
|
|
31
|
+
}
|
|
32
|
+
export interface NormalizedOpenAIResponsesToolCall {
|
|
33
|
+
id: string;
|
|
34
|
+
call_id: string;
|
|
35
|
+
type: 'function';
|
|
36
|
+
function: {
|
|
37
|
+
name: string;
|
|
38
|
+
arguments: string;
|
|
39
|
+
};
|
|
40
|
+
providerMetadata?: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
export type NormalizedOpenAIResponsesResponse = Omit<PluginResponse, 'choices'> & {
|
|
43
|
+
choices: Array<{
|
|
44
|
+
index: number;
|
|
45
|
+
message: {
|
|
46
|
+
role: 'assistant';
|
|
47
|
+
content: string;
|
|
48
|
+
reasoning_content?: string;
|
|
49
|
+
tool_calls?: NormalizedOpenAIResponsesToolCall[];
|
|
50
|
+
};
|
|
51
|
+
finish_reason: string;
|
|
52
|
+
}>;
|
|
53
|
+
};
|
|
54
|
+
export declare function openAIResponsesOutputItemsValidationError(value: unknown): string | undefined;
|
|
55
|
+
export declare function boundedOpenAIResponsesOutputItems(value: unknown): {
|
|
56
|
+
items?: JsonObject[];
|
|
57
|
+
dropped: boolean;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Converts Chat Completions-style history into stateless Responses API input.
|
|
61
|
+
* Assistant tool calls and tool results become sibling typed input items so
|
|
62
|
+
* their call IDs remain correlated without relying on stored response state.
|
|
63
|
+
*/
|
|
64
|
+
export declare function toOpenAIResponsesInput(messages: readonly OpenAICompatibleChatMessage[], expectedStateScope?: string): JsonObject[];
|
|
65
|
+
/**
|
|
66
|
+
* Flattens Chat Completions function tools into the shape accepted by the
|
|
67
|
+
* Responses API. Non-function tools are preserved for compatible providers.
|
|
68
|
+
*/
|
|
69
|
+
export declare function toOpenAIResponsesTools(tools?: readonly JsonObject[]): JsonObject[];
|
|
70
|
+
/**
|
|
71
|
+
* Builds a stateless Responses API request from the fields already used by
|
|
72
|
+
* OpenAI-compatible Chat Completions providers.
|
|
73
|
+
*/
|
|
74
|
+
export declare function buildOpenAIResponsesPayload(model: string, messages: readonly OpenAICompatibleChatMessage[], options?: OpenAIResponsesPayloadOptions): OpenAIResponsesPayload;
|
|
75
|
+
/**
|
|
76
|
+
* Converts a completed Responses API object into Libre WebUI's existing
|
|
77
|
+
* Chat Completions-shaped normalized response.
|
|
78
|
+
*/
|
|
79
|
+
export declare function normalizeOpenAIResponsesResponse(value: unknown, fallbackModel: string, stateScope?: string): NormalizedOpenAIResponsesResponse;
|
|
80
|
+
export declare function createOpenAIResponsesStateScope(providerId: string, model: string, endpoint: string, credentialFingerprint: string): string;
|
|
81
|
+
/**
|
|
82
|
+
* Produce a one-way, domain-separated identity for the credential selected by
|
|
83
|
+
* a provider request. Only this digest is included in replay/routing scopes;
|
|
84
|
+
* the credential itself is never persisted or returned to clients.
|
|
85
|
+
*/
|
|
86
|
+
export declare function createPluginCredentialFingerprint(apiKey: string | null): string;
|
|
87
|
+
export {};
|
|
88
|
+
//# sourceMappingURL=openAIResponsesAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openAIResponsesAdapter.d.ts","sourceRoot":"","sources":["../../src/utils/openAIResponsesAdapter.ts"],"names":[],"mappings":"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"}
|