diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index a082831b..b8cdec96 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -573,6 +573,7 @@ "directory_placeholder": "Enter Directory Path", "model_info": "Model Info", "not_support": "Knowledge base database engine updated, the knowledge base will no longer be supported, please create a new knowledge base", + "no_provider": "Knowledge base model provider is not set, the knowledge base will no longer be supported, please create a new knowledge base", "source": "Source" }, "models": { diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index c66a4f30..1f146aaf 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -556,7 +556,11 @@ "sitemap_placeholder": "サイトマップURLを入力", "directories": "ディレクトリ", "add_directory": "ディレクトリを追加", - "directory_placeholder": "ディレクトリパスを入力" + "directory_placeholder": "ディレクトリパスを入力", + "model_info": "モデル情報", + "not_support": "ナレッジベースデータベースエンジンが更新されました。このナレッジベースはもうサポートされていません。新しいナレッジベースを作成してください", + "no_provider": "ナレッジベースモデルプロバイダーが設定されていません。ナレッジベースはもうサポートされていません。新しいナレッジベースを作成してください", + "source": "ソース" }, "models": { "pinned": "固定済み", diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index bfd2a5c1..c1088ab5 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -573,6 +573,7 @@ "directory_placeholder": "Введите путь к директории", "model_info": "Модель информации", "not_support": "База знаний базы данных движок обновлен, база знаний больше не поддерживается, пожалуйста, создайте новую базу знаний", + "no_provider": "База знаний модель поставщика не настроена, база знаний больше не поддерживается, пожалуйста, создайте новую базу знаний", "source": "Источник" }, "models": { diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 5cf5fa01..a2fb898f 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -562,6 +562,7 @@ "directory_placeholder": "请输入目录路径", "model_info": "模型信息", "not_support": "知识库数据库引擎已更新,该知识库将不再支持,请重新创建知识库", + "no_provider": "知识库模型服务商丢失,该知识库将不再支持,请重新创建知识库", "source": "来源" }, "models": { diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index d22c6bcc..105d78ef 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -561,6 +561,7 @@ "directory_placeholder": "請輸入目錄路徑", "model_info": "模型信息", "not_support": "知識庫數據庫引擎已更新,該知識庫將不再支持,請重新創建知識庫", + "no_provider": "知識庫模型提供商遺失,該知識庫將不再支持,請重新創建知識庫", "source": "來源" }, "models": { diff --git a/src/renderer/src/pages/home/Tabs/SettingsTab.tsx b/src/renderer/src/pages/home/Tabs/SettingsTab.tsx index aab1eb52..866e230d 100644 --- a/src/renderer/src/pages/home/Tabs/SettingsTab.tsx +++ b/src/renderer/src/pages/home/Tabs/SettingsTab.tsx @@ -391,6 +391,7 @@ const Container = styled(Scrollbar)` padding: 0 10px; padding-right: 5px; padding-top: 2px; + padding-bottom: 10px; ` const Label = styled.p` @@ -410,7 +411,7 @@ const SettingRowTitleSmall = styled(SettingRowTitle)` ` export const SettingGroup = styled.div<{ theme?: ThemeMode }>` - padding: 10px 5px; + padding: 0 5px; width: 100%; margin-top: 0; border-radius: 8px; diff --git a/src/renderer/src/pages/home/components/SelectModelButton.tsx b/src/renderer/src/pages/home/components/SelectModelButton.tsx index ab2da4b6..f45b043a 100644 --- a/src/renderer/src/pages/home/components/SelectModelButton.tsx +++ b/src/renderer/src/pages/home/components/SelectModelButton.tsx @@ -4,7 +4,7 @@ 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 { getProviderByModel } from '@renderer/services/AssistantService' +import { getProviderName } from '@renderer/services/ProviderService' import { Assistant } from '@renderer/types' import { Button } from 'antd' import { FC } from 'react' @@ -31,13 +31,14 @@ const SelectModelButton: FC = ({ assistant }) => { } } + const providerName = getProviderName(model?.provider) + return ( - {model ? model.name : t('button.select_model')} |{' '} - {t(`provider.${model?.provider}`, { defaultValue: getProviderByModel(model)?.name })} + {model ? model.name : t('button.select_model')} {providerName ? '| ' + providerName : ''} {isVisionModel(model) && } diff --git a/src/renderer/src/pages/knowledge/KnowledgeContent.tsx b/src/renderer/src/pages/knowledge/KnowledgeContent.tsx index 43364d7a..4de38b81 100644 --- a/src/renderer/src/pages/knowledge/KnowledgeContent.tsx +++ b/src/renderer/src/pages/knowledge/KnowledgeContent.tsx @@ -13,6 +13,7 @@ import TextEditPopup from '@renderer/components/Popups/TextEditPopup' import Scrollbar from '@renderer/components/Scrollbar' import { useKnowledge } from '@renderer/hooks/useKnowledge' import FileManager from '@renderer/services/FileManager' +import { getProviderName } from '@renderer/services/ProviderService' import { FileType, FileTypes, KnowledgeBase } from '@renderer/types' import { Alert, Button, Card, Divider, message, Tag, Typography, Upload } from 'antd' import { FC } from 'react' @@ -74,11 +75,17 @@ const KnowledgeContent: FC = ({ selectedBase }) => { addDirectory } = useKnowledge(selectedBase.id || '') + const providerName = getProviderName(base?.model.provider || '') + const disabled = !base?.version || !providerName + if (!base) { return null } const handleAddFile = () => { + if (disabled) { + return + } const input = document.createElement('input') input.type = 'file' input.multiple = true @@ -91,6 +98,10 @@ const KnowledgeContent: FC = ({ selectedBase }) => { } const handleDrop = async (files: File[]) => { + if (disabled) { + return + } + if (files) { const _files: FileType[] = files.map((file) => ({ id: file.name, @@ -110,6 +121,10 @@ const KnowledgeContent: FC = ({ selectedBase }) => { } const handleAddUrl = async () => { + if (disabled) { + return + } + const url = await PromptPopup.show({ title: t('knowledge_base.add_url'), message: '', @@ -135,6 +150,10 @@ const KnowledgeContent: FC = ({ selectedBase }) => { } const handleAddSitemap = async () => { + if (disabled) { + return + } + const url = await PromptPopup.show({ title: t('knowledge_base.add_sitemap'), message: '', @@ -160,16 +179,28 @@ const KnowledgeContent: FC = ({ selectedBase }) => { } const handleAddNote = async () => { + if (disabled) { + return + } + const note = await TextEditPopup.show({ text: '', textareaProps: { rows: 20 } }) note && addNote(note) } const handleEditNote = async (note: any) => { + if (disabled) { + return + } + const editedText = await TextEditPopup.show({ text: note.content as string, textareaProps: { rows: 20 } }) editedText && updateNoteContent(note.id, editedText) } const handleAddDirectory = async () => { + if (disabled) { + return + } + const path = await window.api.file.selectFolder() console.log('[KnowledgeContent] Selected directory:', path) path && addDirectory(path) @@ -180,10 +211,13 @@ const KnowledgeContent: FC = ({ selectedBase }) => { {!base?.version && ( )} + {!providerName && ( + + )} {t('files.title')} - @@ -223,7 +257,7 @@ const KnowledgeContent: FC = ({ selectedBase }) => { {t('knowledge_base.directories')} - @@ -250,7 +284,7 @@ const KnowledgeContent: FC = ({ selectedBase }) => { {t('knowledge_base.urls')} - @@ -277,7 +311,7 @@ const KnowledgeContent: FC = ({ selectedBase }) => { {t('knowledge_base.sitemaps')} - @@ -304,7 +338,7 @@ const KnowledgeContent: FC = ({ selectedBase }) => { {t('knowledge_base.notes')} - @@ -332,11 +366,15 @@ const KnowledgeContent: FC = ({ selectedBase }) => { {base.model.name} {t('models.dimensions', { dimensions: base.dimensions || 0 })} - {base.model.provider} + {providerName && {providerName}} - diff --git a/src/renderer/src/services/ProviderService.ts b/src/renderer/src/services/ProviderService.ts new file mode 100644 index 00000000..3d54b8c1 --- /dev/null +++ b/src/renderer/src/services/ProviderService.ts @@ -0,0 +1,15 @@ +import i18n from '@renderer/i18n' +import store from '@renderer/store' + +export function getProviderName(id: string) { + const provider = store.getState().llm.providers.find((p) => p.id === id) + if (!provider) { + return '' + } + + if (provider.isSystem) { + return i18n.t(`provider.${provider.id}`, { defaultValue: provider.name }) + } + + return provider?.name +}