| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | import enumfrom typing import Optionalfrom core.file.upload_file_parser import UploadFileParserfrom core.model_runtime.entities.message_entities import ImagePromptMessageContentfrom extensions.ext_database import dbfrom models.model import UploadFilefrom pydantic import BaseModelclass FileType(enum.Enum):    IMAGE = 'image'    @staticmethod    def value_of(value):        for member in FileType:            if member.value == value:                return member        raise ValueError(f"No matching enum found for value '{value}'")class FileTransferMethod(enum.Enum):    REMOTE_URL = 'remote_url'    LOCAL_FILE = 'local_file'    @staticmethod    def value_of(value):        for member in FileTransferMethod:            if member.value == value:                return member        raise ValueError(f"No matching enum found for value '{value}'")class FileObj(BaseModel):    id: Optional[str]    tenant_id: str    type: FileType    transfer_method: FileTransferMethod    url: Optional[str]    upload_file_id: Optional[str]    file_config: dict    @property    def data(self) -> Optional[str]:        return self._get_data()    @property    def preview_url(self) -> Optional[str]:        return self._get_data(force_url=True)    @property    def prompt_message_content(self) -> ImagePromptMessageContent:        if self.type == FileType.IMAGE:            image_config = self.file_config.get('image')            return ImagePromptMessageContent(                data=self.data,                detail=ImagePromptMessageContent.DETAIL.HIGH                if image_config.get("detail") == "high" else ImagePromptMessageContent.DETAIL.LOW            )    def _get_data(self, force_url: bool = False) -> Optional[str]:        if self.type == FileType.IMAGE:            if self.transfer_method == FileTransferMethod.REMOTE_URL:                return self.url            elif self.transfer_method == FileTransferMethod.LOCAL_FILE:                upload_file = (db.session.query(UploadFile)                               .filter(                    UploadFile.id == self.upload_file_id,                    UploadFile.tenant_id == self.tenant_id                ).first())                return UploadFileParser.get_image_data(                    upload_file=upload_file,                    force_url=force_url                )        return None
 |