mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-26 03:31:24 +08:00
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:
parent
c18a346098
commit
9d1b8bd9cd
@ -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) {
|
||||
|
||||
@ -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) => {
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user