diff --git a/api/core/tools/provider/builtin/dify_extractor/__init__.py b/api/core/tools/provider/builtin/dify_extractor/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api/core/tools/provider/builtin/dify_extractor/_assets/icon.png b/api/core/tools/provider/builtin/dify_extractor/_assets/icon.png new file mode 100644 index 0000000000..5155a73059 Binary files /dev/null and b/api/core/tools/provider/builtin/dify_extractor/_assets/icon.png differ diff --git a/api/core/tools/provider/builtin/dify_extractor/dalle.py b/api/core/tools/provider/builtin/dify_extractor/dalle.py new file mode 100644 index 0000000000..5bd16e49e8 --- /dev/null +++ b/api/core/tools/provider/builtin/dify_extractor/dalle.py @@ -0,0 +1,20 @@ +from typing import Any + +from core.tools.errors import ToolProviderCredentialValidationError +from core.tools.provider.builtin.dalle.tools.dalle2 import DallE2Tool +from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController + + +class DALLEProvider(BuiltinToolProviderController): + def _validate_credentials(self, credentials: dict[str, Any]) -> None: + try: + DallE2Tool().fork_tool_runtime( + runtime={ + "credentials": credentials, + } + ).invoke( + user_id="", + tool_parameters={"prompt": "cute girl, blue eyes, white hair, anime style", "size": "small", "n": 1}, + ) + except Exception as e: + raise ToolProviderCredentialValidationError(str(e)) diff --git a/api/core/tools/provider/builtin/dify_extractor/dalle.yaml b/api/core/tools/provider/builtin/dify_extractor/dalle.yaml new file mode 100644 index 0000000000..37cf93c28a --- /dev/null +++ b/api/core/tools/provider/builtin/dify_extractor/dalle.yaml @@ -0,0 +1,61 @@ +identity: + author: Dify + name: dalle + label: + en_US: DALL-E + zh_Hans: DALL-E 绘画 + pt_BR: DALL-E + description: + en_US: DALL-E art + zh_Hans: DALL-E 绘画 + pt_BR: DALL-E art + icon: icon.png + tags: + - image + - productivity +credentials_for_provider: + openai_api_key: + type: secret-input + required: true + label: + en_US: OpenAI API key + zh_Hans: OpenAI API key + pt_BR: OpenAI API key + help: + en_US: Please input your OpenAI API key + zh_Hans: 请输入你的 OpenAI API key + pt_BR: Please input your OpenAI API key + placeholder: + en_US: Please input your OpenAI API key + zh_Hans: 请输入你的 OpenAI API key + pt_BR: Please input your OpenAI API key + openai_organization_id: + type: text-input + required: false + label: + en_US: OpenAI organization ID + zh_Hans: OpenAI organization ID + pt_BR: OpenAI organization ID + help: + en_US: Please input your OpenAI organization ID + zh_Hans: 请输入你的 OpenAI organization ID + pt_BR: Please input your OpenAI organization ID + placeholder: + en_US: Please input your OpenAI organization ID + zh_Hans: 请输入你的 OpenAI organization ID + pt_BR: Please input your OpenAI organization ID + openai_base_url: + type: text-input + required: false + label: + en_US: OpenAI base URL + zh_Hans: OpenAI base URL + pt_BR: OpenAI base URL + help: + en_US: Please input your OpenAI base URL + zh_Hans: 请输入你的 OpenAI base URL + pt_BR: Please input your OpenAI base URL + placeholder: + en_US: Please input your OpenAI base URL + zh_Hans: 请输入你的 OpenAI base URL + pt_BR: Please input your OpenAI base URL diff --git a/api/core/tools/provider/builtin/dify_extractor/tools/file_extractor.py b/api/core/tools/provider/builtin/dify_extractor/tools/file_extractor.py new file mode 100644 index 0000000000..c4b77d0aca --- /dev/null +++ b/api/core/tools/provider/builtin/dify_extractor/tools/file_extractor.py @@ -0,0 +1,32 @@ +from base64 import b64decode +from typing import Any, Union + +from openai import OpenAI +from yarl import URL +from core.file.enums import FileType + +from core.file.file_manager import download +from core.tools.entities.tool_entities import ToolInvokeMessage +from core.tools.errors import ToolParameterValidationError +from core.tools.tool.builtin_tool import BuiltinTool + + +class FileExtractorTool(BuiltinTool): + def _invoke( + self, + user_id: str, + tool_parameters: dict[str, Any], + ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]: + """ + invoke tools + """ + # image file for workflow mode + file = tool_parameters.get("file") + if file and file.type != FileType.DOCUMENT: + raise ToolParameterValidationError("Not a valid document") + + if file: + file_binary = download(file) + else: + raise ToolParameterValidationError("Please provide either file") + return result diff --git a/api/core/tools/provider/builtin/dify_extractor/tools/file_extractor.yaml b/api/core/tools/provider/builtin/dify_extractor/tools/file_extractor.yaml new file mode 100644 index 0000000000..15f2273f04 --- /dev/null +++ b/api/core/tools/provider/builtin/dify_extractor/tools/file_extractor.yaml @@ -0,0 +1,49 @@ +identity: + name: text extractor + author: Jyong + label: + en_US: Text extractor + zh_Hans: Text 文本解析 + description: + en_US: Extract content from text file and support split to chunks by split characters and token length + zh_Hans: 支持从文本文件中提取内容并支持通过分割字符和令牌长度分割成块 + pt_BR: Extract content from text file and support split to chunks by split characters and token length +description: + human: + en_US: Text extractor is a text extract tool + zh_Hans: Text extractor 是一个文本提取工具 + pt_BR: Text extractor is a text extract tool + llm: Text extractor is a tool used to extract text file +parameters: + - name: text_file + type: file + label: + en_US: Text file + human_description: + en_US: The text file to be extracted. + zh_Hans: 要提取的 text 文档。 + llm_description: you should not input this parameter. just input the image_id. + form: llm + - name: separators + type: string + required: false + label: + en_US: split character + zh_Hans: 分隔符号 + human_description: + en_US: Text content split character + zh_Hans: 用于文档分隔的符号 + llm_description: it is used for split content to chunks + form: form + - name: max_token + type: number + required: false + label: + en_US: Maximum chunk length + zh_Hans: 最大分段长度 + human_description: + en_US: Maximum chunk length + zh_Hans: 最大分段长度 + llm_description: it is used for limit chunk's max length + form: form +