Spaces:
Paused
Paused
| import types | |
| from typing import List, Optional | |
| from openai.types.image import Image | |
| from litellm.types.llms.bedrock import ( | |
| AmazonStability3TextToImageRequest, | |
| AmazonStability3TextToImageResponse, | |
| ) | |
| from litellm.types.utils import ImageResponse | |
| class AmazonStability3Config: | |
| """ | |
| Reference: https://us-west-2.console.aws.amazon.com/bedrock/home?region=us-west-2#/providers?model=stability.stable-diffusion-xl-v0 | |
| Stability API Ref: https://platform.stability.ai/docs/api-reference#tag/Generate/paths/~1v2beta~1stable-image~1generate~1sd3/post | |
| """ | |
| def get_config(cls): | |
| return { | |
| k: v | |
| for k, v in cls.__dict__.items() | |
| if not k.startswith("__") | |
| and not isinstance( | |
| v, | |
| ( | |
| types.FunctionType, | |
| types.BuiltinFunctionType, | |
| classmethod, | |
| staticmethod, | |
| ), | |
| ) | |
| and v is not None | |
| } | |
| def get_supported_openai_params(cls, model: Optional[str] = None) -> List: | |
| """ | |
| No additional OpenAI params are mapped for stability 3 | |
| """ | |
| return [] | |
| def _is_stability_3_model(cls, model: Optional[str] = None) -> bool: | |
| """ | |
| Returns True if the model is a Stability 3 model | |
| Stability 3 models follow this pattern: | |
| sd3-large | |
| sd3-large-turbo | |
| sd3-medium | |
| sd3.5-large | |
| sd3.5-large-turbo | |
| Stability ultra models | |
| stable-image-ultra-v1 | |
| """ | |
| if model: | |
| if "sd3" in model or "sd3.5" in model: | |
| return True | |
| if "stable-image" in model: | |
| return True | |
| return False | |
| def transform_request_body( | |
| cls, prompt: str, optional_params: dict | |
| ) -> AmazonStability3TextToImageRequest: | |
| """ | |
| Transform the request body for the Stability 3 models | |
| """ | |
| data = AmazonStability3TextToImageRequest(prompt=prompt, **optional_params) | |
| return data | |
| def map_openai_params(cls, non_default_params: dict, optional_params: dict) -> dict: | |
| """ | |
| Map the OpenAI params to the Bedrock params | |
| No OpenAI params are mapped for Stability 3, so directly return the optional_params | |
| """ | |
| return optional_params | |
| def transform_response_dict_to_openai_response( | |
| cls, model_response: ImageResponse, response_dict: dict | |
| ) -> ImageResponse: | |
| """ | |
| Transform the response dict to the OpenAI response | |
| """ | |
| stability_3_response = AmazonStability3TextToImageResponse(**response_dict) | |
| openai_images: List[Image] = [] | |
| for _img in stability_3_response.get("images", []): | |
| openai_images.append(Image(b64_json=_img)) | |
| model_response.data = openai_images | |
| return model_response | |