Tai Truong
fix readme
d202ada
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}"