fix: support other file types for Tool

This commit is contained in:
Yeuoly 2024-12-04 19:26:01 +08:00
parent 0af9c4fd9d
commit 01efdee1dd
No known key found for this signature in database
GPG Key ID: A66E7E320FB19F61
4 changed files with 12 additions and 3 deletions

View File

@ -157,6 +157,7 @@ class ToolInvokeMessage(BaseModel):
BLOB = "blob" BLOB = "blob"
JSON = "json" JSON = "json"
IMAGE_LINK = "image_link" IMAGE_LINK = "image_link"
BINARY_LINK = "binary_link"
VARIABLE = "variable" VARIABLE = "variable"
FILE = "file" FILE = "file"

View File

@ -85,7 +85,7 @@ class ToolFileMessageTransformer:
) )
else: else:
yield ToolInvokeMessage( yield ToolInvokeMessage(
type=ToolInvokeMessage.MessageType.LINK, type=ToolInvokeMessage.MessageType.BINARY_LINK,
message=ToolInvokeMessage.TextMessage(text=url), message=ToolInvokeMessage.TextMessage(text=url),
meta=message.meta.copy() if message.meta is not None else {}, meta=message.meta.copy() if message.meta is not None else {},
) )

View File

@ -190,7 +190,11 @@ class ToolNode(BaseNode[ToolNodeData]):
variables: dict[str, Any] = {} variables: dict[str, Any] = {}
for message in message_stream: for message in message_stream:
if message.type in {ToolInvokeMessage.MessageType.IMAGE_LINK, ToolInvokeMessage.MessageType.IMAGE}: if message.type in {
ToolInvokeMessage.MessageType.IMAGE_LINK,
ToolInvokeMessage.MessageType.BINARY_LINK,
ToolInvokeMessage.MessageType.IMAGE,
}:
assert isinstance(message.message, ToolInvokeMessage.TextMessage) assert isinstance(message.message, ToolInvokeMessage.TextMessage)
url = message.message.text url = message.message.text
@ -209,7 +213,7 @@ class ToolNode(BaseNode[ToolNodeData]):
mapping = { mapping = {
"tool_file_id": tool_file_id, "tool_file_id": tool_file_id,
"type": FileType.IMAGE, "type": file_factory.get_file_type_by_mime_type(tool_file.mimetype),
"transfer_method": transfer_method, "transfer_method": transfer_method,
"url": url, "url": url,
} }

View File

@ -289,3 +289,7 @@ def _get_file_type_by_mimetype(mime_type: str) -> FileType | None:
else: else:
file_type = FileType.CUSTOM file_type = FileType.CUSTOM
return file_type return file_type
def get_file_type_by_mime_type(mime_type: str) -> FileType:
return _get_file_type_by_mimetype(mime_type) or FileType.CUSTOM