refactor: update rerank model support and configuration

- Changed provider configuration in dev-app-update.yml to use GitHub.
- Added SUPPORTED_REANK_PROVIDERS constant to filter available rerank models.
- Updated tooltip messages in localization files to indicate supported providers.
- Enhanced AddKnowledgePopup and KnowledgeSettingsPopup components to display supported providers in the UI.
This commit is contained in:
kangfenmao 2025-03-22 16:30:54 +08:00
parent ed731db56a
commit 404ec095d4
10 changed files with 52 additions and 25 deletions

View File

@ -1,8 +1,8 @@
# provider: generic # provider: generic
# url: http://127.0.0.1:8080 # url: http://127.0.0.1:8080
# updaterCacheDirName: cherry-studio-updater # updaterCacheDirName: cherry-studio-updater
# provider: github provider: github
# repo: cherry-studio repo: cherry-studio
# owner: kangfenmao owner: kangfenmao
provider: generic # provider: generic
url: https://cherrystudio.ocool.online # url: https://cherrystudio.ocool.online

View File

@ -7,6 +7,7 @@ export default class DefaultReranker extends BaseReranker {
constructor(base: KnowledgeBaseParams) { constructor(base: KnowledgeBaseParams) {
super(base) super(base)
} }
async rerank(): Promise<ExtractChunkData[]> { async rerank(): Promise<ExtractChunkData[]> {
throw new Error('Method not implemented.') throw new Error('Method not implemented.')
} }

View File

@ -93,6 +93,8 @@ export function getProviderLogo(providerId: string) {
return PROVIDER_LOGO_MAP[providerId as keyof typeof PROVIDER_LOGO_MAP] return PROVIDER_LOGO_MAP[providerId as keyof typeof PROVIDER_LOGO_MAP]
} }
export const SUPPORTED_REANK_PROVIDERS = ['silicon', 'jina']
export const PROVIDER_CONFIG = { export const PROVIDER_CONFIG = {
openai: { openai: {
api: { api: {

View File

@ -563,7 +563,8 @@
"vision": "Vision", "vision": "Vision",
"websearch": "WebSearch", "websearch": "WebSearch",
"rerank_model": "Reordering Model", "rerank_model": "Reordering Model",
"rerank_model_tooltip": "Click the Manage button in Settings -> Model Services to add." "rerank_model_tooltip": "Click the Manage button in Settings -> Model Services to add.",
"rerank_model_support_provider": "Currently, the reordering model only supports some providers ({{provider}})"
}, },
"navbar": { "navbar": {
"expand": "Expand Dialog", "expand": "Expand Dialog",

View File

@ -563,7 +563,8 @@
"vision": "画像", "vision": "画像",
"websearch": "ウェブ検索", "websearch": "ウェブ検索",
"rerank_model": "再順序付けモデル", "rerank_model": "再順序付けモデル",
"rerank_model_tooltip": "設定->モデルサービスに移動し、管理ボタンをクリックして追加します。" "rerank_model_tooltip": "設定->モデルサービスに移動し、管理ボタンをクリックして追加します。",
"rerank_model_support_provider": "現在の再順序付けモデルは、{{provider}} のみサポートしています"
}, },
"navbar": { "navbar": {
"expand": "ダイアログを展開", "expand": "ダイアログを展開",

View File

@ -569,7 +569,8 @@
"vision": "Визуальные", "vision": "Визуальные",
"websearch": "Веб-поисковые", "websearch": "Веб-поисковые",
"rerank_model": "Модель переупорядочивания", "rerank_model": "Модель переупорядочивания",
"rerank_model_tooltip": "В настройках -> Служба модели нажмите кнопку \"Управление\", чтобы добавить." "rerank_model_tooltip": "В настройках -> Служба модели нажмите кнопку \"Управление\", чтобы добавить.",
"rerank_model_support_provider": "Текущая модель переупорядочивания поддерживается только некоторыми поставщиками ({{provider}})"
}, },
"navbar": { "navbar": {
"expand": "Развернуть диалоговое окно", "expand": "Развернуть диалоговое окно",

View File

@ -164,20 +164,20 @@
"topics.export.yuque": "导出到语雀", "topics.export.yuque": "导出到语雀",
"topics.export.obsidian": "导出到 Obsidian", "topics.export.obsidian": "导出到 Obsidian",
"topics.export.obsidian_not_configured": "Obsidian 未配置", "topics.export.obsidian_not_configured": "Obsidian 未配置",
"topics.export.obsidian_title":"标题", "topics.export.obsidian_title": "标题",
"topics.export.obsidian_title_placeholder":"请输入标题", "topics.export.obsidian_title_placeholder": "请输入标题",
"topics.export.obsidian_title_required":"标题不能为空", "topics.export.obsidian_title_required": "标题不能为空",
"topics.export.obsidian_tags":"标签", "topics.export.obsidian_tags": "标签",
"topics.export.obsidian_tags_placeholder":"请输入标签,多个标签用英文逗号分隔,Obsidian不可用纯数字", "topics.export.obsidian_tags_placeholder": "请输入标签,多个标签用英文逗号分隔,Obsidian不可用纯数字",
"topics.export.obsidian_created":"创建时间", "topics.export.obsidian_created": "创建时间",
"topics.export.obsidian_created_placeholder":"请选择创建时间", "topics.export.obsidian_created_placeholder": "请选择创建时间",
"topics.export.obsidian_source":"来源", "topics.export.obsidian_source": "来源",
"topics.export.obsidian_source_placeholder":"请输入来源", "topics.export.obsidian_source_placeholder": "请输入来源",
"topics.export.obsidian_operate":"处理方式", "topics.export.obsidian_operate": "处理方式",
"topics.export.obsidian_operate_placeholder":"请选择处理方式", "topics.export.obsidian_operate_placeholder": "请选择处理方式",
"topics.export.obsidian_operate_append":"追加", "topics.export.obsidian_operate_append": "追加",
"topics.export.obsidian_operate_prepend":"前置", "topics.export.obsidian_operate_prepend": "前置",
"topics.export.obsidian_operate_new_or_overwrite":"新建(如果存在就覆盖)", "topics.export.obsidian_operate_new_or_overwrite": "新建(如果存在就覆盖)",
"topics.export.obsidian_atributes": "配置笔记属性", "topics.export.obsidian_atributes": "配置笔记属性",
"topics.export.obsidian_btn": "确定", "topics.export.obsidian_btn": "确定",
"topics.export.obsidian_export_success": "导出成功", "topics.export.obsidian_export_success": "导出成功",
@ -540,6 +540,7 @@
"embedding_model_tooltip": "在设置->模型服务中点击管理按钮添加", "embedding_model_tooltip": "在设置->模型服务中点击管理按钮添加",
"rerank_model": "重排序模型", "rerank_model": "重排序模型",
"rerank_model_tooltip": "在设置->模型服务中点击管理按钮添加", "rerank_model_tooltip": "在设置->模型服务中点击管理按钮添加",
"rerank_model_support_provider": "目前重排序模型仅支持部分服务商 ({{provider}})",
"free": "免费", "free": "免费",
"no_matches": "无可用模型", "no_matches": "无可用模型",
"parameter_name": "参数名称", "parameter_name": "参数名称",

View File

@ -164,7 +164,7 @@
"topics.export.yuque": "匯出到語雀", "topics.export.yuque": "匯出到語雀",
"topics.export.obsidian": "匯出到 Obsidian", "topics.export.obsidian": "匯出到 Obsidian",
"topics.export.obsidian_not_configured": "Obsidian 未配置", "topics.export.obsidian_not_configured": "Obsidian 未配置",
"topics.export.obsidian_title":"標題", "topics.export.obsidian_title": "標題",
"topics.export.obsidian_title_placeholder": "請輸入標題", "topics.export.obsidian_title_placeholder": "請輸入標題",
"topics.export.obsidian_title_required": "標題不能為空", "topics.export.obsidian_title_required": "標題不能為空",
"topics.export.obsidian_tags": "標籤", "topics.export.obsidian_tags": "標籤",
@ -566,7 +566,8 @@
"vision": "視覺", "vision": "視覺",
"websearch": "網路搜尋", "websearch": "網路搜尋",
"rerank_model": "重排序模型", "rerank_model": "重排序模型",
"rerank_model_tooltip": "在設定->模型服務中點擊管理按鈕添加" "rerank_model_tooltip": "在設定->模型服務中點擊管理按鈕添加",
"rerank_model_support_provider": "目前重排序模型僅支持部分服務商 ({{provider}})"
}, },
"navbar": { "navbar": {
"expand": "伸縮對話框", "expand": "伸縮對話框",

View File

@ -1,7 +1,9 @@
import { TopView } from '@renderer/components/TopView' import { TopView } from '@renderer/components/TopView'
import { isEmbeddingModel, isRerankModel } from '@renderer/config/models' import { isEmbeddingModel, isRerankModel } from '@renderer/config/models'
import { SUPPORTED_REANK_PROVIDERS } from '@renderer/config/providers'
import { useKnowledgeBases } from '@renderer/hooks/useKnowledge' import { useKnowledgeBases } from '@renderer/hooks/useKnowledge'
import { useProviders } from '@renderer/hooks/useProvider' import { useProviders } from '@renderer/hooks/useProvider'
import { SettingHelpText } from '@renderer/pages/settings'
import AiProvider from '@renderer/providers/AiProvider' import AiProvider from '@renderer/providers/AiProvider'
import { getKnowledgeBaseParams } from '@renderer/services/KnowledgeService' import { getKnowledgeBaseParams } from '@renderer/services/KnowledgeService'
import { getModelUniqId } from '@renderer/services/ModelService' import { getModelUniqId } from '@renderer/services/ModelService'
@ -34,14 +36,17 @@ const PopupContainer: React.FC<Props> = ({ title, resolve }) => {
const { t } = useTranslation() const { t } = useTranslation()
const { providers } = useProviders() const { providers } = useProviders()
const { addKnowledgeBase } = useKnowledgeBases() const { addKnowledgeBase } = useKnowledgeBases()
const allModels = providers const allModels = providers
.map((p) => p.models) .map((p) => p.models)
.flat() .flat()
.filter((model) => isEmbeddingModel(model)) .filter((model) => isEmbeddingModel(model))
const rerankModels = providers const rerankModels = providers
.map((p) => p.models) .map((p) => p.models)
.flat() .flat()
.filter((model) => isRerankModel(model)) .filter((model) => isRerankModel(model))
const nameInputRef = useRef<any>(null) const nameInputRef = useRef<any>(null)
const selectOptions = providers const selectOptions = providers
@ -60,6 +65,7 @@ const PopupContainer: React.FC<Props> = ({ title, resolve }) => {
const rerankSelectOptions = providers const rerankSelectOptions = providers
.filter((p) => p.models.length > 0) .filter((p) => p.models.length > 0)
.filter((p) => SUPPORTED_REANK_PROVIDERS.includes(p.id))
.map((p) => ({ .map((p) => ({
label: p.isSystem ? t(`provider.${p.id}`) : p.name, label: p.isSystem ? t(`provider.${p.id}`) : p.name,
title: p.name, title: p.name,
@ -164,6 +170,11 @@ const PopupContainer: React.FC<Props> = ({ title, resolve }) => {
tooltip={{ title: t('models.rerank_model_tooltip'), placement: 'right' }} tooltip={{ title: t('models.rerank_model_tooltip'), placement: 'right' }}
rules={[{ required: false, message: t('message.error.enter.model') }]}> rules={[{ required: false, message: t('message.error.enter.model') }]}>
<Select style={{ width: '100%' }} options={rerankSelectOptions} placeholder={t('settings.models.empty')} /> <Select style={{ width: '100%' }} options={rerankSelectOptions} placeholder={t('settings.models.empty')} />
<SettingHelpText style={{ marginTop: 10 }}>
{t('models.rerank_model_support_provider', {
provider: SUPPORTED_REANK_PROVIDERS.map((id) => t(`provider.${id}`))
})}
</SettingHelpText>
</Form.Item> </Form.Item>
</Form> </Form>
</Modal> </Modal>

View File

@ -3,8 +3,10 @@ import { TopView } from '@renderer/components/TopView'
import { DEFAULT_KNOWLEDGE_DOCUMENT_COUNT } from '@renderer/config/constant' import { DEFAULT_KNOWLEDGE_DOCUMENT_COUNT } from '@renderer/config/constant'
import { getEmbeddingMaxContext } from '@renderer/config/embedings' import { getEmbeddingMaxContext } from '@renderer/config/embedings'
import { isEmbeddingModel, isRerankModel } from '@renderer/config/models' import { isEmbeddingModel, isRerankModel } from '@renderer/config/models'
import { SUPPORTED_REANK_PROVIDERS } from '@renderer/config/providers'
import { useKnowledge } from '@renderer/hooks/useKnowledge' import { useKnowledge } from '@renderer/hooks/useKnowledge'
import { useProviders } from '@renderer/hooks/useProvider' import { useProviders } from '@renderer/hooks/useProvider'
import { SettingHelpText } from '@renderer/pages/settings'
import { getModelUniqId } from '@renderer/services/ModelService' import { getModelUniqId } from '@renderer/services/ModelService'
import { KnowledgeBase } from '@renderer/types' import { KnowledgeBase } from '@renderer/types'
import { Alert, Form, Input, InputNumber, Modal, Select, Slider } from 'antd' import { Alert, Form, Input, InputNumber, Modal, Select, Slider } from 'antd'
@ -65,6 +67,7 @@ const PopupContainer: React.FC<Props> = ({ base: _base, resolve }) => {
const rerankSelectOptions = providers const rerankSelectOptions = providers
.filter((p) => p.models.length > 0) .filter((p) => p.models.length > 0)
.filter((p) => SUPPORTED_REANK_PROVIDERS.includes(p.id))
.map((p) => ({ .map((p) => ({
label: p.isSystem ? t(`provider.${p.id}`) : p.name, label: p.isSystem ? t(`provider.${p.id}`) : p.name,
title: p.name, title: p.name,
@ -94,7 +97,7 @@ const PopupContainer: React.FC<Props> = ({ base: _base, resolve }) => {
} }
updateKnowledgeBase(newBase) updateKnowledgeBase(newBase)
setOpen(false) setOpen(false)
resolve(newBase) setTimeout(() => resolve(newBase), 350)
} catch (error) { } catch (error) {
console.error('Validation failed:', error) console.error('Validation failed:', error)
} }
@ -151,6 +154,11 @@ const PopupContainer: React.FC<Props> = ({ base: _base, resolve }) => {
allowClear allowClear
/> />
</Form.Item> </Form.Item>
<SettingHelpText style={{ marginTop: -15, marginBottom: 20 }}>
{t('models.rerank_model_support_provider', {
provider: SUPPORTED_REANK_PROVIDERS.map((id) => t(`provider.${id}`))
})}
</SettingHelpText>
<Form.Item <Form.Item
name="documentCount" name="documentCount"