refactor: remove deprecated MCP server handling and knowledge base ID logic from Inputbar and related services (#7339)

- Removed unused MCP server handling from Inputbar and MessagesService.
- Updated ApiService to fetch active MCP servers directly from the store.
- Deprecated knowledgeBaseIds and enabledMCPs in Message types and related functions.
- Cleaned up related utility functions to enhance code clarity and maintainability.
This commit is contained in:
SuYao 2025-06-19 13:34:36 +08:00 committed by GitHub
parent c18a346098
commit 9d1b8bd9cd
5 changed files with 22 additions and 48 deletions

View File

@ -13,7 +13,6 @@ import {
import db from '@renderer/databases'
import { useAssistant } from '@renderer/hooks/useAssistant'
import { useKnowledgeBases } from '@renderer/hooks/useKnowledge'
import { useMCPServers } from '@renderer/hooks/useMCPServers'
import { useMessageOperations, useTopicLoading } from '@renderer/hooks/useMessageOperations'
import { modelGenerating, useRuntime } from '@renderer/hooks/useRuntime'
import { useMessageStyle, useSettings } from '@renderer/hooks/useSettings'
@ -105,7 +104,6 @@ const Inputbar: FC<Props> = ({ assistant: _assistant, setActiveTopic, topic }) =
const currentMessageId = useRef<string>('')
const isVision = useMemo(() => isVisionModel(model), [model])
const supportExts = useMemo(() => [...textExts, ...documentExts, ...(isVision ? imageExts : [])], [isVision])
const { activedMcpServers } = useMCPServers()
const { bases: knowledgeBases } = useKnowledgeBases()
const isMultiSelectMode = useAppSelector((state) => state.runtime.chat.isMultiSelectMode)
@ -176,22 +174,11 @@ const Inputbar: FC<Props> = ({ assistant: _assistant, setActiveTopic, topic }) =
if (uploadedFiles) {
baseUserMessage.files = uploadedFiles
}
const knowledgeBaseIds = selectedKnowledgeBases?.map((base) => base.id)
if (knowledgeBaseIds) {
baseUserMessage.knowledgeBaseIds = knowledgeBaseIds
}
if (mentionModels) {
baseUserMessage.mentions = mentionModels
}
if (!isEmpty(assistant.mcpServers) && !isEmpty(activedMcpServers)) {
baseUserMessage.enabledMCPs = activedMcpServers.filter((server) =>
assistant.mcpServers?.some((s) => s.id === server.id)
)
}
const assistantWithTopicPrompt = topic.prompt
? { ...assistant, prompt: `${assistant.prompt}\n${topic.prompt}` }
: assistant
@ -212,19 +199,7 @@ const Inputbar: FC<Props> = ({ assistant: _assistant, setActiveTopic, topic }) =
} catch (error) {
console.error('Failed to send message:', error)
}
}, [
activedMcpServers,
assistant,
dispatch,
files,
inputEmpty,
loading,
mentionModels,
resizeTextArea,
selectedKnowledgeBases,
text,
topic
])
}, [assistant, dispatch, files, inputEmpty, loading, mentionModels, resizeTextArea, text, topic])
const translate = useCallback(async () => {
if (isTranslating) {

View File

@ -33,10 +33,11 @@ import { SdkModel } from '@renderer/types/sdk'
import { removeSpecialCharactersForTopicName } from '@renderer/utils'
import { isAbortError } from '@renderer/utils/error'
import { extractInfoFromXML, ExtractResults } from '@renderer/utils/extract'
import { findFileBlocks, getKnowledgeBaseIds, getMainTextContent } from '@renderer/utils/messageUtils/find'
import { findFileBlocks, getMainTextContent } from '@renderer/utils/messageUtils/find'
import { findLast, isEmpty, takeRight } from 'lodash'
import AiProvider from '../aiCore'
import store from '../store'
import {
getAssistantProvider,
getAssistantSettings,
@ -63,7 +64,7 @@ async function fetchExternalTool(
lastAnswer?: Message
): Promise<ExternalToolResult> {
// 可能会有重复?
const knowledgeBaseIds = getKnowledgeBaseIds(lastUserMessage)
const knowledgeBaseIds = assistant.knowledge_bases?.map((base) => base.id)
const hasKnowledgeBase = !isEmpty(knowledgeBaseIds)
const knowledgeRecognition = assistant.knowledgeRecognition || 'on'
const webSearchProvider = WebSearchService.getWebSearchProvider(assistant.webSearchProviderId)
@ -251,7 +252,12 @@ async function fetchExternalTool(
// Get MCP tools (Fix duplicate declaration)
let mcpTools: MCPTool[] = [] // Initialize as empty array
const enabledMCPs = assistant.mcpServers
const allMcpServers = store.getState().mcp.servers || []
const activedMcpServers = allMcpServers.filter((s) => s.isActive)
const assistantMcpServers = assistant.mcpServers || []
const enabledMCPs = activedMcpServers.filter((server) => assistantMcpServers.some((s) => s.id === server.id))
if (enabledMCPs && enabledMCPs.length > 0) {
try {
const toolPromises = enabledMCPs.map<Promise<MCPTool[]>>(async (mcpServer) => {

View File

@ -6,7 +6,7 @@ import { fetchMessagesSummary } from '@renderer/services/ApiService'
import store from '@renderer/store'
import { messageBlocksSelectors, removeManyBlocks } from '@renderer/store/messageBlock'
import { selectMessagesForTopic } from '@renderer/store/newMessage'
import type { Assistant, FileType, MCPServer, Model, Topic, Usage } from '@renderer/types'
import type { Assistant, FileType, Model, Topic, Usage } from '@renderer/types'
import { FileTypes } from '@renderer/types'
import type { Message, MessageBlock } from '@renderer/types/newMessage'
import { AssistantMessageStatus, MessageBlockStatus, MessageBlockType } from '@renderer/types/newMessage'
@ -108,9 +108,7 @@ export function getUserMessage({
content,
files,
// Keep other potential params if needed by createMessage
knowledgeBaseIds,
mentions,
enabledMCPs,
usage
}: {
assistant: Assistant
@ -120,7 +118,6 @@ export function getUserMessage({
files?: FileType[]
knowledgeBaseIds?: string[]
mentions?: Model[]
enabledMCPs?: MCPServer[]
usage?: Usage
}): { message: Message; blocks: MessageBlock[] } {
const defaultModel = getDefaultModel()
@ -133,8 +130,7 @@ export function getUserMessage({
if (content !== undefined) {
// Pass messageId when creating blocks
const textBlock = createMainTextBlock(messageId, content, {
status: MessageBlockStatus.SUCCESS,
knowledgeBaseIds
status: MessageBlockStatus.SUCCESS
})
blocks.push(textBlock)
blockIds.push(textBlock.id)
@ -165,7 +161,7 @@ export function getUserMessage({
blocks: blockIds,
// 移除knowledgeBaseIds
mentions,
enabledMCPs,
// 移除mcp
type,
usage
}
@ -203,7 +199,6 @@ export function resetAssistantMessage(message: Message, model?: Model): Message
useful: undefined,
askId: undefined,
mentions: undefined,
enabledMCPs: undefined,
blocks: [],
createdAt: new Date().toISOString()
}

View File

@ -173,6 +173,9 @@ export type Message = {
useful?: boolean
askId?: string // 关联的问题消息ID
mentions?: Model[]
/**
* @deprecated
*/
enabledMCPs?: MCPServer[]
usage?: Usage
@ -204,8 +207,14 @@ export interface MessageInputBaseParams {
topic: Topic
content?: string
files?: FileType[]
/**
* @deprecated
*/
knowledgeBaseIds?: string[]
mentions?: Model[]
/**
* @deprecated
*/
enabledMCPs?: MCPServer[]
usage?: CompletionUsage
}

View File

@ -140,17 +140,6 @@ export const getCitationContent = (message: Message): string => {
.join('\n\n')
}
/**
* Gets the knowledgeBaseIds array from the *first* MainTextMessageBlock of a message.
* Note: Assumes knowledgeBaseIds are only relevant on the first text block, adjust if needed.
* @param message - The message object.
* @returns The knowledgeBaseIds array or undefined if not found.
*/
export const getKnowledgeBaseIds = (message: Message): string[] | undefined => {
const firstTextBlock = findMainTextBlocks(message)
return firstTextBlock?.flatMap((block) => block.knowledgeBaseIds).filter((id): id is string => Boolean(id))
}
/**
* Gets the file content from all FileMessageBlocks and ImageMessageBlocks of a message.
* @param message - The message object.