@solidxai/core-ui 0.1.7-beta.8 → 0.1.7
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 +215 -0
- package/dist/components/auth/SolidLogin.js +1 -1
- package/dist/components/auth/SolidLogin.js.map +1 -1
- package/dist/components/auth/SolidLogin.tsx +2 -2
- package/dist/components/common/GeneralSettings.d.ts.map +1 -1
- package/dist/components/common/GeneralSettings.js +79 -45
- package/dist/components/common/GeneralSettings.js.map +1 -1
- package/dist/components/common/GeneralSettings.tsx +94 -45
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts +33 -7
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts.map +1 -1
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js +132 -40
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js.map +1 -1
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.tsx +373 -55
- package/dist/components/core/chatter/SolidChatter.d.ts +2 -1
- package/dist/components/core/chatter/SolidChatter.d.ts.map +1 -1
- package/dist/components/core/chatter/SolidChatter.js +2 -2
- package/dist/components/core/chatter/SolidChatter.js.map +1 -1
- package/dist/components/core/chatter/SolidChatter.tsx +2 -1
- package/dist/components/core/chatter/SolidChatterHeader.d.ts +1 -0
- package/dist/components/core/chatter/SolidChatterHeader.d.ts.map +1 -1
- package/dist/components/core/chatter/SolidChatterHeader.js +3 -3
- package/dist/components/core/chatter/SolidChatterHeader.js.map +1 -1
- package/dist/components/core/chatter/SolidChatterHeader.tsx +4 -3
- package/dist/components/core/chatter/SolidMessageComposer.d.ts +2 -1
- package/dist/components/core/chatter/SolidMessageComposer.d.ts.map +1 -1
- package/dist/components/core/chatter/SolidMessageComposer.js +3 -1
- package/dist/components/core/chatter/SolidMessageComposer.js.map +1 -1
- package/dist/components/core/chatter/SolidMessageComposer.tsx +3 -1
- package/dist/components/core/common/SolidViewLayoutManager.d.ts +17 -0
- package/dist/components/core/common/SolidViewLayoutManager.d.ts.map +1 -1
- package/dist/components/core/common/SolidViewLayoutManager.js +58 -1
- package/dist/components/core/common/SolidViewLayoutManager.js.map +1 -1
- package/dist/components/core/common/SolidViewLayoutManager.ts +43 -2
- package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.d.ts +3 -0
- package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.js +92 -0
- package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.js.map +1 -0
- package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.tsx +68 -0
- package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.d.ts +3 -0
- package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.js +87 -0
- package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.js.map +1 -0
- package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.tsx +70 -0
- package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.d.ts +3 -0
- package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.js +111 -0
- package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.js.map +1 -0
- package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.tsx +122 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.d.ts +3 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.js +10 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.js.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.tsx +21 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.d.ts +8 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.js +62 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.js.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.tsx +27 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.d.ts +3 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.js +8 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.js.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.tsx +15 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.d.ts +3 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.js +158 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.js.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.tsx +185 -0
- package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.d.ts +17 -0
- package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.js +52 -0
- package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.js.map +1 -0
- package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.tsx +83 -0
- package/dist/components/core/locales/SolidChatterLocaleTabView.d.ts.map +1 -1
- package/dist/components/core/locales/SolidChatterLocaleTabView.js +7 -5
- package/dist/components/core/locales/SolidChatterLocaleTabView.js.map +1 -1
- package/dist/components/core/locales/SolidChatterLocaleTabView.tsx +3 -0
- package/dist/components/core/users/ApiKeysTab/ApiKeysTab.css +38 -0
- package/dist/components/core/users/ApiKeysTab/ApiKeysTab.d.ts +1 -0
- package/dist/components/core/users/ApiKeysTab/ApiKeysTab.d.ts.map +1 -1
- package/dist/components/core/users/ApiKeysTab/ApiKeysTab.js +4 -3
- package/dist/components/core/users/ApiKeysTab/ApiKeysTab.js.map +1 -1
- package/dist/components/core/users/ApiKeysTab/ApiKeysTab.tsx +13 -3
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.d.ts +2 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.d.ts.map +1 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js +6 -5
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js.map +1 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.tsx +6 -7
- package/dist/components/core/users/CreateUser.d.ts.map +1 -1
- package/dist/components/core/users/CreateUser.js +89 -35
- package/dist/components/core/users/CreateUser.js.map +1 -1
- package/dist/components/core/users/CreateUser.tsx +291 -165
- package/dist/components/layout/SolidAiStudioLayout.d.ts.map +1 -1
- package/dist/components/layout/SolidAiStudioLayout.js +123 -8
- package/dist/components/layout/SolidAiStudioLayout.js.map +1 -1
- package/dist/components/layout/SolidAiStudioLayout.tsx +70 -6
- package/dist/components/shad-cn-ui/SolidTabs.d.ts +2 -1
- package/dist/components/shad-cn-ui/SolidTabs.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidTabs.js +5 -5
- package/dist/components/shad-cn-ui/SolidTabs.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidTabs.tsx +6 -0
- package/dist/helpers/registry.d.ts.map +1 -1
- package/dist/helpers/registry.js +10 -6
- package/dist/helpers/registry.js.map +1 -1
- package/dist/helpers/registry.ts +11 -7
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/index.ts +11 -0
- package/dist/redux/api/apiKeyApi.d.ts +8 -1
- package/dist/redux/api/apiKeyApi.d.ts.map +1 -1
- package/dist/redux/api/apiKeyApi.js +12 -1
- package/dist/redux/api/apiKeyApi.js.map +1 -1
- package/dist/redux/api/apiKeyApi.ts +9 -0
- package/dist/redux/store/defaultStoreConfig.d.ts +16 -1
- package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
- package/dist/redux/store/defaultStoreConfig.js +3 -1
- package/dist/redux/store/defaultStoreConfig.js.map +1 -1
- package/dist/redux/store/defaultStoreConfig.ts +3 -1
- package/dist/routes/guards/GuestGuard.d.ts +2 -0
- package/dist/routes/guards/GuestGuard.d.ts.map +1 -0
- package/dist/routes/guards/GuestGuard.js +18 -0
- package/dist/routes/guards/GuestGuard.js.map +1 -0
- package/dist/routes/guards/GuestGuard.tsx +20 -0
- package/dist/routes/solidRoutes.d.ts.map +1 -1
- package/dist/routes/solidRoutes.js +2 -1
- package/dist/routes/solidRoutes.js.map +1 -1
- package/dist/routes/solidRoutes.tsx +2 -1
- package/dist/types/solid-core.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { useFormik } from 'formik';
|
|
2
2
|
import { useCallback, useEffect, useState } from 'react'
|
|
3
3
|
import { CancelButton } from './CancelButton';
|
|
4
|
+
import { ApiKeysTab } from '../core/users/ApiKeysTab';
|
|
5
|
+
import { useSession } from '../../hooks/useSession';
|
|
4
6
|
import { SolidButton, SolidDivider, SolidInput, SolidSegmentedControl, SolidSwitch, SolidTabGroup, SolidTextarea } from '../shad-cn-ui';
|
|
5
7
|
import { usePathname } from "../../hooks/usePathname";
|
|
6
8
|
import SolidLogo from '../../resources/images/SolidXLogo.svg'
|
|
@@ -11,7 +13,7 @@ import { useDropzone } from 'react-dropzone';
|
|
|
11
13
|
import { SettingDropzoneActivePlaceholder } from './SolidSettings/SettingDropzoneActivePlaceholder';
|
|
12
14
|
import { SolidUploadedImage } from './SolidSettings/SolidUploadedImage';
|
|
13
15
|
import { SettingsImageRemoveButton } from './SolidSettings/SettingsImageRemoveButton';
|
|
14
|
-
import {
|
|
16
|
+
import { ModelConfigTab, ProvidersTab, ModelBehavior, ModelEntry, SolidAiConfig, ensureBuiltInProviders } from './SolidSettings/LlmSettings/AiModelConfigTab';
|
|
15
17
|
import { useDispatch, useSelector } from 'react-redux';
|
|
16
18
|
import { ERROR_MESSAGES } from '../../constants/error-messages';
|
|
17
19
|
import { useBulkUpdateSolidSettingsMutation, useLazyGetSolidSettingsQuery } from '../../redux/api/solidSettingsApi';
|
|
@@ -20,6 +22,7 @@ import { showToast } from '../../redux/features/toastSlice';
|
|
|
20
22
|
|
|
21
23
|
|
|
22
24
|
export const GeneralSettings = () => {
|
|
25
|
+
const { data: session } = useSession();
|
|
23
26
|
const [appLogoPreview, setAppLogoPreview] = useState<string | null>(null);
|
|
24
27
|
const [companyLogoPreview, setCompanyLogoPreview] = useState<string | null>(null);
|
|
25
28
|
const [authScreenRightBackgroundImagePreview, setAuthScreenRightBackgroundImagePreview] = useState<string | null>(null);
|
|
@@ -66,10 +69,23 @@ export const GeneralSettings = () => {
|
|
|
66
69
|
authScreenRightBackgroundImage: solidSettingsData?.data?.authScreenRightBackgroundImage ?? null,
|
|
67
70
|
authScreenLeftBackgroundImage: solidSettingsData?.data?.authScreenLeftBackgroundImage ?? null,
|
|
68
71
|
authScreenCenterBackgroundImage: solidSettingsData?.data?.authScreenCenterBackgroundImage ?? null,
|
|
69
|
-
solidXGenAiCodeBuilderConfig:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
72
|
+
solidXGenAiCodeBuilderConfig: (() => {
|
|
73
|
+
const defaultAiConfig: SolidAiConfig = {
|
|
74
|
+
models: {
|
|
75
|
+
default: { providerId: "", model: "", behavior: { streaming: false, custom: "" } },
|
|
76
|
+
fast: { providerId: "", model: "", behavior: { streaming: false, custom: "" } },
|
|
77
|
+
},
|
|
78
|
+
providers: {},
|
|
79
|
+
};
|
|
80
|
+
const raw = solidSettingsData?.data?.solidXGenAiCodeBuilderConfig;
|
|
81
|
+
if (!raw) return defaultAiConfig;
|
|
82
|
+
try {
|
|
83
|
+
const parsed = typeof raw === "string" ? JSON.parse(raw) : raw;
|
|
84
|
+
return (parsed && typeof parsed === "object" ? parsed : defaultAiConfig) as SolidAiConfig;
|
|
85
|
+
} catch {
|
|
86
|
+
return defaultAiConfig;
|
|
87
|
+
}
|
|
88
|
+
})(),
|
|
73
89
|
// llmProvider: solidSettingsData?.data?.llmProvider ?? null,
|
|
74
90
|
// llModelName: solidSettingsData?.data?.llModelName ?? null,
|
|
75
91
|
// llmProviderApiKey: solidSettingsData?.data?.llmProviderApiKey ?? null,
|
|
@@ -339,11 +355,8 @@ export const GeneralSettings = () => {
|
|
|
339
355
|
|
|
340
356
|
|
|
341
357
|
|
|
342
|
-
const
|
|
343
|
-
formik.setFieldValue("solidXGenAiCodeBuilderConfig",
|
|
344
|
-
...formik.values.solidXGenAiCodeBuilderConfig,
|
|
345
|
-
[modelType]: config,
|
|
346
|
-
});
|
|
358
|
+
const handleAiConfigChange = (newConfig: SolidAiConfig) => {
|
|
359
|
+
formik.setFieldValue("solidXGenAiCodeBuilderConfig", newConfig);
|
|
347
360
|
};
|
|
348
361
|
|
|
349
362
|
|
|
@@ -995,10 +1008,14 @@ export const GeneralSettings = () => {
|
|
|
995
1008
|
}
|
|
996
1009
|
{pathname.includes("ai-settings") &&
|
|
997
1010
|
<AiSettingsSection
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1011
|
+
aiConfig={formik.values.solidXGenAiCodeBuilderConfig as SolidAiConfig}
|
|
1012
|
+
onAiConfigChange={handleAiConfigChange}
|
|
1013
|
+
/>
|
|
1014
|
+
}
|
|
1015
|
+
{pathname.includes("api-keys") && session?.user?.id &&
|
|
1016
|
+
<ApiKeysTab
|
|
1017
|
+
userId={session.user.id}
|
|
1018
|
+
canCreate={session?.user?.isAllowedToGenerateApiKeys ?? false}
|
|
1002
1019
|
/>
|
|
1003
1020
|
}
|
|
1004
1021
|
</div>
|
|
@@ -1009,48 +1026,80 @@ export const GeneralSettings = () => {
|
|
|
1009
1026
|
)
|
|
1010
1027
|
}
|
|
1011
1028
|
|
|
1012
|
-
const AI_TABS = [
|
|
1013
|
-
{ key: "fastModel" as const, label: "Fast Model", title: "Fast Model" },
|
|
1014
|
-
{ key: "defaultProvider" as const, label: "Intelligent Model", title: "Intelligent Model (Reasoning & tool use)" },
|
|
1015
|
-
];
|
|
1016
|
-
|
|
1017
1029
|
interface AiSettingsSectionProps {
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
onFastModelChange: (config: ModelConfig) => void;
|
|
1021
|
-
onIntelligentModelChange: (config: ModelConfig) => void;
|
|
1030
|
+
aiConfig: SolidAiConfig;
|
|
1031
|
+
onAiConfigChange: (config: SolidAiConfig) => void;
|
|
1022
1032
|
}
|
|
1023
1033
|
|
|
1024
|
-
const
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
)
|
|
1041
|
-
|
|
1042
|
-
|
|
1034
|
+
const DEFAULT_BEHAVIOR: ModelBehavior = { streaming: false, custom: "" };
|
|
1035
|
+
const DEFAULT_MODEL_ENTRY: ModelEntry = { providerId: "", model: "", behavior: DEFAULT_BEHAVIOR };
|
|
1036
|
+
|
|
1037
|
+
const AiSettingsSection = ({ aiConfig, onAiConfigChange }: AiSettingsSectionProps) => {
|
|
1038
|
+
const [activeTab, setActiveTab] = useState<"providers" | "default" | "fast">("providers");
|
|
1039
|
+
const [showAddProvider, setShowAddProvider] = useState(false);
|
|
1040
|
+
|
|
1041
|
+
const providers = ensureBuiltInProviders(aiConfig.providers ?? {});
|
|
1042
|
+
|
|
1043
|
+
const tabItems = [
|
|
1044
|
+
{
|
|
1045
|
+
value: "providers" as const,
|
|
1046
|
+
label: "Providers",
|
|
1047
|
+
content: (
|
|
1048
|
+
<ProvidersTab
|
|
1049
|
+
providers={providers}
|
|
1050
|
+
onProvidersChange={(newProviders) => {
|
|
1051
|
+
onAiConfigChange({ ...aiConfig, providers: newProviders });
|
|
1052
|
+
}}
|
|
1053
|
+
showAddModal={showAddProvider}
|
|
1054
|
+
onAddModalClose={() => setShowAddProvider(false)}
|
|
1055
|
+
/>
|
|
1056
|
+
),
|
|
1057
|
+
},
|
|
1058
|
+
{
|
|
1059
|
+
value: "default" as const,
|
|
1060
|
+
label: "Intelligent Model",
|
|
1061
|
+
content: (
|
|
1062
|
+
<ModelConfigTab
|
|
1063
|
+
modelEntry={aiConfig.models?.default ?? DEFAULT_MODEL_ENTRY}
|
|
1064
|
+
providers={providers}
|
|
1065
|
+
onModelEntryChange={(entry) => {
|
|
1066
|
+
onAiConfigChange({ ...aiConfig, models: { ...aiConfig.models, default: entry } });
|
|
1067
|
+
}}
|
|
1068
|
+
/>
|
|
1069
|
+
),
|
|
1070
|
+
},
|
|
1071
|
+
{
|
|
1072
|
+
value: "fast" as const,
|
|
1073
|
+
label: "Fast Model",
|
|
1074
|
+
content: (
|
|
1075
|
+
<ModelConfigTab
|
|
1076
|
+
modelEntry={aiConfig.models?.fast ?? DEFAULT_MODEL_ENTRY}
|
|
1077
|
+
providers={providers}
|
|
1078
|
+
onModelEntryChange={(entry) => {
|
|
1079
|
+
onAiConfigChange({ ...aiConfig, models: { ...aiConfig.models, fast: entry } });
|
|
1080
|
+
}}
|
|
1081
|
+
/>
|
|
1082
|
+
),
|
|
1083
|
+
},
|
|
1084
|
+
];
|
|
1043
1085
|
|
|
1044
1086
|
return (
|
|
1045
|
-
<div
|
|
1046
|
-
<p className="solid-settings-heading">
|
|
1087
|
+
<div>
|
|
1088
|
+
<p className="solid-settings-heading" style={{ marginBottom: "1rem" }}>
|
|
1047
1089
|
AI Model Configuration
|
|
1048
1090
|
</p>
|
|
1049
1091
|
<SolidTabGroup
|
|
1050
1092
|
tabs={tabItems}
|
|
1051
1093
|
value={activeTab}
|
|
1052
|
-
onValueChange={(value) => setActiveTab(value as "
|
|
1094
|
+
onValueChange={(value) => setActiveTab(value as "providers" | "default" | "fast")}
|
|
1053
1095
|
tabPosition="left"
|
|
1096
|
+
extra={
|
|
1097
|
+
activeTab === "providers" ? (
|
|
1098
|
+
<SolidButton size="sm" onClick={() => setShowAddProvider(true)}>
|
|
1099
|
+
Add
|
|
1100
|
+
</SolidButton>
|
|
1101
|
+
) : undefined
|
|
1102
|
+
}
|
|
1054
1103
|
/>
|
|
1055
1104
|
</div>
|
|
1056
1105
|
);
|
|
@@ -1,11 +1,37 @@
|
|
|
1
|
-
export interface
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export interface ModelBehavior {
|
|
2
|
+
streaming: boolean;
|
|
3
|
+
custom: string;
|
|
4
4
|
}
|
|
5
|
-
interface
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
export interface ProviderEntry {
|
|
6
|
+
type: string;
|
|
7
|
+
apiKey: string;
|
|
8
|
+
baseUrl?: string;
|
|
8
9
|
}
|
|
9
|
-
export
|
|
10
|
+
export interface ModelEntry {
|
|
11
|
+
providerId: string;
|
|
12
|
+
model: string;
|
|
13
|
+
behavior: ModelBehavior;
|
|
14
|
+
}
|
|
15
|
+
export interface SolidAiConfig {
|
|
16
|
+
models: {
|
|
17
|
+
default: ModelEntry;
|
|
18
|
+
fast: ModelEntry;
|
|
19
|
+
};
|
|
20
|
+
providers: Record<string, ProviderEntry>;
|
|
21
|
+
}
|
|
22
|
+
export declare const ensureBuiltInProviders: (providers: Record<string, ProviderEntry>) => Record<string, ProviderEntry>;
|
|
23
|
+
interface ProvidersTabProps {
|
|
24
|
+
providers: Record<string, ProviderEntry>;
|
|
25
|
+
onProvidersChange: (providers: Record<string, ProviderEntry>) => void;
|
|
26
|
+
showAddModal?: boolean;
|
|
27
|
+
onAddModalClose?: () => void;
|
|
28
|
+
}
|
|
29
|
+
export declare const ProvidersTab: ({ providers, onProvidersChange, showAddModal, onAddModalClose }: ProvidersTabProps) => import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
interface ModelConfigTabProps {
|
|
31
|
+
modelEntry: ModelEntry;
|
|
32
|
+
providers: Record<string, ProviderEntry>;
|
|
33
|
+
onModelEntryChange: (entry: ModelEntry) => void;
|
|
34
|
+
}
|
|
35
|
+
export declare const ModelConfigTab: ({ modelEntry, providers, onModelEntryChange }: ModelConfigTabProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
36
|
export {};
|
|
11
37
|
//# sourceMappingURL=AiModelConfigTab.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiModelConfigTab.d.ts","sourceRoot":"","sources":["../../../../../src/components/common/SolidSettings/LlmSettings/AiModelConfigTab.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AiModelConfigTab.d.ts","sourceRoot":"","sources":["../../../../../src/components/common/SolidSettings/LlmSettings/AiModelConfigTab.tsx"],"names":[],"mappings":"AAeA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE;QACN,OAAO,EAAE,UAAU,CAAC;QACpB,IAAI,EAAE,UAAU,CAAC;KAClB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC1C;AAmBD,eAAO,MAAM,sBAAsB,cAAe,OAAO,MAAM,EAAE,aAAa,CAAC,KAAG,OAAO,MAAM,EAAE,aAAa,CAG5G,CAAC;AA+KH,UAAU,iBAAiB;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACzC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,IAAI,CAAC;IACtE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,eAAO,MAAM,YAAY,oEAAqE,iBAAiB,4CA+E9G,CAAC;AAIF,UAAU,mBAAmB;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACzC,kBAAkB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACjD;AAED,eAAO,MAAM,cAAc,kDAAmD,mBAAmB,4CA8DhG,CAAC"}
|
|
@@ -9,52 +9,144 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
9
|
};
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
ar[i] = from[i];
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
20
|
-
};
|
|
21
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
|
-
import { SolidSelect } from "../../../shad-cn-ui";
|
|
23
|
-
import { OpenAiProviderComponent } from "./OpenAiProviderComponent";
|
|
24
|
-
import { AnthropicProviderComponent } from "./AnthropicProviderComponent";
|
|
25
|
-
var PROVIDER_OPTIONS = [
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
13
|
+
import React, { useState } from "react";
|
|
14
|
+
import { SolidButton, SolidDialog, SolidDialogBody, SolidDialogFooter, SolidDialogHeader, SolidDialogTitle, SolidInput, SolidSelect, SolidSwitch, SolidTextarea, } from "../../../shad-cn-ui";
|
|
15
|
+
var PROVIDER_TYPE_OPTIONS = [
|
|
26
16
|
{ label: "OpenAI", value: "openai" },
|
|
27
17
|
{ label: "Anthropic", value: "anthropic" },
|
|
18
|
+
{ label: "OpenAI Compatible", value: "openai-compatible" },
|
|
19
|
+
{ label: "Anthropic Compatible", value: "anthropic-compatible" },
|
|
28
20
|
];
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
21
|
+
var COMPATIBLE_TYPES = ["openai-compatible", "anthropic-compatible"];
|
|
22
|
+
var BUILT_IN_TYPES = ["openai", "anthropic"];
|
|
23
|
+
var DEFAULT_BUILT_IN_PROVIDERS = {
|
|
24
|
+
openai: { type: "openai", apiKey: "" },
|
|
25
|
+
anthropic: { type: "anthropic", apiKey: "" },
|
|
26
|
+
};
|
|
27
|
+
export var ensureBuiltInProviders = function (providers) { return (__assign(__assign({}, DEFAULT_BUILT_IN_PROVIDERS), providers)); };
|
|
28
|
+
var cardStyle = {
|
|
29
|
+
border: "1px solid var(--solid-border-color, #e2e8f0)",
|
|
30
|
+
borderRadius: "0.5rem",
|
|
31
|
+
padding: "1.25rem",
|
|
32
|
+
background: "var(--solid-card-bg, var(--solid-surface-bg, transparent))",
|
|
33
|
+
};
|
|
34
|
+
var ProviderModal = function (_a) {
|
|
35
|
+
var _b, _c, _d, _e;
|
|
36
|
+
var visible = _a.visible, onHide = _a.onHide, providers = _a.providers, onProvidersChange = _a.onProvidersChange, editKey = _a.editKey;
|
|
37
|
+
var isEdit = !!editKey;
|
|
38
|
+
var existingEntry = isEdit ? providers[editKey] : null;
|
|
39
|
+
var _f = useState((_b = existingEntry === null || existingEntry === void 0 ? void 0 : existingEntry.type) !== null && _b !== void 0 ? _b : ""), providerType = _f[0], setProviderType = _f[1];
|
|
40
|
+
var _g = useState(editKey && !BUILT_IN_TYPES.includes(editKey) ? editKey : ""), providerName = _g[0], setProviderName = _g[1];
|
|
41
|
+
var _h = useState((_c = existingEntry === null || existingEntry === void 0 ? void 0 : existingEntry.baseUrl) !== null && _c !== void 0 ? _c : ""), providerBaseUrl = _h[0], setProviderBaseUrl = _h[1];
|
|
42
|
+
var _j = useState((_d = existingEntry === null || existingEntry === void 0 ? void 0 : existingEntry.apiKey) !== null && _d !== void 0 ? _d : ""), providerApiKey = _j[0], setProviderApiKey = _j[1];
|
|
43
|
+
var isCompatible = COMPATIBLE_TYPES.includes(providerType);
|
|
44
|
+
// Reset state when modal opens with new data
|
|
45
|
+
React.useEffect(function () {
|
|
46
|
+
var _a, _b, _c;
|
|
47
|
+
if (visible) {
|
|
48
|
+
var entry = editKey ? providers[editKey] : null;
|
|
49
|
+
setProviderType((_a = entry === null || entry === void 0 ? void 0 : entry.type) !== null && _a !== void 0 ? _a : "");
|
|
50
|
+
setProviderName(editKey && !BUILT_IN_TYPES.includes(editKey) ? editKey : "");
|
|
51
|
+
setProviderBaseUrl((_b = entry === null || entry === void 0 ? void 0 : entry.baseUrl) !== null && _b !== void 0 ? _b : "");
|
|
52
|
+
setProviderApiKey((_c = entry === null || entry === void 0 ? void 0 : entry.apiKey) !== null && _c !== void 0 ? _c : "");
|
|
53
|
+
}
|
|
54
|
+
}, [visible, editKey]);
|
|
55
|
+
// In add mode, only show compatible types (built-ins are always pre-added)
|
|
56
|
+
// In edit mode, show all types but lock the value
|
|
57
|
+
var typeOptions = isEdit
|
|
58
|
+
? PROVIDER_TYPE_OPTIONS
|
|
59
|
+
: PROVIDER_TYPE_OPTIONS.filter(function (opt) { return COMPATIBLE_TYPES.includes(opt.value); });
|
|
60
|
+
var handleSave = function () {
|
|
61
|
+
if (!providerType)
|
|
62
|
+
return;
|
|
63
|
+
var key;
|
|
64
|
+
var entry = { type: providerType, apiKey: providerApiKey };
|
|
65
|
+
if (isCompatible) {
|
|
66
|
+
if (!providerName.trim())
|
|
67
|
+
return;
|
|
68
|
+
key = providerName.trim();
|
|
69
|
+
entry.baseUrl = providerBaseUrl;
|
|
49
70
|
}
|
|
50
71
|
else {
|
|
51
|
-
|
|
52
|
-
(_a = { id: Date.now().toString(), provider: provider }, _a[key] = value, _a),
|
|
53
|
-
], false);
|
|
72
|
+
key = providerType;
|
|
54
73
|
}
|
|
55
|
-
|
|
74
|
+
// In add mode, don't overwrite existing
|
|
75
|
+
if (!isEdit && providers[key])
|
|
76
|
+
return;
|
|
77
|
+
var next = __assign({}, providers);
|
|
78
|
+
// If editing and key changed (shouldn't happen for built-in), remove old
|
|
79
|
+
if (isEdit && editKey !== key) {
|
|
80
|
+
delete next[editKey];
|
|
81
|
+
}
|
|
82
|
+
next[key] = entry;
|
|
83
|
+
onProvidersChange(next);
|
|
84
|
+
onHide();
|
|
85
|
+
};
|
|
86
|
+
var handleRemove = function () {
|
|
87
|
+
if (!editKey)
|
|
88
|
+
return;
|
|
89
|
+
var next = __assign({}, providers);
|
|
90
|
+
delete next[editKey];
|
|
91
|
+
onProvidersChange(next);
|
|
92
|
+
onHide();
|
|
93
|
+
};
|
|
94
|
+
var canSave = providerType && (isCompatible ? providerName.trim() : true);
|
|
95
|
+
return (_jsxs(SolidDialog, { open: visible, onOpenChange: function (open) { return !open && onHide(); }, style: { width: "500px" }, children: [_jsx(SolidDialogHeader, { children: _jsx(SolidDialogTitle, { children: isEdit
|
|
96
|
+
? "Edit Provider \u2014 ".concat(BUILT_IN_TYPES.includes(editKey) ? (_e = PROVIDER_TYPE_OPTIONS.find(function (o) { return o.value === editKey; })) === null || _e === void 0 ? void 0 : _e.label : editKey)
|
|
97
|
+
: "Add Provider" }) }), _jsx(SolidDialogBody, { children: _jsxs("div", { className: "flex flex-column gap-3", children: [!(isEdit && BUILT_IN_TYPES.includes(editKey)) && (_jsxs("div", { children: [_jsx("label", { className: "form-field-label", children: "Provider Type" }), _jsx(SolidSelect, { className: "w-full", value: providerType, options: typeOptions, onChange: function (e) {
|
|
98
|
+
setProviderType(e.value);
|
|
99
|
+
if (!isEdit) {
|
|
100
|
+
setProviderName("");
|
|
101
|
+
setProviderBaseUrl("");
|
|
102
|
+
}
|
|
103
|
+
}, placeholder: "Select Provider Type", disabled: isEdit })] })), isCompatible && (_jsxs(_Fragment, { children: [!isEdit && (_jsxs("div", { children: [_jsx("label", { className: "form-field-label", children: "Name (unique identifier)" }), _jsx(SolidInput, { placeholder: "e.g. openrouter, together-ai", value: providerName, onChange: function (e) { return setProviderName(e.target.value); }, className: "w-full" })] })), _jsxs("div", { children: [_jsx("label", { className: "form-field-label", children: "Base URL" }), _jsx(SolidInput, { placeholder: "https://openrouter.ai/api/v1", value: providerBaseUrl, onChange: function (e) { return setProviderBaseUrl(e.target.value); }, className: "w-full" })] })] })), _jsxs("div", { children: [_jsx("label", { className: "form-field-label", children: "API Key" }), _jsx(SolidInput, { type: "password", value: providerApiKey, onChange: function (e) { return setProviderApiKey(e.target.value); }, className: "w-full" })] })] }) }), _jsx(SolidDialogFooter, { children: _jsxs("div", { className: "flex justify-content-between w-full", children: [_jsx("div", { children: isEdit && !BUILT_IN_TYPES.includes(editKey) && (_jsx(SolidButton, { variant: "ghost", onClick: handleRemove, style: { color: "var(--solid-danger-color, #ef4444)" }, children: "Remove" })) }), _jsxs("div", { className: "flex gap-2", children: [_jsx(SolidButton, { variant: "outline", onClick: onHide, children: "Cancel" }), _jsx(SolidButton, { onClick: handleSave, disabled: !canSave, children: isEdit ? "Save" : "Add" })] })] }) })] }));
|
|
104
|
+
};
|
|
105
|
+
export var ProvidersTab = function (_a) {
|
|
106
|
+
var providers = _a.providers, onProvidersChange = _a.onProvidersChange, showAddModal = _a.showAddModal, onAddModalClose = _a.onAddModalClose;
|
|
107
|
+
var _b = useState(null), editKey = _b[0], setEditKey = _b[1];
|
|
108
|
+
var _c = useState(false), modalVisible = _c[0], setModalVisible = _c[1];
|
|
109
|
+
// Ensure built-in providers are always present
|
|
110
|
+
var allProviders = ensureBuiltInProviders(providers);
|
|
111
|
+
// Open modal when parent triggers add
|
|
112
|
+
React.useEffect(function () {
|
|
113
|
+
if (showAddModal) {
|
|
114
|
+
setEditKey(null);
|
|
115
|
+
setModalVisible(true);
|
|
116
|
+
}
|
|
117
|
+
}, [showAddModal]);
|
|
118
|
+
var providerEntries = Object.entries(allProviders);
|
|
119
|
+
var handleRowClick = function (key) {
|
|
120
|
+
setEditKey(key);
|
|
121
|
+
setModalVisible(true);
|
|
56
122
|
};
|
|
57
|
-
|
|
58
|
-
|
|
123
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "solid-simple-table", children: _jsxs("table", { style: { width: "100%" }, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { style: { textAlign: "left", padding: "0.75rem 1rem" }, children: "Name" }), _jsx("th", { style: { textAlign: "left", padding: "0.75rem 1rem" }, children: "Type" }), _jsx("th", { style: { textAlign: "left", padding: "0.75rem 1rem" }, children: "API Key" }), _jsx("th", { style: { textAlign: "left", padding: "0.75rem 1rem" }, children: "Base URL" })] }) }), _jsxs("tbody", { children: [providerEntries.length === 0 && (_jsx("tr", { children: _jsx("td", { colSpan: 4, style: { textAlign: "center", padding: "2rem 1rem", opacity: 0.5 }, children: "No providers configured." }) })), providerEntries.map(function (_a) {
|
|
124
|
+
var _b, _c;
|
|
125
|
+
var key = _a[0], entry = _a[1];
|
|
126
|
+
var typeLabel = (_c = (_b = PROVIDER_TYPE_OPTIONS.find(function (o) { return o.value === entry.type; })) === null || _b === void 0 ? void 0 : _b.label) !== null && _c !== void 0 ? _c : entry.type;
|
|
127
|
+
var isBuiltIn = BUILT_IN_TYPES.includes(key);
|
|
128
|
+
var displayName = isBuiltIn ? typeLabel : key;
|
|
129
|
+
var maskedKey = entry.apiKey ? "\u2022".repeat(Math.min(entry.apiKey.length, 8)) : "-";
|
|
130
|
+
return (_jsxs("tr", { onClick: function () { return handleRowClick(key); }, style: { cursor: "pointer" }, className: "solid-table-row-hover", children: [_jsx("td", { style: { padding: "0.75rem 1rem", fontWeight: 500 }, children: displayName }), _jsx("td", { style: { padding: "0.75rem 1rem" }, children: typeLabel }), _jsx("td", { style: { padding: "0.75rem 1rem" }, children: maskedKey }), _jsx("td", { style: { padding: "0.75rem 1rem" }, children: entry.baseUrl || "-" })] }, key));
|
|
131
|
+
})] })] }) }), _jsx(ProviderModal, { visible: modalVisible, onHide: function () {
|
|
132
|
+
setModalVisible(false);
|
|
133
|
+
setEditKey(null);
|
|
134
|
+
onAddModalClose === null || onAddModalClose === void 0 ? void 0 : onAddModalClose();
|
|
135
|
+
}, providers: allProviders, onProvidersChange: onProvidersChange, editKey: editKey })] }));
|
|
136
|
+
};
|
|
137
|
+
export var ModelConfigTab = function (_a) {
|
|
138
|
+
var modelEntry = _a.modelEntry, providers = _a.providers, onModelEntryChange = _a.onModelEntryChange;
|
|
139
|
+
var providerOptions = Object.entries(providers).map(function (_a) {
|
|
140
|
+
var _b, _c;
|
|
141
|
+
var key = _a[0], entry = _a[1];
|
|
142
|
+
var typeLabel = (_c = (_b = PROVIDER_TYPE_OPTIONS.find(function (o) { return o.value === entry.type; })) === null || _b === void 0 ? void 0 : _b.label) !== null && _c !== void 0 ? _c : entry.type;
|
|
143
|
+
var label = BUILT_IN_TYPES.includes(key) ? typeLabel : "".concat(key, " (").concat(typeLabel, ")");
|
|
144
|
+
return { label: label, value: key };
|
|
145
|
+
});
|
|
146
|
+
return (_jsxs("div", { className: "flex flex-column gap-4", children: [_jsxs("div", { style: __assign(__assign({}, cardStyle), { width: "50%" }), children: [_jsx("p", { className: "solid-settings-subheading", children: "Model Config" }), _jsxs("div", { className: "flex flex-column gap-3 mt-3", children: [_jsxs("div", { children: [_jsx("label", { className: "form-field-label", children: "Provider" }), _jsx(SolidSelect, { className: "w-full", value: modelEntry.providerId, options: providerOptions, onChange: function (e) { return onModelEntryChange(__assign(__assign({}, modelEntry), { providerId: e.value })); }, placeholder: "Select Provider" })] }), _jsxs("div", { children: [_jsx("label", { className: "form-field-label", children: "Model" }), _jsx(SolidInput, { placeholder: "e.g. gpt-4o-mini", value: modelEntry.model || "", onChange: function (e) { return onModelEntryChange(__assign(__assign({}, modelEntry), { model: e.target.value })); }, className: "w-full" })] })] })] }), _jsxs("div", { style: __assign(__assign({}, cardStyle), { width: "50%" }), children: [_jsx("p", { className: "solid-settings-subheading", children: "Behavior" }), _jsxs("div", { className: "flex flex-column gap-3 mt-3", children: [_jsxs("div", { className: "flex align-items-center gap-2", children: [_jsx(SolidSwitch, { checked: modelEntry.behavior.streaming, onChange: function (val) {
|
|
147
|
+
return onModelEntryChange(__assign(__assign({}, modelEntry), { behavior: __assign(__assign({}, modelEntry.behavior), { streaming: val }) }));
|
|
148
|
+
} }), _jsx("label", { className: "form-field-label", style: { marginBottom: 0 }, children: "Streaming" })] }), _jsxs("div", { children: [_jsx("label", { className: "form-field-label", children: "Custom Params (JSON)" }), _jsx(SolidTextarea, { value: modelEntry.behavior.custom, onChange: function (e) {
|
|
149
|
+
return onModelEntryChange(__assign(__assign({}, modelEntry), { behavior: __assign(__assign({}, modelEntry.behavior), { custom: e.target.value }) }));
|
|
150
|
+
}, placeholder: '{ "temperature": 0.7, "maxTokens": 1000 }', rows: 4, className: "w-full" })] })] })] })] }));
|
|
59
151
|
};
|
|
60
152
|
//# sourceMappingURL=AiModelConfigTab.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiModelConfigTab.js","sourceRoot":"","sources":["../../../../../src/components/common/SolidSettings/LlmSettings/AiModelConfigTab.tsx"],"names":[],"mappings":"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","sourcesContent":["import { SolidSelect } from \"../../../shad-cn-ui\";\nimport { OpenAiProviderComponent } from \"./OpenAiProviderComponent\";\nimport { AnthropicProviderComponent } from \"./AnthropicProviderComponent\";\n\nexport interface ModelConfig {\n provider: string;\n availableProviders: any[];\n}\n\ninterface Props {\n config: ModelConfig;\n onChange: (config: ModelConfig) => void;\n}\n\nconst PROVIDER_OPTIONS = [\n { label: \"OpenAI\", value: \"openai\" },\n { label: \"Anthropic\", value: \"anthropic\" },\n];\n\nexport const AiModelConfigTab = ({ config, onChange }: Props) => {\n const profiles = config.availableProviders ?? [];\n const provider = config.provider;\n\n const handleProviderSelect = (value: string) => {\n const exists = profiles.some((p: any) => p.provider === value);\n const newProfiles = exists\n ? profiles\n : [...profiles, { id: Date.now().toString(), provider: value }];\n onChange({ ...config, provider: value, availableProviders: newProfiles });\n };\n\n const handleProfileUpdate = (key: string, value: string) => {\n let updatedProfiles: any[];\n if (profiles.some((p: any) => p.provider === provider)) {\n updatedProfiles = profiles.map((p: any) =>\n p.provider === provider ? { ...p, [key]: value } : p\n );\n } else {\n updatedProfiles = [\n ...profiles,\n { id: Date.now().toString(), provider, [key]: value },\n ];\n }\n onChange({ ...config, availableProviders: updatedProfiles });\n };\n\n const currentProfile =\n profiles.find((p: any) => p.provider === provider) || null;\n\n return (\n <div className=\"ai-model-config-tab\">\n <div className=\"flex flex-column gap-2\">\n <label className=\"form-field-label\">Provider</label>\n <SolidSelect\n className=\"w-full\"\n value={provider}\n options={PROVIDER_OPTIONS}\n onChange={(e) => handleProviderSelect(e.value)}\n placeholder=\"Select Provider\"\n />\n </div>\n {provider === \"openai\" && (\n <OpenAiProviderComponent\n profile={currentProfile}\n onUpdate={handleProfileUpdate}\n />\n )}\n {provider === \"anthropic\" && (\n <AnthropicProviderComponent\n profile={currentProfile}\n onUpdate={handleProfileUpdate}\n />\n )}\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"AiModelConfigTab.js","sourceRoot":"","sources":["../../../../../src/components/common/SolidSettings/LlmSettings/AiModelConfigTab.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState } from \"react\";\nimport {\n SolidButton,\n SolidDialog,\n SolidDialogBody,\n SolidDialogFooter,\n SolidDialogHeader,\n SolidDialogTitle,\n SolidInput,\n SolidSelect,\n SolidSwitch,\n SolidTextarea,\n} from \"../../../shad-cn-ui\";\n\n\nexport interface ModelBehavior {\n streaming: boolean;\n custom: string;\n}\n\nexport interface ProviderEntry {\n type: string;\n apiKey: string;\n baseUrl?: string;\n}\n\nexport interface ModelEntry {\n providerId: string;\n model: string;\n behavior: ModelBehavior;\n}\n\nexport interface SolidAiConfig {\n models: {\n default: ModelEntry;\n fast: ModelEntry;\n };\n providers: Record<string, ProviderEntry>;\n}\n\n\nconst PROVIDER_TYPE_OPTIONS = [\n { label: \"OpenAI\", value: \"openai\" },\n { label: \"Anthropic\", value: \"anthropic\" },\n { label: \"OpenAI Compatible\", value: \"openai-compatible\" },\n { label: \"Anthropic Compatible\", value: \"anthropic-compatible\" },\n];\n\nconst COMPATIBLE_TYPES = [\"openai-compatible\", \"anthropic-compatible\"];\n\nconst BUILT_IN_TYPES = [\"openai\", \"anthropic\"];\n\nconst DEFAULT_BUILT_IN_PROVIDERS: Record<string, ProviderEntry> = {\n openai: { type: \"openai\", apiKey: \"\" },\n anthropic: { type: \"anthropic\", apiKey: \"\" },\n};\n\nexport const ensureBuiltInProviders = (providers: Record<string, ProviderEntry>): Record<string, ProviderEntry> => ({\n ...DEFAULT_BUILT_IN_PROVIDERS,\n ...providers,\n});\n\nconst cardStyle: React.CSSProperties = {\n border: \"1px solid var(--solid-border-color, #e2e8f0)\",\n borderRadius: \"0.5rem\",\n padding: \"1.25rem\",\n background: \"var(--solid-card-bg, var(--solid-surface-bg, transparent))\",\n};\n\n\ninterface ProviderModalProps {\n visible: boolean;\n onHide: () => void;\n providers: Record<string, ProviderEntry>;\n onProvidersChange: (providers: Record<string, ProviderEntry>) => void;\n editKey?: string | null; // null = add mode, string = edit mode\n}\n\nconst ProviderModal = ({ visible, onHide, providers, onProvidersChange, editKey }: ProviderModalProps) => {\n const isEdit = !!editKey;\n const existingEntry = isEdit ? providers[editKey] : null;\n\n const [providerType, setProviderType] = useState(existingEntry?.type ?? \"\");\n const [providerName, setProviderName] = useState(editKey && !BUILT_IN_TYPES.includes(editKey) ? editKey : \"\");\n const [providerBaseUrl, setProviderBaseUrl] = useState(existingEntry?.baseUrl ?? \"\");\n const [providerApiKey, setProviderApiKey] = useState(existingEntry?.apiKey ?? \"\");\n\n const isCompatible = COMPATIBLE_TYPES.includes(providerType);\n\n // Reset state when modal opens with new data\n React.useEffect(() => {\n if (visible) {\n const entry = editKey ? providers[editKey] : null;\n setProviderType(entry?.type ?? \"\");\n setProviderName(editKey && !BUILT_IN_TYPES.includes(editKey) ? editKey : \"\");\n setProviderBaseUrl(entry?.baseUrl ?? \"\");\n setProviderApiKey(entry?.apiKey ?? \"\");\n }\n }, [visible, editKey]);\n\n // In add mode, only show compatible types (built-ins are always pre-added)\n // In edit mode, show all types but lock the value\n const typeOptions = isEdit\n ? PROVIDER_TYPE_OPTIONS\n : PROVIDER_TYPE_OPTIONS.filter((opt) => COMPATIBLE_TYPES.includes(opt.value));\n\n const handleSave = () => {\n if (!providerType) return;\n\n let key: string;\n const entry: ProviderEntry = { type: providerType, apiKey: providerApiKey };\n\n if (isCompatible) {\n if (!providerName.trim()) return;\n key = providerName.trim();\n entry.baseUrl = providerBaseUrl;\n } else {\n key = providerType;\n }\n\n // In add mode, don't overwrite existing\n if (!isEdit && providers[key]) return;\n\n const next = { ...providers };\n\n // If editing and key changed (shouldn't happen for built-in), remove old\n if (isEdit && editKey !== key) {\n delete next[editKey!];\n }\n\n next[key] = entry;\n onProvidersChange(next);\n onHide();\n };\n\n const handleRemove = () => {\n if (!editKey) return;\n const next = { ...providers };\n delete next[editKey];\n onProvidersChange(next);\n onHide();\n };\n\n const canSave = providerType && (isCompatible ? providerName.trim() : true);\n\n return (\n <SolidDialog open={visible} onOpenChange={(open) => !open && onHide()} style={{ width: \"500px\" }}>\n <SolidDialogHeader>\n <SolidDialogTitle>\n {isEdit\n ? `Edit Provider — ${BUILT_IN_TYPES.includes(editKey!) ? PROVIDER_TYPE_OPTIONS.find((o) => o.value === editKey)?.label : editKey}`\n : \"Add Provider\"}\n </SolidDialogTitle>\n </SolidDialogHeader>\n <SolidDialogBody>\n <div className=\"flex flex-column gap-3\">\n {!(isEdit && BUILT_IN_TYPES.includes(editKey!)) && (\n <div>\n <label className=\"form-field-label\">Provider Type</label>\n <SolidSelect\n className=\"w-full\"\n value={providerType}\n options={typeOptions}\n onChange={(e) => {\n setProviderType(e.value);\n if (!isEdit) {\n setProviderName(\"\");\n setProviderBaseUrl(\"\");\n }\n }}\n placeholder=\"Select Provider Type\"\n disabled={isEdit}\n />\n </div>\n )}\n {isCompatible && (\n <>\n {!isEdit && (\n <div>\n <label className=\"form-field-label\">Name (unique identifier)</label>\n <SolidInput\n placeholder=\"e.g. openrouter, together-ai\"\n value={providerName}\n onChange={(e) => setProviderName(e.target.value)}\n className=\"w-full\"\n />\n </div>\n )}\n <div>\n <label className=\"form-field-label\">Base URL</label>\n <SolidInput\n placeholder=\"https://openrouter.ai/api/v1\"\n value={providerBaseUrl}\n onChange={(e) => setProviderBaseUrl(e.target.value)}\n className=\"w-full\"\n />\n </div>\n </>\n )}\n <div>\n <label className=\"form-field-label\">API Key</label>\n <SolidInput\n type=\"password\"\n value={providerApiKey}\n onChange={(e) => setProviderApiKey(e.target.value)}\n className=\"w-full\"\n />\n </div>\n </div>\n </SolidDialogBody>\n <SolidDialogFooter>\n <div className=\"flex justify-content-between w-full\">\n <div>\n {isEdit && !BUILT_IN_TYPES.includes(editKey!) && (\n <SolidButton variant=\"ghost\" onClick={handleRemove} style={{ color: \"var(--solid-danger-color, #ef4444)\" }}>\n Remove\n </SolidButton>\n )}\n </div>\n <div className=\"flex gap-2\">\n <SolidButton variant=\"outline\" onClick={onHide}>\n Cancel\n </SolidButton>\n <SolidButton onClick={handleSave} disabled={!canSave}>\n {isEdit ? \"Save\" : \"Add\"}\n </SolidButton>\n </div>\n </div>\n </SolidDialogFooter>\n </SolidDialog>\n );\n};\n\n// --- Providers Tab (List View) ---\n\ninterface ProvidersTabProps {\n providers: Record<string, ProviderEntry>;\n onProvidersChange: (providers: Record<string, ProviderEntry>) => void;\n showAddModal?: boolean;\n onAddModalClose?: () => void;\n}\n\nexport const ProvidersTab = ({ providers, onProvidersChange, showAddModal, onAddModalClose }: ProvidersTabProps) => {\n const [editKey, setEditKey] = useState<string | null>(null);\n const [modalVisible, setModalVisible] = useState(false);\n\n // Ensure built-in providers are always present\n const allProviders = ensureBuiltInProviders(providers);\n\n // Open modal when parent triggers add\n React.useEffect(() => {\n if (showAddModal) {\n setEditKey(null);\n setModalVisible(true);\n }\n }, [showAddModal]);\n\n const providerEntries = Object.entries(allProviders);\n\n const handleRowClick = (key: string) => {\n setEditKey(key);\n setModalVisible(true);\n };\n\n return (\n <>\n <div className=\"solid-simple-table\">\n <table style={{ width: \"100%\" }}>\n <thead>\n <tr>\n <th style={{ textAlign: \"left\", padding: \"0.75rem 1rem\" }}>Name</th>\n <th style={{ textAlign: \"left\", padding: \"0.75rem 1rem\" }}>Type</th>\n <th style={{ textAlign: \"left\", padding: \"0.75rem 1rem\" }}>API Key</th>\n <th style={{ textAlign: \"left\", padding: \"0.75rem 1rem\" }}>Base URL</th>\n </tr>\n </thead>\n <tbody>\n {providerEntries.length === 0 && (\n <tr>\n <td colSpan={4} style={{ textAlign: \"center\", padding: \"2rem 1rem\", opacity: 0.5 }}>\n No providers configured.\n </td>\n </tr>\n )}\n {providerEntries.map(([key, entry]) => {\n const typeLabel = PROVIDER_TYPE_OPTIONS.find((o) => o.value === entry.type)?.label ?? entry.type;\n const isBuiltIn = BUILT_IN_TYPES.includes(key);\n const displayName = isBuiltIn ? typeLabel : key;\n const maskedKey = entry.apiKey ? \"\\u2022\".repeat(Math.min(entry.apiKey.length, 8)) : \"-\";\n\n return (\n <tr\n key={key}\n onClick={() => handleRowClick(key)}\n style={{ cursor: \"pointer\" }}\n className=\"solid-table-row-hover\"\n >\n <td style={{ padding: \"0.75rem 1rem\", fontWeight: 500 }}>{displayName}</td>\n <td style={{ padding: \"0.75rem 1rem\" }}>{typeLabel}</td>\n <td style={{ padding: \"0.75rem 1rem\" }}>{maskedKey}</td>\n <td style={{ padding: \"0.75rem 1rem\" }}>{entry.baseUrl || \"-\"}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n <ProviderModal\n visible={modalVisible}\n onHide={() => {\n setModalVisible(false);\n setEditKey(null);\n onAddModalClose?.();\n }}\n providers={allProviders}\n onProvidersChange={onProvidersChange}\n editKey={editKey}\n />\n </>\n );\n};\n\n// --- Model Config Tab (used for Intelligent Model & Fast Model) ---\n\ninterface ModelConfigTabProps {\n modelEntry: ModelEntry;\n providers: Record<string, ProviderEntry>;\n onModelEntryChange: (entry: ModelEntry) => void;\n}\n\nexport const ModelConfigTab = ({ modelEntry, providers, onModelEntryChange }: ModelConfigTabProps) => {\n const providerOptions = Object.entries(providers).map(([key, entry]) => {\n const typeLabel = PROVIDER_TYPE_OPTIONS.find((o) => o.value === entry.type)?.label ?? entry.type;\n const label = BUILT_IN_TYPES.includes(key) ? typeLabel : `${key} (${typeLabel})`;\n return { label, value: key };\n });\n\n return (\n <div className=\"flex flex-column gap-4\">\n <div style={{ ...cardStyle, width: \"50%\" }}>\n <p className=\"solid-settings-subheading\">Model Config</p>\n <div className=\"flex flex-column gap-3 mt-3\">\n <div>\n <label className=\"form-field-label\">Provider</label>\n <SolidSelect\n className=\"w-full\"\n value={modelEntry.providerId}\n options={providerOptions}\n onChange={(e) => onModelEntryChange({ ...modelEntry, providerId: e.value })}\n placeholder=\"Select Provider\"\n />\n </div>\n <div>\n <label className=\"form-field-label\">Model</label>\n <SolidInput\n placeholder=\"e.g. gpt-4o-mini\"\n value={modelEntry.model || \"\"}\n onChange={(e) => onModelEntryChange({ ...modelEntry, model: e.target.value })}\n className=\"w-full\"\n />\n </div>\n </div>\n </div>\n\n <div style={{ ...cardStyle, width: \"50%\" }}>\n <p className=\"solid-settings-subheading\">Behavior</p>\n <div className=\"flex flex-column gap-3 mt-3\">\n <div className=\"flex align-items-center gap-2\">\n <SolidSwitch\n checked={modelEntry.behavior.streaming}\n onChange={(val) =>\n onModelEntryChange({ ...modelEntry, behavior: { ...modelEntry.behavior, streaming: val } })\n }\n />\n <label className=\"form-field-label\" style={{ marginBottom: 0 }}>Streaming</label>\n </div>\n <div>\n <label className=\"form-field-label\">Custom Params (JSON)</label>\n <SolidTextarea\n value={modelEntry.behavior.custom}\n onChange={(e) =>\n onModelEntryChange({ ...modelEntry, behavior: { ...modelEntry.behavior, custom: e.target.value } })\n }\n placeholder='{ \"temperature\": 0.7, \"maxTokens\": 1000 }'\n rows={4}\n className=\"w-full\"\n />\n </div>\n </div>\n </div>\n </div>\n );\n};\n"]}
|