Spaces:
Running
Running
| import base64 | |
| from PIL import Image as PILImage | |
| from pydantic import BaseModel | |
| from langflow.services.deps import get_storage_service | |
| IMAGE_ENDPOINT = "/files/images/" | |
| def is_image_file(file_path) -> bool: | |
| try: | |
| with PILImage.open(file_path) as img: | |
| img.verify() # Verify that it is, in fact, an image | |
| except (OSError, SyntaxError): | |
| return False | |
| return True | |
| def get_file_paths(files: list[str]): | |
| storage_service = get_storage_service() | |
| file_paths = [] | |
| for file in files: | |
| flow_id, file_name = file.split("/") | |
| file_paths.append(storage_service.build_full_path(flow_id=flow_id, file_name=file_name)) | |
| return file_paths | |
| async def get_files( | |
| file_paths: list[str], | |
| *, | |
| convert_to_base64: bool = False, | |
| ): | |
| storage_service = get_storage_service() | |
| file_objects: list[str | bytes] = [] | |
| for file_path in file_paths: | |
| flow_id, file_name = file_path.split("/") | |
| file_object = await storage_service.get_file(flow_id=flow_id, file_name=file_name) | |
| if convert_to_base64: | |
| file_base64 = base64.b64encode(file_object).decode("utf-8") | |
| file_objects.append(file_base64) | |
| else: | |
| file_objects.append(file_object) | |
| return file_objects | |
| class Image(BaseModel): | |
| path: str | None = None | |
| url: str | None = None | |
| def to_base64(self): | |
| if self.path: | |
| files = get_files([self.path], convert_to_base64=True) | |
| return files[0] | |
| msg = "Image path is not set." | |
| raise ValueError(msg) | |
| def to_content_dict(self): | |
| return { | |
| "type": "image_url", | |
| "image_url": self.to_base64(), | |
| } | |
| def get_url(self) -> str: | |
| return f"{IMAGE_ENDPOINT}{self.path}" | |