From 4b92e84d122dcbbb68b969b75ea3472730ecbe44 Mon Sep 17 00:00:00 2001 From: Tung Pham Date: Fri, 5 Apr 2024 08:20:34 +0700 Subject: [PATCH] Add support for change default translation agent --- locales/en-US/setting.json | 8 ++ .../settings/common/features/SystemAgent.tsx | 98 +++++++++++++++++++ src/const/settings/index.ts | 10 ++ src/locales/default/setting.ts | 8 ++ src/store/chat/slices/enchance/action.ts | 16 ++- .../slices/settings/actions/general.test.ts | 22 +++++ .../user/slices/settings/actions/general.ts | 11 +++ .../slices/settings/selectors/settings.ts | 11 ++- src/types/settings/index.ts | 3 + src/types/settings/systemAgent.ts | 8 ++ 10 files changed, 192 insertions(+), 3 deletions(-) create mode 100644 src/app/(main)/settings/common/features/SystemAgent.tsx create mode 100644 src/types/settings/systemAgent.ts diff --git a/locales/en-US/setting.json b/locales/en-US/setting.json index 5b6bd98f7a9e..e302932757d8 100644 --- a/locales/en-US/setting.json +++ b/locales/en-US/setting.json @@ -355,6 +355,14 @@ "title": "WebRTC Sync" } }, + "systemAgent": { + "title": "System Agents", + "translation": { + "title": "Translation Settings", + "label": "Translation Agent", + "modelDesc": "Specific model for translate message" + } + }, "tab": { "about": "About", "agent": "Default Agent", diff --git a/src/app/(main)/settings/common/features/SystemAgent.tsx b/src/app/(main)/settings/common/features/SystemAgent.tsx new file mode 100644 index 000000000000..13fad59b0673 --- /dev/null +++ b/src/app/(main)/settings/common/features/SystemAgent.tsx @@ -0,0 +1,98 @@ +import { Form, type ItemGroup } from '@lobehub/ui'; +import { Form as AntForm, Select, SelectProps } from 'antd'; +import { createStyles } from 'antd-style'; +import isEqual from 'fast-deep-equal'; +import { MessageSquareMore } from 'lucide-react'; +import { memo, useMemo } from 'react'; +import { useTranslation } from 'react-i18next'; + +import { ModelItemRender, ProviderItemRender } from '@/components/ModelSelect'; +import { FORM_STYLE } from '@/const/layoutTokens'; +import { useUserStore } from '@/store/user'; +import { modelProviderSelectors, settingsSelectors } from '@/store/user/selectors'; +import { ModelProviderCard } from '@/types/llm'; + +import { useSyncSettings } from '../../hooks/useSyncSettings'; + +const SYSTEM_AGENT_SETTING_KEY = 'systemAgent'; + +type SettingItemGroup = ItemGroup; + +const useStyles = createStyles(({ css, prefixCls }) => ({ + select: css` + .${prefixCls}-select-dropdown .${prefixCls}-select-item-option-grouped { + padding-inline-start: 12px; + } + `, +})); +interface ModelOption { + label: any; + provider: string; + value: string; +} + +const SystemAgent = memo(() => { + const { t } = useTranslation('setting'); + const [form] = AntForm.useForm(); + + const settings = useUserStore(settingsSelectors.currentSettings, isEqual); + const [setTranslationSystemAgent] = useUserStore((s) => [s.setTranslationSystemAgent]); + + const select = useUserStore(modelProviderSelectors.modelProviderListForModelSelect, isEqual); + + const { styles } = useStyles(); + + const enabledList = select.filter((s) => s.enabled); + + const translationOptions = useMemo(() => { + const getChatModels = (provider: ModelProviderCard) => + provider.chatModels + .filter((c) => c.enabled) + .map((model) => ({ + label: , + provider: provider.id, + value: model.id, + })); + + if (enabledList.length === 1) { + const provider = enabledList[0]; + + return getChatModels(provider); + } + + return enabledList.map((provider) => ({ + label: , + options: getChatModels(provider), + })); + }, [enabledList]); + + const systemAgentSettings: SettingItemGroup = { + children: [ + { + children: ( +