fix(convert): 修复Claude到Gemini工具转换的结构问题
重构工具转换逻辑以匹配Gemini API要求的格式,确保工具名称和描述为字符串类型,并移除input_schema中的$schema字段。当没有有效工具时正确删除tools数组。
This commit is contained in:
parent
7f7fc78072
commit
2930437616
1 changed files with 17 additions and 13 deletions
|
|
@ -1696,20 +1696,24 @@ export function toGeminiRequestFromClaude(claudeRequest) {
|
|||
|
||||
// Handle tools
|
||||
if (Array.isArray(claudeRequest.tools)) {
|
||||
geminiRequest.tools = claudeRequest.tools.map(tool => {
|
||||
// Ensure tool is a valid object and has a name
|
||||
if (!tool || typeof tool !== 'object' || !tool.name) {
|
||||
console.warn("Skipping invalid tool declaration in claudeRequest.tools.");
|
||||
return null; // Return null for invalid tools, filter out later
|
||||
}
|
||||
geminiRequest.tools = [{
|
||||
functionDeclarations: claudeRequest.tools.map(tool => {
|
||||
// Ensure tool is a valid object and has a name
|
||||
if (!tool || typeof tool !== 'object' || !tool.name) {
|
||||
console.warn("Skipping invalid tool declaration in claudeRequest.tools.");
|
||||
return null; // Return null for invalid tools, filter out later
|
||||
}
|
||||
|
||||
const geminiTool = {};
|
||||
geminiTool[tool.name] = tool.input_schema && typeof tool.input_schema === 'object' ? tool.input_schema : {};
|
||||
return geminiTool;
|
||||
}).filter(Boolean); // Filter out any nulls from invalid tool declarations
|
||||
|
||||
// If no valid tools, remove the tools array
|
||||
if (geminiRequest.tools.length === 0) {
|
||||
delete tool.input_schema.$schema;
|
||||
return {
|
||||
name: String(tool.name), // Ensure name is string
|
||||
description: String(tool.description || ''), // Ensure description is string
|
||||
parameters: tool.input_schema && typeof tool.input_schema === 'object' ? tool.input_schema : { type: 'object', properties: {} }
|
||||
};
|
||||
}).filter(Boolean) // Filter out any nulls from invalid tool declarations
|
||||
}];
|
||||
// If no valid functionDeclarations, remove the tools array
|
||||
if (geminiRequest.tools[0].functionDeclarations.length === 0) {
|
||||
delete geminiRequest.tools;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue