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

View File

@ -33,10 +33,11 @@ import { SdkModel } from '@renderer/types/sdk'
import { removeSpecialCharactersForTopicName } from '@renderer/utils' import { removeSpecialCharactersForTopicName } from '@renderer/utils'
import { isAbortError } from '@renderer/utils/error' import { isAbortError } from '@renderer/utils/error'
import { extractInfoFromXML, ExtractResults } from '@renderer/utils/extract' 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 { findLast, isEmpty, takeRight } from 'lodash'
import AiProvider from '../aiCore' import AiProvider from '../aiCore'
import store from '../store'
import { import {
getAssistantProvider, getAssistantProvider,
getAssistantSettings, getAssistantSettings,
@ -63,7 +64,7 @@ async function fetchExternalTool(
lastAnswer?: Message lastAnswer?: Message
): Promise<ExternalToolResult> { ): Promise<ExternalToolResult> {
// 可能会有重复? // 可能会有重复?
const knowledgeBaseIds = getKnowledgeBaseIds(lastUserMessage) const knowledgeBaseIds = assistant.knowledge_bases?.map((base) => base.id)
const hasKnowledgeBase = !isEmpty(knowledgeBaseIds) const hasKnowledgeBase = !isEmpty(knowledgeBaseIds)
const knowledgeRecognition = assistant.knowledgeRecognition || 'on' const knowledgeRecognition = assistant.knowledgeRecognition || 'on'
const webSearchProvider = WebSearchService.getWebSearchProvider(assistant.webSearchProviderId) const webSearchProvider = WebSearchService.getWebSearchProvider(assistant.webSearchProviderId)
@ -251,7 +252,12 @@ async function fetchExternalTool(
// Get MCP tools (Fix duplicate declaration) // Get MCP tools (Fix duplicate declaration)
let mcpTools: MCPTool[] = [] // Initialize as empty array 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) { if (enabledMCPs && enabledMCPs.length > 0) {
try { try {
const toolPromises = enabledMCPs.map<Promise<MCPTool[]>>(async (mcpServer) => { 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 store from '@renderer/store'
import { messageBlocksSelectors, removeManyBlocks } from '@renderer/store/messageBlock' import { messageBlocksSelectors, removeManyBlocks } from '@renderer/store/messageBlock'
import { selectMessagesForTopic } from '@renderer/store/newMessage' 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 { FileTypes } from '@renderer/types'
import type { Message, MessageBlock } from '@renderer/types/newMessage' import type { Message, MessageBlock } from '@renderer/types/newMessage'
import { AssistantMessageStatus, MessageBlockStatus, MessageBlockType } from '@renderer/types/newMessage' import { AssistantMessageStatus, MessageBlockStatus, MessageBlockType } from '@renderer/types/newMessage'
@ -108,9 +108,7 @@ export function getUserMessage({
content, content,
files, files,
// Keep other potential params if needed by createMessage // Keep other potential params if needed by createMessage
knowledgeBaseIds,
mentions, mentions,
enabledMCPs,
usage usage
}: { }: {
assistant: Assistant assistant: Assistant
@ -120,7 +118,6 @@ export function getUserMessage({
files?: FileType[] files?: FileType[]
knowledgeBaseIds?: string[] knowledgeBaseIds?: string[]
mentions?: Model[] mentions?: Model[]
enabledMCPs?: MCPServer[]
usage?: Usage usage?: Usage
}): { message: Message; blocks: MessageBlock[] } { }): { message: Message; blocks: MessageBlock[] } {
const defaultModel = getDefaultModel() const defaultModel = getDefaultModel()
@ -133,8 +130,7 @@ export function getUserMessage({
if (content !== undefined) { if (content !== undefined) {
// Pass messageId when creating blocks // Pass messageId when creating blocks
const textBlock = createMainTextBlock(messageId, content, { const textBlock = createMainTextBlock(messageId, content, {
status: MessageBlockStatus.SUCCESS, status: MessageBlockStatus.SUCCESS
knowledgeBaseIds
}) })
blocks.push(textBlock) blocks.push(textBlock)
blockIds.push(textBlock.id) blockIds.push(textBlock.id)
@ -165,7 +161,7 @@ export function getUserMessage({
blocks: blockIds, blocks: blockIds,
// 移除knowledgeBaseIds // 移除knowledgeBaseIds
mentions, mentions,
enabledMCPs, // 移除mcp
type, type,
usage usage
} }
@ -203,7 +199,6 @@ export function resetAssistantMessage(message: Message, model?: Model): Message
useful: undefined, useful: undefined,
askId: undefined, askId: undefined,
mentions: undefined, mentions: undefined,
enabledMCPs: undefined,
blocks: [], blocks: [],
createdAt: new Date().toISOString() createdAt: new Date().toISOString()
} }

View File

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

View File

@ -140,17 +140,6 @@ export const getCitationContent = (message: Message): string => {
.join('\n\n') .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. * Gets the file content from all FileMessageBlocks and ImageMessageBlocks of a message.
* @param message - The message object. * @param message - The message object.