fix(toolUsePlugin): handle empty tools case in prompt generation (#10111)

Return null when no tools are available and skip tool section in system prompt
This commit is contained in:
Phantom 2025-09-11 21:21:55 +08:00 committed by GitHub
parent 871565c687
commit 5e19e7ac6c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -156,8 +156,10 @@ Assistant: The population of Shanghai is 26 million, while Guangzhou has a popul
/** /**
* Cherry Studio * Cherry Studio
*/ */
function buildAvailableTools(tools: ToolSet): string { function buildAvailableTools(tools: ToolSet): string | null {
const availableTools = Object.keys(tools) const availableTools = Object.keys(tools)
if (availableTools.length === 0) return null
const result = availableTools
.map((toolName: string) => { .map((toolName: string) => {
const tool = tools[toolName] const tool = tools[toolName]
return ` return `
@ -172,7 +174,7 @@ function buildAvailableTools(tools: ToolSet): string {
}) })
.join('\n') .join('\n')
return `<tools> return `<tools>
${availableTools} ${result}
</tools>` </tools>`
} }
@ -181,6 +183,7 @@ ${availableTools}
*/ */
function defaultBuildSystemPrompt(userSystemPrompt: string, tools: ToolSet): string { function defaultBuildSystemPrompt(userSystemPrompt: string, tools: ToolSet): string {
const availableTools = buildAvailableTools(tools) const availableTools = buildAvailableTools(tools)
if (availableTools === null) return userSystemPrompt
const fullPrompt = DEFAULT_SYSTEM_PROMPT.replace('{{ TOOL_USE_EXAMPLES }}', DEFAULT_TOOL_USE_EXAMPLES) const fullPrompt = DEFAULT_SYSTEM_PROMPT.replace('{{ TOOL_USE_EXAMPLES }}', DEFAULT_TOOL_USE_EXAMPLES)
.replace('{{ AVAILABLE_TOOLS }}', availableTools) .replace('{{ AVAILABLE_TOOLS }}', availableTools)