From c159260717acb5f98c7ed3add259b5fe3db9c3d5 Mon Sep 17 00:00:00 2001 From: lidanyang Date: Fri, 24 Nov 2023 18:56:15 +0800 Subject: [PATCH] check_param_consistency --- metagpt/tools/functions/register/register.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/metagpt/tools/functions/register/register.py b/metagpt/tools/functions/register/register.py index 120c7c4a2..0731e31c0 100644 --- a/metagpt/tools/functions/register/register.py +++ b/metagpt/tools/functions/register/register.py @@ -4,6 +4,7 @@ # @Author : lidanyang # @File : register.py # @Desc : +import inspect from typing import Type, Optional, Callable, Dict, Union, List from metagpt.tools.functions.schemas.base import ToolSchema @@ -13,16 +14,28 @@ class FunctionRegistry: def __init__(self): self.functions: Dict[str, Dict[str, Dict]] = {} - def register(self, module: str, tool_schema: Type[ToolSchema]) -> Callable: + @staticmethod + def _check_param_consistency(func_params, schema): + param_names = set(func_params.keys()) + schema_names = set(schema["parameters"]["properties"].keys()) + if param_names != schema_names: + raise ValueError("Function parameters do not match schema properties") + + def register(self, module: str, tool_schema: Type[ToolSchema]) -> Callable: def wrapper(func: Callable) -> Callable: module_registry = self.functions.setdefault(module, {}) if func.__name__ in module_registry: raise ValueError(f"Function {func.__name__} is already registered in {module}") + func_params = inspect.signature(func).parameters + schema = tool_schema.schema() schema["name"] = func.__name__ + + self._check_param_consistency(func_params, schema) + module_registry[func.__name__] = { "func": func, "schema": schema,