from importlib import import_module from types import ModuleType from typing import Dict, Any from pydantic import BaseModel as PydanticBaseModel, Field from PIL import Image import io def get_pipeline_class(pipeline_name: str) -> ModuleType: try: module = import_module(f"pipelines.{pipeline_name}") except ModuleNotFoundError: raise ValueError(f"Pipeline {pipeline_name} module not found") pipeline_class = getattr(module, "Pipeline", None) if pipeline_class is None: raise ValueError(f"'Pipeline' class not found in module '{pipeline_name}'.") return pipeline_class def bytes_to_pil(image_bytes: bytes) -> Image.Image: image = Image.open(io.BytesIO(image_bytes)) return image def pil_to_frame(image: Image.Image) -> bytes: frame_data = io.BytesIO() image.save(frame_data, format="JPEG") frame_data = frame_data.getvalue() return ( b"--frame\r\n" + b"Content-Type: image/jpeg\r\n" + f"Content-Length: {len(frame_data)}\r\n\r\n".encode() + frame_data + b"\r\n" ) def is_firefox(user_agent: str) -> bool: return "Firefox" in user_agent