From df421796bb493ec9814d64dc0f8fb72115c5f0a1 Mon Sep 17 00:00:00 2001 From: JzoNg Date: Tue, 31 Dec 2024 12:38:07 +0800 Subject: [PATCH] add model info in model selector --- .../header/account-setting/menu-dialog.tsx | 2 +- .../model-selector/index.tsx | 1 + .../model-selector/popup-item.tsx | 100 +++++++++++++++--- .../model-selector/popup.tsx | 14 +++ .../plugins/plugin-detail-panel/index.tsx | 11 ++ .../model-selector/index.tsx | 2 +- web/i18n/en-US/common.ts | 2 + web/i18n/zh-Hans/common.ts | 2 + 8 files changed, 116 insertions(+), 18 deletions(-) diff --git a/web/app/components/header/account-setting/menu-dialog.tsx b/web/app/components/header/account-setting/menu-dialog.tsx index 4df8ab8ab1..76296b84dd 100644 --- a/web/app/components/header/account-setting/menu-dialog.tsx +++ b/web/app/components/header/account-setting/menu-dialog.tsx @@ -32,7 +32,7 @@ const MenuDialog = ({ return ( - {}}> + {}}>
= ({ modelList={modelList} onSelect={handleSelect} scopeFeatures={scopeFeatures} + onHide={() => setOpen(false)} />
diff --git a/web/app/components/header/account-setting/model-provider-page/model-selector/popup-item.tsx b/web/app/components/header/account-setting/model-provider-page/model-selector/popup-item.tsx index 78e1d68357..df6e69193e 100644 --- a/web/app/components/header/account-setting/model-provider-page/model-selector/popup-item.tsx +++ b/web/app/components/header/account-setting/model-provider-page/model-selector/popup-item.tsx @@ -1,10 +1,25 @@ import type { FC } from 'react' import { useTranslation } from 'react-i18next' +import { + RiFileTextLine, + RiFilmAiLine, + RiImageCircleAiLine, + RiVoiceAiFill, +} from '@remixicon/react' import type { DefaultModel, Model, ModelItem, } from '../declarations' +import { + ModelFeatureEnum, + ModelFeatureTextEnum, + ModelTypeEnum, +} from '../declarations' +import { + modelTypeFormat, + sizeFormat, +} from '../utils' import { useLanguage, useUpdateModelList, @@ -12,15 +27,16 @@ import { } from '../hooks' import ModelIcon from '../model-icon' import ModelName from '../model-name' +import ModelBadge from '../model-badge' import { ConfigurationMethodEnum, - MODEL_STATUS_TEXT, ModelStatusEnum, } from '../declarations' import { Check } from '@/app/components/base/icons/src/vender/line/general' import { useModalContext } from '@/context/modal-context' import { useProviderContext } from '@/context/provider-context' import Tooltip from '@/app/components/base/tooltip' +import cn from '@/utils/classnames' type PopupItemProps = { defaultModel?: DefaultModel @@ -71,34 +87,86 @@ const PopupItem: FC = ({ model.models.map(modelItem => ( +
+ +
{modelItem.label[language] || modelItem.label.en_US}
+
+ {/* {currentProvider?.description && ( +
{currentProvider?.description?.[language] || currentProvider?.description?.en_US}
+ )} */} +
+ {modelItem.model_type && ( + + {modelTypeFormat(modelItem.model_type)} + + )} + {modelItem.model_properties.mode && ( + + {(modelItem.model_properties.mode as string).toLocaleUpperCase()} + + )} + {modelItem.model_properties.context_size && ( + + {sizeFormat(modelItem.model_properties.context_size as number)} + + )} +
+ {modelItem.model_type === ModelTypeEnum.textGeneration && modelItem.features?.some(feature => [ModelFeatureEnum.vision, ModelFeatureEnum.audio, ModelFeatureEnum.video, ModelFeatureEnum.document].includes(feature)) && ( +
+
{t('common.model.capabilities')}
+
+ {modelItem.features?.includes(ModelFeatureEnum.vision) && ( + + + {ModelFeatureTextEnum.vision} + + )} + {modelItem.features?.includes(ModelFeatureEnum.audio) && ( + + + {ModelFeatureTextEnum.audio} + + )} + {modelItem.features?.includes(ModelFeatureEnum.video) && ( + + + {ModelFeatureTextEnum.video} + + )} + {modelItem.features?.includes(ModelFeatureEnum.document) && ( + + + {ModelFeatureTextEnum.document} + + )} +
+
+ )} +
+ } >
handleSelect(model.provider, modelItem)} >
{ diff --git a/web/app/components/header/account-setting/model-provider-page/model-selector/popup.tsx b/web/app/components/header/account-setting/model-provider-page/model-selector/popup.tsx index 1089697c98..ad06c3238b 100644 --- a/web/app/components/header/account-setting/model-provider-page/model-selector/popup.tsx +++ b/web/app/components/header/account-setting/model-provider-page/model-selector/popup.tsx @@ -1,6 +1,8 @@ import type { FC } from 'react' import { useMemo, useState } from 'react' +import { useTranslation } from 'react-i18next' import { + RiArrowRightUpLine, RiSearchLine, } from '@remixicon/react' import type { @@ -12,21 +14,26 @@ import { ModelFeatureEnum } from '../declarations' import { useLanguage } from '../hooks' import PopupItem from './popup-item' import { XCircle } from '@/app/components/base/icons/src/vender/solid/general' +import { useModalContext } from '@/context/modal-context' type PopupProps = { defaultModel?: DefaultModel modelList: Model[] onSelect: (provider: string, model: ModelItem) => void scopeFeatures?: string[] + onHide: () => void } const Popup: FC = ({ defaultModel, modelList, onSelect, scopeFeatures = [], + onHide, }) => { + const { t } = useTranslation() const language = useLanguage() const [searchText, setSearchText] = useState('') + const { setShowAccountSettingModal } = useModalContext() const filteredModelList = useMemo(() => { return modelList.map((model) => { @@ -99,6 +106,13 @@ const Popup: FC = ({ ) }
+
{ + onHide() + setShowAccountSettingModal({ payload: 'provider' }) + }}> + {t('common.model.settingsLink')} + +
) } diff --git a/web/app/components/plugins/plugin-detail-panel/index.tsx b/web/app/components/plugins/plugin-detail-panel/index.tsx index 4d20c0877d..f0afd15f58 100644 --- a/web/app/components/plugins/plugin-detail-panel/index.tsx +++ b/web/app/components/plugins/plugin-detail-panel/index.tsx @@ -10,6 +10,8 @@ import Drawer from '@/app/components/base/drawer' import type { PluginDetail } from '@/app/components/plugins/types' import cn from '@/utils/classnames' +import ModelParameterModal from '@/app/components/plugins/plugin-detail-panel/model-selector' + type Props = { detail?: PluginDetail onUpdate: () => void @@ -52,6 +54,15 @@ const PluginDetailPanel: FC = ({ {!!detail.declaration.agent_strategy && } {!!detail.declaration.endpoint && } {!!detail.declaration.model && } + {}} + scope={'llm'} + /> )} diff --git a/web/app/components/plugins/plugin-detail-panel/model-selector/index.tsx b/web/app/components/plugins/plugin-detail-panel/model-selector/index.tsx index 00b0cd74eb..1408b4f9be 100644 --- a/web/app/components/plugins/plugin-detail-panel/model-selector/index.tsx +++ b/web/app/components/plugins/plugin-detail-panel/model-selector/index.tsx @@ -205,7 +205,7 @@ const ModelParameterModal: FC = ({ ) } - +
diff --git a/web/i18n/en-US/common.ts b/web/i18n/en-US/common.ts index 91e27aa044..0dd789aa1b 100644 --- a/web/i18n/en-US/common.ts +++ b/web/i18n/en-US/common.ts @@ -126,6 +126,8 @@ const translation = { Custom: 'Custom', }, addMoreModel: 'Go to settings to add more models', + settingsLink: 'Model Provider Settings', + capabilities: 'MultiModal Capabilities', }, menus: { status: 'beta', diff --git a/web/i18n/zh-Hans/common.ts b/web/i18n/zh-Hans/common.ts index 9a5c377f7f..76e8d4b027 100644 --- a/web/i18n/zh-Hans/common.ts +++ b/web/i18n/zh-Hans/common.ts @@ -126,6 +126,8 @@ const translation = { Custom: '自定义', }, addMoreModel: '添加更多模型', + settingsLink: '模型设置', + capabilities: '多模态能力', }, menus: { status: 'beta',