From 640d3783a068482ff052d13e627e5d452436224d Mon Sep 17 00:00:00 2001 From: fullex <106392080+0xfullex@users.noreply.github.com> Date: Tue, 4 Mar 2025 10:27:18 +0800 Subject: [PATCH] feat: add search function on provider list & optimize ui behaviors when dragging provider item (#2706) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 添加“腾讯云TI”供应商及其支持的deepseek模型 * add search feature for model providers & adjust ui element behaviors when dragging * dev merge fix * merge fix --- src/renderer/src/config/providers.ts | 2 +- src/renderer/src/i18n/locales/en-us.json | 3 +- src/renderer/src/i18n/locales/ja-jp.json | 3 +- src/renderer/src/i18n/locales/ru-ru.json | 3 +- src/renderer/src/i18n/locales/zh-cn.json | 3 +- src/renderer/src/i18n/locales/zh-tw.json | 3 +- .../pages/settings/ProviderSettings/index.tsx | 60 +++++++++++++++---- 7 files changed, 61 insertions(+), 16 deletions(-) diff --git a/src/renderer/src/config/providers.ts b/src/renderer/src/config/providers.ts index f7936395..9b157efb 100644 --- a/src/renderer/src/config/providers.ts +++ b/src/renderer/src/config/providers.ts @@ -562,7 +562,7 @@ export const PROVIDER_CONFIG = { models: 'https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu' } }, - 'tencent-cloud-ti': { + 'tentent-cloud-ti': { api: { url: 'https://api.lkeap.cloud.tencent.com' }, diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 2dd60164..b6e89afb 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -782,7 +782,8 @@ "remove_duplicate_keys": "Remove Duplicate Keys", "remove_invalid_keys": "Remove Invalid Keys", "search_placeholder": "Search model id or name", - "title": "Model Provider" + "title": "Model Provider", + "search": "Search Providers..." }, "proxy": { "mode": { diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index 627a6932..e82c6d5d 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -782,7 +782,8 @@ "remove_duplicate_keys": "重複キーを削除", "remove_invalid_keys": "無効なキーを削除", "search_placeholder": "モデルIDまたは名前を検索", - "title": "モデルプロバイダー" + "title": "モデルプロバイダー", + "search": "プロバイダーを検索..." }, "proxy": { "mode": { diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index 5219d3e9..6b12bcf4 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -782,7 +782,8 @@ "remove_duplicate_keys": "Удалить дубликаты ключей", "remove_invalid_keys": "Удалить недействительные ключи", "search_placeholder": "Поиск по ID или имени модели", - "title": "Провайдеры моделей" + "title": "Провайдеры моделей", + "search": "Поиск поставщиков..." }, "proxy": { "mode": { diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index b444438e..87fce320 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -782,7 +782,8 @@ "remove_duplicate_keys": "移除重复密钥", "remove_invalid_keys": "删除无效密钥", "search_placeholder": "搜索模型 ID 或名称", - "title": "模型服务" + "title": "模型服务", + "search": "搜索模型平台..." }, "proxy": { "mode": { diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 0e8f8425..2bd99d4c 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -781,7 +781,8 @@ "remove_duplicate_keys": "移除重複密鑰", "remove_invalid_keys": "刪除無效密鑰", "search_placeholder": "搜尋模型 ID 或名稱", - "title": "模型提供者" + "title": "模型提供者", + "search": "搜尋模型平台..." }, "proxy": { "mode": { diff --git a/src/renderer/src/pages/settings/ProviderSettings/index.tsx b/src/renderer/src/pages/settings/ProviderSettings/index.tsx index 5fe6853b..785c19d2 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/index.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/index.tsx @@ -5,7 +5,7 @@ import { getProviderLogo } from '@renderer/config/providers' import { useAllProviders, useProviders } from '@renderer/hooks/useProvider' import { Provider } from '@renderer/types' import { droppableReorder, generateColorFromChar, getFirstCharacter, uuid } from '@renderer/utils' -import { Avatar, Button, Dropdown, MenuProps, Tag } from 'antd' +import { Avatar, Button, Dropdown, Input, MenuProps, Tag } from 'antd' import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' @@ -18,6 +18,7 @@ const ProvidersList: FC = () => { const { updateProviders, addProvider, removeProvider, updateProvider } = useProviders() const [selectedProvider, setSelectedProvider] = useState(providers[0]) const { t } = useTranslation() + const [searchText, setSearchText] = useState('') const [dragging, setDragging] = useState(false) const onDragEnd = (result: DropResult) => { @@ -95,17 +96,58 @@ const ProvidersList: FC = () => { return menus } + //will match the providers and the models that provider provides + const filteredProviders = providers.filter((provider) => { + // 获取 provider 的名称 + const providerName = provider.isSystem ? t(`provider.${provider.id}`) : provider.name + + // 检查 provider 的 id 和 name 是否匹配搜索条件 + const isProviderMatch = + provider.id.toLowerCase().includes(searchText.toLowerCase()) || + providerName.toLowerCase().includes(searchText.toLowerCase()) + + // 检查 provider.models 中是否有 model 的 id 或 name 匹配搜索条件 + const isModelMatch = provider.models.some((model) => { + return ( + model.id.toLowerCase().includes(searchText.toLowerCase()) || + model.name.toLowerCase().includes(searchText.toLowerCase()) + ) + }) + + // 如果 provider 或 model 匹配,则保留该 provider + return isProviderMatch || isModelMatch + }) + return ( + + setSearchText(e.target.value)} + onKeyDown={(e) => { + if (e.key === 'Escape') { + setSearchText('') + } + }} + allowClear + disabled={dragging} + /> + setDragging(true)} onDragEnd={onDragEnd}> {(provided) => (
- {providers.map((provider, index) => ( - + {filteredProviders.map((provider, index) => ( + 0}> {(provided) => (
{ - {!dragging && ( - - - - )} + + +