support config filename in meta for create_blob_message (#15605)

Co-authored-by: StoneFancyX <kindbin@qq.com>
Co-authored-by: crazywoola <427733928@qq.com>
This commit is contained in:
StoneFancyX 2025-03-18 13:59:00 +08:00 committed by GitHub
parent cefec44070
commit 2524f16525
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 3 deletions

View File

@ -63,11 +63,18 @@ class ToolFileManager:
conversation_id: Optional[str], conversation_id: Optional[str],
file_binary: bytes, file_binary: bytes,
mimetype: str, mimetype: str,
filename: Optional[str] = None,
) -> ToolFile: ) -> ToolFile:
extension = guess_extension(mimetype) or ".bin" extension = guess_extension(mimetype) or ".bin"
unique_name = uuid4().hex unique_name = uuid4().hex
filename = f"{unique_name}{extension}" unique_filename = f"{unique_name}{extension}"
filepath = f"tools/{tenant_id}/{filename}" # default just as before
present_filename = unique_filename
if filename is not None:
has_extension = len(filename.split(".")) > 1
# Add extension flexibly
present_filename = filename if has_extension else f"{filename}{extension}"
filepath = f"tools/{tenant_id}/{unique_filename}"
storage.save(filepath, file_binary) storage.save(filepath, file_binary)
tool_file = ToolFile( tool_file = ToolFile(
@ -76,7 +83,7 @@ class ToolFileManager:
conversation_id=conversation_id, conversation_id=conversation_id,
file_key=filepath, file_key=filepath,
mimetype=mimetype, mimetype=mimetype,
name=filename, name=present_filename,
size=len(file_binary), size=len(file_binary),
) )

View File

@ -59,6 +59,8 @@ class ToolFileMessageTransformer:
meta = message.meta or {} meta = message.meta or {}
mimetype = meta.get("mime_type", "application/octet-stream") mimetype = meta.get("mime_type", "application/octet-stream")
# get filename from meta
filename = meta.get("file_name", None)
# if message is str, encode it to bytes # if message is str, encode it to bytes
if not isinstance(message.message, ToolInvokeMessage.BlobMessage): if not isinstance(message.message, ToolInvokeMessage.BlobMessage):
@ -72,6 +74,7 @@ class ToolFileMessageTransformer:
conversation_id=conversation_id, conversation_id=conversation_id,
file_binary=message.message.blob, file_binary=message.message.blob,
mimetype=mimetype, mimetype=mimetype,
filename=filename,
) )
url = cls.get_tool_file_url(tool_file_id=file.id, extension=guess_extension(file.mimetype)) url = cls.get_tool_file_url(tool_file_id=file.id, extension=guess_extension(file.mimetype))