Quellcode durchsuchen

feat: add a builtin tool to support regex extraction. (#7081) (#7087)

zhuhao vor 8 Monaten
Ursprung
Commit
4ffa706e4f

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
api/core/tools/provider/builtin/regex/_assets/icon.svg


+ 19 - 0
api/core/tools/provider/builtin/regex/regex.py

@@ -0,0 +1,19 @@
+from typing import Any
+
+from core.tools.errors import ToolProviderCredentialValidationError
+from core.tools.provider.builtin.regex.tools.regex_extract import RegexExpressionTool
+from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
+
+
+class RegexProvider(BuiltinToolProviderController):
+    def _validate_credentials(self, credentials: dict[str, Any]) -> None:
+        try:
+            RegexExpressionTool().invoke(
+                user_id='',
+                tool_parameters={
+                    'content': '1+(2+3)*4',
+                    'expression': r'(\d+)',
+                },
+            )
+        except Exception as e:
+            raise ToolProviderCredentialValidationError(str(e))

+ 15 - 0
api/core/tools/provider/builtin/regex/regex.yaml

@@ -0,0 +1,15 @@
+identity:
+  author: zhuhao
+  name: regex
+  label:
+    en_US: Regex
+    zh_Hans: 正则表达式提取
+    pt_BR: Regex
+  description:
+    en_US: A tool for regex extraction.
+    zh_Hans: 一个用于正则表达式内容提取的工具。
+    pt_BR: A tool for regex extraction.
+  icon: icon.svg
+  tags:
+    - utilities
+    - productivity

+ 27 - 0
api/core/tools/provider/builtin/regex/tools/regex_extract.py

@@ -0,0 +1,27 @@
+import re
+from typing import Any, Union
+
+from core.tools.entities.tool_entities import ToolInvokeMessage
+from core.tools.tool.builtin_tool import BuiltinTool
+
+
+class RegexExpressionTool(BuiltinTool):
+    def _invoke(self,
+                user_id: str,
+               tool_parameters: dict[str, Any],
+        ) ->  Union[ToolInvokeMessage, list[ToolInvokeMessage]]:
+        """
+            invoke tools
+        """
+        # get expression
+        content = tool_parameters.get('content', '').strip()
+        if not content:
+            return self.create_text_message('Invalid content')
+        expression = tool_parameters.get('expression', '').strip()
+        if not expression:
+            return self.create_text_message('Invalid expression')
+        try:
+            result = re.findall(expression, content)
+            return self.create_text_message(str(result))
+        except Exception as e:
+            return self.create_text_message(f'Failed to extract result, error: {str(e)}')

+ 38 - 0
api/core/tools/provider/builtin/regex/tools/regex_extract.yaml

@@ -0,0 +1,38 @@
+identity:
+  name: regex_extract
+  author: zhuhao
+  label:
+    en_US: Regex Extract
+    zh_Hans: 正则表达式内容提取
+    pt_BR: Regex Extract
+description:
+  human:
+    en_US: A tool for extracting matching content using regular expressions.
+    zh_Hans: 一个用于利用正则表达式提取匹配内容结果的工具。
+    pt_BR: A tool for extracting matching content using regular expressions.
+  llm: A tool for extracting matching content using regular expressions.
+parameters:
+  - name: content
+    type: string
+    required: true
+    label:
+      en_US: Content to be extracted
+      zh_Hans: 内容
+      pt_BR: Content to be extracted
+    human_description:
+      en_US: Content to be extracted
+      zh_Hans: 内容
+      pt_BR: Content to be extracted
+    form: llm
+  - name: expression
+    type: string
+    required: true
+    label:
+      en_US: Regular expression
+      zh_Hans: 正则表达式
+      pt_BR: Regular expression
+    human_description:
+      en_US: Regular expression
+      zh_Hans: 正则表达式
+      pt_BR: Regular expression
+    form: llm

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.