diff --git a/src/renderer/src/components/ModelTags.tsx b/src/renderer/src/components/ModelTags.tsx new file mode 100644 index 00000000..b6a2d145 --- /dev/null +++ b/src/renderer/src/components/ModelTags.tsx @@ -0,0 +1,35 @@ +import { isEmbeddingModel, isVisionModel, isWebSearchModel } from '@renderer/config/models' +import { Model } from '@renderer/types' +import { isFreeModel } from '@renderer/utils' +import { Tag } from 'antd' +import { FC } from 'react' +import { useTranslation } from 'react-i18next' + +import VisionIcon from './Icons/VisionIcon' +import WebSearchIcon from './Icons/WebSearchIcon' + +interface ModelTagsProps { + model: Model +} + +const ModelTags: FC = ({ model }) => { + const { t } = useTranslation() + return ( + <> + {isVisionModel(model) && } + {isWebSearchModel(model) && } + {isFreeModel(model) && ( + + {t('models.free')} + + )} + {isEmbeddingModel(model) && ( + + {t('models.embedding')} + + )} + + ) +} + +export default ModelTags diff --git a/src/renderer/src/components/Popups/SelectModelPopup.tsx b/src/renderer/src/components/Popups/SelectModelPopup.tsx index a3e137cf..1ca48bc6 100644 --- a/src/renderer/src/components/Popups/SelectModelPopup.tsx +++ b/src/renderer/src/components/Popups/SelectModelPopup.tsx @@ -1,7 +1,7 @@ import { PushpinOutlined, SearchOutlined } from '@ant-design/icons' import VisionIcon from '@renderer/components/Icons/VisionIcon' import { TopView } from '@renderer/components/TopView' -import { getModelLogo, isEmbeddingModel, isVisionModel, isWebSearchModel } from '@renderer/config/models' +import { getModelLogo, isEmbeddingModel, isVisionModel } from '@renderer/config/models' import db from '@renderer/databases' import { useProviders } from '@renderer/hooks/useProvider' import { getModelUniqId } from '@renderer/services/ModelService' @@ -12,8 +12,8 @@ import { useEffect, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' -import WebSearchIcon from '../Icons/WebSearchIcon' import { HStack } from '../Layout' +import ModelTags from '../ModelTags' import Scrollbar from '../Scrollbar' type MenuItem = Required['items'][number] @@ -75,7 +75,7 @@ const PopupContainer: React.FC = ({ model, resolve }) => { label: ( - {m?.name} {isVisionModel(m) && } {isWebSearchModel(m) && } + {m?.name} { diff --git a/src/renderer/src/pages/home/components/SelectModelButton.tsx b/src/renderer/src/pages/home/components/SelectModelButton.tsx index f45b043a..d17688f6 100644 --- a/src/renderer/src/pages/home/components/SelectModelButton.tsx +++ b/src/renderer/src/pages/home/components/SelectModelButton.tsx @@ -1,8 +1,7 @@ import ModelAvatar from '@renderer/components/Avatar/ModelAvatar' -import VisionIcon from '@renderer/components/Icons/VisionIcon' +import ModelTags from '@renderer/components/ModelTags' import SelectModelPopup from '@renderer/components/Popups/SelectModelPopup' import { isLocalAi } from '@renderer/config/env' -import { isVisionModel } from '@renderer/config/models' import { useAssistant } from '@renderer/hooks/useAssistant' import { getProviderName } from '@renderer/services/ProviderService' import { Assistant } from '@renderer/types' @@ -40,7 +39,7 @@ const SelectModelButton: FC = ({ assistant }) => { {model ? model.name : t('button.select_model')} {providerName ? '| ' + providerName : ''} - {isVisionModel(model) && } + ) @@ -63,7 +62,6 @@ const ButtonContent = styled.div` ` const ModelName = styled.span` - margin-left: -2px; font-weight: 500; ` diff --git a/src/renderer/src/pages/settings/ProviderSettings/EditModelsPopup.tsx b/src/renderer/src/pages/settings/ProviderSettings/EditModelsPopup.tsx index b5425d86..f7d1aed6 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/EditModelsPopup.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/EditModelsPopup.tsx @@ -1,13 +1,12 @@ import { LoadingOutlined, MinusOutlined, PlusOutlined, QuestionCircleOutlined } from '@ant-design/icons' -import VisionIcon from '@renderer/components/Icons/VisionIcon' -import WebSearchIcon from '@renderer/components/Icons/WebSearchIcon' import { Center } from '@renderer/components/Layout' +import ModelTags from '@renderer/components/ModelTags' import { getModelLogo, isEmbeddingModel, isVisionModel, isWebSearchModel, SYSTEM_MODELS } from '@renderer/config/models' import { useProvider } from '@renderer/hooks/useProvider' import { fetchModels } from '@renderer/services/ApiService' import { Model, Provider } from '@renderer/types' import { getDefaultGroupName, isFreeModel, runAsyncFunction } from '@renderer/utils' -import { Avatar, Button, Empty, Flex, Modal, Popover, Radio, Tag, Tooltip } from 'antd' +import { Avatar, Button, Empty, Flex, Modal, Popover, Radio, Tooltip } from 'antd' import Search from 'antd/es/input/Search' import { groupBy, isEmpty, uniqBy } from 'lodash' import { useEffect, useState } from 'react' @@ -156,18 +155,7 @@ const PopupContainer: React.FC = ({ provider: _provider, resolve }) => { {model.name} - {isVisionModel(model) && } - {isWebSearchModel(model) && } - {isFreeModel(model) && ( - - {t('models.free')} - - )} - {isEmbeddingModel(model) && ( - - {t('models.embedding')} - - )} + {!isEmpty(model.description) && ( = ({ provider: _provider }) => { {model.name[0].toUpperCase()} - {model.name} {isVisionModel(model) && } - {isWebSearchModel(model) && } - {isEmbeddingModel(model) && ( - - {t('models.embedding')} - - )} + {model.name} + diff --git a/src/renderer/src/pages/settings/ProviderSettings/index.tsx b/src/renderer/src/pages/settings/ProviderSettings/index.tsx index ceae8255..6e6efef9 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/index.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/index.tsx @@ -124,7 +124,7 @@ const ProvidersList: FC = () => { {provider.isSystem ? t(`provider.${provider.id}`) : provider.name} {provider.enabled && ( - + ON )} @@ -163,7 +163,7 @@ const Container = styled.div` const ProviderListContainer = styled.div` display: flex; flex-direction: column; - width: var(--assistants-width); + min-width: calc(var(--settings-width) + 10px); height: calc(100vh - var(--navbar-height)); border-right: 0.5px solid var(--color-border); ` @@ -173,13 +173,14 @@ const ProviderList = styled.div` flex: 1; flex-direction: column; padding: 8px; + padding-right: 5px; ` const ProviderListItem = styled.div` display: flex; flex-direction: row; align-items: center; - padding: 5px 8px; + padding: 5px 10px; width: 100%; cursor: grab; border-radius: var(--list-item-border-radius);