Co-authored-by: StoneFancyX <kindbin@qq.com> Co-authored-by: crazywoola <427733928@qq.com>tags/1.1.0
| 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}" | |||||
| filepath = f"tools/{tenant_id}/{filename}" | |||||
| unique_filename = f"{unique_name}{extension}" | |||||
| # 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( | ||||
| 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), | ||||
| ) | ) | ||||
| 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): | ||||
| 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)) |