diff --git a/src/renderer/src/pages/knowledge/components/AddKnowledgePopup.tsx b/src/renderer/src/pages/knowledge/components/AddKnowledgePopup.tsx index e1c9d2958..841b17f9f 100644 --- a/src/renderer/src/pages/knowledge/components/AddKnowledgePopup.tsx +++ b/src/renderer/src/pages/knowledge/components/AddKnowledgePopup.tsx @@ -1,33 +1,29 @@ +import { InfoCircleOutlined, SettingOutlined, WarningOutlined } from '@ant-design/icons' import { TopView } from '@renderer/components/TopView' import { DEFAULT_KNOWLEDGE_DOCUMENT_COUNT } from '@renderer/config/constant' +import { getEmbeddingMaxContext } from '@renderer/config/embedings' import { isEmbeddingModel, isRerankModel } from '@renderer/config/models' import { NOT_SUPPORTED_REANK_PROVIDERS } from '@renderer/config/providers' // import { SUPPORTED_REANK_PROVIDERS } from '@renderer/config/providers' import { useKnowledgeBases } from '@renderer/hooks/useKnowledge' +import { usePreprocessProviders } from '@renderer/hooks/usePreprocess' import { useProviders } from '@renderer/hooks/useProvider' -import { SettingHelpText } from '@renderer/pages/settings' import AiProvider from '@renderer/providers/AiProvider' import { getKnowledgeBaseParams } from '@renderer/services/KnowledgeService' import { getModelUniqId } from '@renderer/services/ModelService' -import { Model } from '@renderer/types' +import { KnowledgeBase, Model, PreprocessProvider } from '@renderer/types' import { getErrorMessage } from '@renderer/utils/error' -import { Form, Input, Modal, Select, Slider } from 'antd' +import { Alert, Input, InputNumber, Modal, Select, Slider, Tabs, TabsProps, Tooltip } from 'antd' import { find, sortBy } from 'lodash' import { nanoid } from 'nanoid' import { useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' +import styled from 'styled-components' interface ShowParams { title: string } -interface FormData { - name: string - model: string - rerankModel: string | undefined - documentCount: number | undefined -} - interface Props extends ShowParams { resolve: (data: any) => void } @@ -35,10 +31,13 @@ interface Props extends ShowParams { const PopupContainer: React.FC = ({ title, resolve }) => { const [open, setOpen] = useState(true) const [loading, setLoading] = useState(false) - const [form] = Form.useForm() const { t } = useTranslation() const { providers } = useProviders() const { addKnowledgeBase } = useKnowledgeBases() + const [newBase, setNewBase] = useState({} as KnowledgeBase) + + const { preprocessProviders } = usePreprocessProviders() + const [selectedProvider, setSelectedProvider] = useState(undefined) const embeddingModels = useMemo(() => { return providers @@ -92,12 +91,10 @@ const PopupContainer: React.FC = ({ title, resolve }) => { const onOk = async () => { try { - const values = await form.validateFields() - const selectedEmbeddingModel = find(embeddingModels, JSON.parse(values.model)) as Model + // const values = await form.validateFields() + const selectedEmbeddingModel = find(embeddingModels, newBase.model) as Model - const selectedRerankModel = values.rerankModel - ? (find(rerankModels, JSON.parse(values.rerankModel)) as Model) - : undefined + const selectedRerankModel = newBase.rerankModel ? (find(rerankModels, newBase.rerankModel) as Model) : undefined if (selectedEmbeddingModel) { setLoading(true) @@ -119,24 +116,25 @@ const PopupContainer: React.FC = ({ title, resolve }) => { return } - const newBase = { + const _newBase = { + ...newBase, id: nanoid(), - name: values.name, + name: newBase.name, model: selectedEmbeddingModel, rerankModel: selectedRerankModel, dimensions, - documentCount: values.documentCount || DEFAULT_KNOWLEDGE_DOCUMENT_COUNT, + documentCount: newBase.documentCount || DEFAULT_KNOWLEDGE_DOCUMENT_COUNT, items: [], created_at: Date.now(), updated_at: Date.now(), version: 1 } - await window.api.knowledgeBase.create(getKnowledgeBaseParams(newBase)) + await window.api.knowledgeBase.create(getKnowledgeBaseParams(_newBase)) - addKnowledgeBase(newBase as any) + addKnowledgeBase(_newBase as any) setOpen(false) - resolve(newBase) + resolve(_newBase) } } catch (error) { console.error('Validation failed:', error) @@ -151,8 +149,176 @@ const PopupContainer: React.FC = ({ title, resolve }) => { resolve(null) } + const settingItems: TabsProps['items'] = [ + { + key: '1', + label: t('settings.general'), + children: ( + + +
{t('common.name')}
+ { + if (e.target.value) { + setNewBase({ ...newBase, name: e.target.value }) + } + }} + /> +
+ + +
+ {t('models.embedding_model')} + + + +
+ { + const rerankModel = value + ? providers.flatMap((p) => p.models).find((m) => getModelUniqId(m) === value) + : undefined + setNewBase({ ...newBase, rerankModel }) + }} + allowClear + /> +
+ + +
{t('settings.tool.preprocess.title')}
+