diff --git a/api/core/tools/provider/_position.yaml b/api/core/tools/provider/_position.yaml index 7fb762cd74..40c62d710a 100644 --- a/api/core/tools/provider/_position.yaml +++ b/api/core/tools/provider/_position.yaml @@ -13,3 +13,4 @@ - vectorizer - youtube - gaode +- maths diff --git a/api/core/tools/provider/builtin/maths/_assets/icon.svg b/api/core/tools/provider/builtin/maths/_assets/icon.svg new file mode 100644 index 0000000000..f94d115211 --- /dev/null +++ b/api/core/tools/provider/builtin/maths/_assets/icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/api/core/tools/provider/builtin/maths/maths.py b/api/core/tools/provider/builtin/maths/maths.py new file mode 100644 index 0000000000..42c0293408 --- /dev/null +++ b/api/core/tools/provider/builtin/maths/maths.py @@ -0,0 +1,18 @@ +from typing import Any, Dict + +from core.tools.errors import ToolProviderCredentialValidationError +from core.tools.provider.builtin.maths.tools.eval_expression import EvaluateExpressionTool +from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController + + +class MathsProvider(BuiltinToolProviderController): + def _validate_credentials(self, credentials: Dict[str, Any]) -> None: + try: + EvaluateExpressionTool().invoke( + user_id='', + tool_parameters={ + 'expression': '1+(2+3)*4', + }, + ) + except Exception as e: + raise ToolProviderCredentialValidationError(str(e)) diff --git a/api/core/tools/provider/builtin/maths/maths.yaml b/api/core/tools/provider/builtin/maths/maths.yaml new file mode 100644 index 0000000000..5bd892a927 --- /dev/null +++ b/api/core/tools/provider/builtin/maths/maths.yaml @@ -0,0 +1,12 @@ +identity: + author: Bowen Liang + name: maths + label: + en_US: Maths + zh_Hans: 数学工具 + pt_BR: Maths + description: + en_US: A tool for maths. + zh_Hans: 一个用于数学计算的工具。 + pt_BR: A tool for maths. + icon: icon.svg diff --git a/api/core/tools/provider/builtin/maths/tools/eval_expression.py b/api/core/tools/provider/builtin/maths/tools/eval_expression.py new file mode 100644 index 0000000000..b551e5a0c7 --- /dev/null +++ b/api/core/tools/provider/builtin/maths/tools/eval_expression.py @@ -0,0 +1,29 @@ +import logging +from datetime import datetime, timezone +from typing import Any, Dict, List, Union + +from core.tools.entities.tool_entities import ToolInvokeMessage +from core.tools.tool.builtin_tool import BuiltinTool +from pytz import timezone as pytz_timezone +import numexpr as ne + +class EvaluateExpressionTool(BuiltinTool): + def _invoke(self, + user_id: str, + tool_parameters: Dict[str, Any], + ) -> Union[ToolInvokeMessage, List[ToolInvokeMessage]]: + """ + invoke tools + """ + # get expression + expression = tool_parameters.get('expression', '').strip() + if not expression: + return self.create_text_message('Invalid expression') + + try: + result = ne.evaluate(expression) + result_str = str(result) + except Exception as e: + logging.exception(f'Error evaluating expression: {expression}') + return self.create_text_message(f'Invalid expression: {expression}, error: {str(e)}') + return self.create_text_message(f'The result of the expression "{expression}" is {result_str}') \ No newline at end of file diff --git a/api/core/tools/provider/builtin/maths/tools/eval_expression.yaml b/api/core/tools/provider/builtin/maths/tools/eval_expression.yaml new file mode 100644 index 0000000000..c936a4293f --- /dev/null +++ b/api/core/tools/provider/builtin/maths/tools/eval_expression.yaml @@ -0,0 +1,26 @@ +identity: + name: eval_expression + author: Bowen Liang + label: + en_US: Evaluate Math Expression + zh_Hans: 计算数学表达式 + pt_BR: Evaluate Math Expression +description: + human: + en_US: A tool for evaluating an math expression, calculated locally with NumExpr. + zh_Hans: 一个用于计算数学表达式的工具,表达式将通过NumExpr本地执行。 + pt_BR: A tool for evaluating an math expression, calculated locally with NumExpr. + llm: A tool for evaluating an math expression. +parameters: + - name: expression + type: string + required: true + label: + en_US: Math Expression + zh_Hans: 数学计算表达式 + pt_BR: Math Expression + human_description: + en_US: Math Expression + zh_Hans: 数学计算表达式 + pt_BR: Math Expression + form: llm diff --git a/api/requirements.txt b/api/requirements.txt index a4757ed0fe..67f30949e7 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -64,4 +64,5 @@ httpx[socks]~=0.24.1 matplotlib~=3.8.2 yfinance~=0.2.35 pydub~=0.25.1 -gmpy2~=2.1.5 \ No newline at end of file +gmpy2~=2.1.5 +numexpr~=2.9.0 \ No newline at end of file