diff --git a/api/core/tools/tool_engine.py b/api/core/tools/tool_engine.py index 3caacb8706..16fe15d5ae 100644 --- a/api/core/tools/tool_engine.py +++ b/api/core/tools/tool_engine.py @@ -283,7 +283,11 @@ class ToolEngine: Extract tool response binary """ for response in tool_response: - if response.type in {ToolInvokeMessage.MessageType.IMAGE_LINK, ToolInvokeMessage.MessageType.IMAGE}: + if response.type in { + ToolInvokeMessage.MessageType.IMAGE_LINK, + ToolInvokeMessage.MessageType.IMAGE, + ToolInvokeMessage.MessageType.BINARY_LINK, + }: mimetype = None if not response.meta: raise ValueError("missing meta data") @@ -298,7 +302,11 @@ class ToolEngine: mimetype = guess_type_result if not mimetype: - mimetype = "image/jpeg" + mimetype = ( + "image/jpeg" + if response.type != ToolInvokeMessage.MessageType.BINARY_LINK + else "application/octet-stream" + ) yield ToolInvokeMessageBinary( mimetype=response.meta.get("mime_type", mimetype), diff --git a/api/core/tools/utils/message_transformer.py b/api/core/tools/utils/message_transformer.py index 4c6e647335..f2e4f0ea5f 100644 --- a/api/core/tools/utils/message_transformer.py +++ b/api/core/tools/utils/message_transformer.py @@ -172,6 +172,8 @@ class ToolFileMessageTransformer: meta=tool_file_meta, ) else: + if file.mime_type and "mime_type" not in tool_file_meta: + tool_file_meta["mime_type"] = file.mime_type yield ToolInvokeMessage( type=ToolInvokeMessage.MessageType.LINK, message=ToolInvokeMessage.TextMessage(text=url),