mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-19 14:41:24 +08:00
refactor(Providers): Optimize tool handling and message filtering
- Move MCP tool utilities to a dedicated utils folder - Update import paths for MCP tool functions across providers - Add isEmpty check for tools in Anthropic provider - Enhance message filtering in OpenAI provider with filterEmptyMessages - Simplify tool and message preparation logic
This commit is contained in:
parent
48d824fe6f
commit
6bcc21c578
@ -212,7 +212,7 @@ const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic })
|
|||||||
inverse={true}
|
inverse={true}
|
||||||
scrollableTarget="messages">
|
scrollableTarget="messages">
|
||||||
<ScrollContainer>
|
<ScrollContainer>
|
||||||
<LoaderContainer $loading={loading || isLoadingMore}>
|
<LoaderContainer $loading={isLoadingMore}>
|
||||||
<BeatLoader size={8} color="var(--color-text-2)" />
|
<BeatLoader size={8} color="var(--color-text-2)" />
|
||||||
</LoaderContainer>
|
</LoaderContainer>
|
||||||
{Object.entries(getGroupedMessages(displayMessages)).map(([key, groupMessages]) => (
|
{Object.entries(getGroupedMessages(displayMessages)).map(([key, groupMessages]) => (
|
||||||
|
|||||||
@ -18,18 +18,18 @@ import {
|
|||||||
} from '@renderer/services/MessagesService'
|
} from '@renderer/services/MessagesService'
|
||||||
import { Assistant, FileTypes, MCPToolResponse, Message, Model, Provider, Suggestion } from '@renderer/types'
|
import { Assistant, FileTypes, MCPToolResponse, Message, Model, Provider, Suggestion } from '@renderer/types'
|
||||||
import { removeSpecialCharactersForTopicName } from '@renderer/utils'
|
import { removeSpecialCharactersForTopicName } from '@renderer/utils'
|
||||||
import { first, flatten, sum, takeRight } from 'lodash'
|
|
||||||
import OpenAI from 'openai'
|
|
||||||
|
|
||||||
import { CompletionsParams } from '.'
|
|
||||||
import BaseProvider from './BaseProvider'
|
|
||||||
import {
|
import {
|
||||||
anthropicToolUseToMcpTool,
|
anthropicToolUseToMcpTool,
|
||||||
callMCPTool,
|
callMCPTool,
|
||||||
filterMCPTools,
|
filterMCPTools,
|
||||||
mcpToolsToAnthropicTools,
|
mcpToolsToAnthropicTools,
|
||||||
upsertMCPToolResponse
|
upsertMCPToolResponse
|
||||||
} from './mcpToolUtils'
|
} from '@renderer/utils/mcp-tools'
|
||||||
|
import { first, flatten, isEmpty, sum, takeRight } from 'lodash'
|
||||||
|
import OpenAI from 'openai'
|
||||||
|
|
||||||
|
import { CompletionsParams } from '.'
|
||||||
|
import BaseProvider from './BaseProvider'
|
||||||
|
|
||||||
type ReasoningEffort = 'high' | 'medium' | 'low'
|
type ReasoningEffort = 'high' | 'medium' | 'low'
|
||||||
|
|
||||||
@ -159,7 +159,7 @@ export default class AnthropicProvider extends BaseProvider {
|
|||||||
const body: MessageCreateParamsNonStreaming = {
|
const body: MessageCreateParamsNonStreaming = {
|
||||||
model: model.id,
|
model: model.id,
|
||||||
messages: userMessages,
|
messages: userMessages,
|
||||||
tools: tools,
|
tools: isEmpty(tools) ? undefined : tools,
|
||||||
max_tokens: maxTokens || DEFAULT_MAX_TOKENS,
|
max_tokens: maxTokens || DEFAULT_MAX_TOKENS,
|
||||||
temperature: this.getTemperature(assistant, model),
|
temperature: this.getTemperature(assistant, model),
|
||||||
top_p: this.getTopP(assistant, model),
|
top_p: this.getTopP(assistant, model),
|
||||||
|
|||||||
@ -21,19 +21,19 @@ import { EVENT_NAMES } from '@renderer/services/EventService'
|
|||||||
import { filterContextMessages, filterUserRoleStartMessages } from '@renderer/services/MessagesService'
|
import { filterContextMessages, filterUserRoleStartMessages } from '@renderer/services/MessagesService'
|
||||||
import { Assistant, FileType, FileTypes, MCPToolResponse, Message, Model, Provider, Suggestion } from '@renderer/types'
|
import { Assistant, FileType, FileTypes, MCPToolResponse, Message, Model, Provider, Suggestion } from '@renderer/types'
|
||||||
import { removeSpecialCharactersForTopicName } from '@renderer/utils'
|
import { removeSpecialCharactersForTopicName } from '@renderer/utils'
|
||||||
import axios from 'axios'
|
|
||||||
import { isEmpty, takeRight } from 'lodash'
|
|
||||||
import OpenAI from 'openai'
|
|
||||||
|
|
||||||
import { CompletionsParams } from '.'
|
|
||||||
import BaseProvider from './BaseProvider'
|
|
||||||
import {
|
import {
|
||||||
callMCPTool,
|
callMCPTool,
|
||||||
filterMCPTools,
|
filterMCPTools,
|
||||||
geminiFunctionCallToMcpTool,
|
geminiFunctionCallToMcpTool,
|
||||||
mcpToolsToGeminiTools,
|
mcpToolsToGeminiTools,
|
||||||
upsertMCPToolResponse
|
upsertMCPToolResponse
|
||||||
} from './mcpToolUtils'
|
} from '@renderer/utils/mcp-tools'
|
||||||
|
import axios from 'axios'
|
||||||
|
import { isEmpty, takeRight } from 'lodash'
|
||||||
|
import OpenAI from 'openai'
|
||||||
|
|
||||||
|
import { CompletionsParams } from '.'
|
||||||
|
import BaseProvider from './BaseProvider'
|
||||||
|
|
||||||
export default class GeminiProvider extends BaseProvider {
|
export default class GeminiProvider extends BaseProvider {
|
||||||
private sdk: GoogleGenerativeAI
|
private sdk: GoogleGenerativeAI
|
||||||
|
|||||||
@ -10,7 +10,11 @@ import { getStoreSetting } from '@renderer/hooks/useSettings'
|
|||||||
import i18n from '@renderer/i18n'
|
import i18n from '@renderer/i18n'
|
||||||
import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/AssistantService'
|
import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/AssistantService'
|
||||||
import { EVENT_NAMES } from '@renderer/services/EventService'
|
import { EVENT_NAMES } from '@renderer/services/EventService'
|
||||||
import { filterContextMessages, filterUserRoleStartMessages } from '@renderer/services/MessagesService'
|
import {
|
||||||
|
filterContextMessages,
|
||||||
|
filterEmptyMessages,
|
||||||
|
filterUserRoleStartMessages
|
||||||
|
} from '@renderer/services/MessagesService'
|
||||||
import {
|
import {
|
||||||
Assistant,
|
Assistant,
|
||||||
FileTypes,
|
FileTypes,
|
||||||
@ -22,6 +26,13 @@ import {
|
|||||||
Suggestion
|
Suggestion
|
||||||
} from '@renderer/types'
|
} from '@renderer/types'
|
||||||
import { removeSpecialCharactersForTopicName } from '@renderer/utils'
|
import { removeSpecialCharactersForTopicName } from '@renderer/utils'
|
||||||
|
import {
|
||||||
|
callMCPTool,
|
||||||
|
filterMCPTools,
|
||||||
|
mcpToolsToOpenAITools,
|
||||||
|
openAIToolsToMcpTool,
|
||||||
|
upsertMCPToolResponse
|
||||||
|
} from '@renderer/utils/mcp-tools'
|
||||||
import { takeRight } from 'lodash'
|
import { takeRight } from 'lodash'
|
||||||
import OpenAI, { AzureOpenAI } from 'openai'
|
import OpenAI, { AzureOpenAI } from 'openai'
|
||||||
import {
|
import {
|
||||||
@ -35,13 +46,6 @@ import {
|
|||||||
|
|
||||||
import { CompletionsParams } from '.'
|
import { CompletionsParams } from '.'
|
||||||
import BaseProvider from './BaseProvider'
|
import BaseProvider from './BaseProvider'
|
||||||
import {
|
|
||||||
callMCPTool,
|
|
||||||
filterMCPTools,
|
|
||||||
mcpToolsToOpenAITools,
|
|
||||||
openAIToolsToMcpTool,
|
|
||||||
upsertMCPToolResponse
|
|
||||||
} from './mcpToolUtils'
|
|
||||||
|
|
||||||
type ReasoningEffort = 'high' | 'medium' | 'low'
|
type ReasoningEffort = 'high' | 'medium' | 'low'
|
||||||
|
|
||||||
@ -248,7 +252,10 @@ export default class OpenAIProvider extends BaseProvider {
|
|||||||
|
|
||||||
const userMessages: ChatCompletionMessageParam[] = []
|
const userMessages: ChatCompletionMessageParam[] = []
|
||||||
|
|
||||||
const _messages = filterUserRoleStartMessages(filterContextMessages(takeRight(messages, contextCount + 1)))
|
const _messages = filterUserRoleStartMessages(
|
||||||
|
filterContextMessages(filterEmptyMessages(takeRight(messages, contextCount + 1)))
|
||||||
|
)
|
||||||
|
|
||||||
onFilterMessages(_messages)
|
onFilterMessages(_messages)
|
||||||
|
|
||||||
for (const message of _messages) {
|
for (const message of _messages) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user