From 12adcf8925b5f0fee37c6443a54f4a24fc2551e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=9E=E6=B3=95=E6=93=8D=E4=BD=9C?= Date: Tue, 29 Oct 2024 16:09:29 +0800 Subject: [PATCH] fix: gemini model use some tools raise error (#9993) --- .../model_providers/google/llm/llm.py | 45 +++++++++++-------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/api/core/model_runtime/model_providers/google/llm/llm.py b/api/core/model_runtime/model_providers/google/llm/llm.py index e686ad08d9..b1b07a611b 100644 --- a/api/core/model_runtime/model_providers/google/llm/llm.py +++ b/api/core/model_runtime/model_providers/google/llm/llm.py @@ -116,26 +116,33 @@ class GoogleLargeLanguageModel(LargeLanguageModel): :param tools: tool messages :return: glm tools """ - return glm.Tool( - function_declarations=[ - glm.FunctionDeclaration( - name=tool.name, - parameters=glm.Schema( - type=glm.Type.OBJECT, - properties={ - key: { - "type_": value.get("type", "string").upper(), - "description": value.get("description", ""), - "enum": value.get("enum", []), - } - for key, value in tool.parameters.get("properties", {}).items() - }, - required=tool.parameters.get("required", []), - ), + function_declarations = [] + for tool in tools: + properties = {} + for key, value in tool.parameters.get("properties", {}).items(): + properties[key] = { + "type_": glm.Type.STRING, + "description": value.get("description", ""), + "enum": value.get("enum", []), + } + + if properties: + parameters = glm.Schema( + type=glm.Type.OBJECT, + properties=properties, + required=tool.parameters.get("required", []), ) - for tool in tools - ] - ) + else: + parameters = None + + function_declaration = glm.FunctionDeclaration( + name=tool.name, + parameters=parameters, + description=tool.description, + ) + function_declarations.append(function_declaration) + + return glm.Tool(function_declarations=function_declarations) def validate_credentials(self, model: str, credentials: dict) -> None: """