diff --git a/src/renderer/src/hooks/useKnowledge.ts b/src/renderer/src/hooks/useKnowledge.ts index ffd425e1ad..dbb90ca834 100644 --- a/src/renderer/src/hooks/useKnowledge.ts +++ b/src/renderer/src/hooks/useKnowledge.ts @@ -307,16 +307,22 @@ export const useKnowledgeBases = () => { // remove assistant knowledge_base const _assistants = assistants.map((assistant) => { - if (assistant.knowledge_base?.id === baseId) { - return { ...assistant, knowledge_base: undefined } + if (assistant.knowledge_bases?.find((kb) => kb.id === baseId)) { + return { + ...assistant, + knowledge_bases: assistant.knowledge_bases.filter((kb) => kb.id !== baseId) + } } return assistant }) // remove agent knowledge_base const _agents = agents.map((agent) => { - if (agent.knowledge_base?.id === baseId) { - return { ...agent, knowledge_base: undefined } + if (agent.knowledge_bases?.find((kb) => kb.id === baseId)) { + return { + ...agent, + knowledge_bases: agent.knowledge_bases.filter((kb) => kb.id !== baseId) + } } return agent }) diff --git a/src/renderer/src/pages/agents/components/AddAgentPopup.tsx b/src/renderer/src/pages/agents/components/AddAgentPopup.tsx index cd169edff5..162c2e70be 100644 --- a/src/renderer/src/pages/agents/components/AddAgentPopup.tsx +++ b/src/renderer/src/pages/agents/components/AddAgentPopup.tsx @@ -9,7 +9,7 @@ import { useSidebarIconShow } from '@renderer/hooks/useSidebarIcon' import { fetchGenerate } from '@renderer/services/ApiService' import { getDefaultModel } from '@renderer/services/AssistantService' import { useAppSelector } from '@renderer/store' -import { Agent } from '@renderer/types' +import { Agent, KnowledgeBase } from '@renderer/types' import { getLeadingEmoji, uuid } from '@renderer/utils' import { Button, Form, FormInstance, Input, Modal, Popover, Select, SelectProps } from 'antd' import TextArea from 'antd/es/input/TextArea' @@ -25,7 +25,7 @@ type FieldType = { id: string name: string prompt: string - knowledge_base_id: string + knowledge_base_id: string[] } const PopupContainer: React.FC = ({ resolve }) => { @@ -57,7 +57,9 @@ const PopupContainer: React.FC = ({ resolve }) => { const _agent: Agent = { id: uuid(), name: values.name, - knowledge_base: knowledgeState.bases.find((t) => t.id === values.knowledge_base_id), + knowledge_bases: values.knowledge_base_id + .map((id) => knowledgeState.bases.find((t) => t.id === id)) + .filter((base): base is KnowledgeBase => base !== undefined), emoji: _emoji, prompt: values.prompt, defaultModel: getDefaultModel(), @@ -156,6 +158,7 @@ const PopupContainer: React.FC = ({ resolve }) => { {showKnowledgeIcon && ( base.id)} + allowClear + placeholder={t('agents.add.knowledge_base.placeholder')} + menuItemSelectedIcon={} + options={knowledgeOptions} + onChange={(ids) => { + const newSelected = knowledgeState.bases.filter((base) => ids.includes(base.id)) + onSelect(newSelected) + }} + style={{ width: '200px' }} + /> )} ) } -const KnowledgeBaseButton: FC = ({ selectedBase, onSelect, disabled, ToolbarButton }) => { +const KnowledgeBaseButton: FC = ({ selectedBases, onSelect, disabled, ToolbarButton }) => { const { t } = useTranslation() - if (selectedBase) { - return ( - - onSelect(undefined)}> - - - - ) - } - return ( } + content={} overlayStyle={{ maxWidth: 400 }} trigger="click"> - selectedBase && onSelect(undefined)} disabled={disabled}> - + + 0 ? 'var(--color-link)' : 'var(--color-icon)' }} + /> diff --git a/src/renderer/src/pages/settings/AssistantSettings/AssistantKnowledgeBaseSettings.tsx b/src/renderer/src/pages/settings/AssistantSettings/AssistantKnowledgeBaseSettings.tsx index 9108843dbb..90efde55a9 100644 --- a/src/renderer/src/pages/settings/AssistantSettings/AssistantKnowledgeBaseSettings.tsx +++ b/src/renderer/src/pages/settings/AssistantSettings/AssistantKnowledgeBaseSettings.tsx @@ -26,8 +26,8 @@ const AssistantKnowledgeBaseSettings: React.FC = ({ assistant, updateAssi }) const onUpdate = (value) => { - const knowledge_base = knowledgeState.bases.find((t) => t.id === value) - const _assistant = { ...assistant, knowledge_base } + const knowledge_bases = value.map((id) => knowledgeState.bases.find((b) => b.id === id)) + const _assistant = { ...assistant, knowledge_bases } updateAssistant(_assistant) } @@ -37,8 +37,9 @@ const AssistantKnowledgeBaseSettings: React.FC = ({ assistant, updateAssi {t('common.knowledge_base')}