from typing import Optional import litellm from litellm.types.utils import ImageResponse def cost_calculator( model: str, image_response: ImageResponse, size: Optional[str] = None, optional_params: Optional[dict] = None, ) -> float: """ Bedrock image generation cost calculator Handles both Stability 1 and Stability 3 models """ if litellm.AmazonStability3Config()._is_stability_3_model(model=model): pass else: # Stability 1 models optional_params = optional_params or {} # see model_prices_and_context_window.json for details on how steps is used # Reference pricing by steps for stability 1: https://aws.amazon.com/bedrock/pricing/ _steps = optional_params.get("steps", 50) steps = "max-steps" if _steps > 50 else "50-steps" # size is stored in model_prices_and_context_window.json as 1024-x-1024 # current size has 1024x1024 size = size or "1024-x-1024" model = f"{size}/{steps}/{model}" _model_info = litellm.get_model_info( model=model, custom_llm_provider="bedrock", ) output_cost_per_image: float = _model_info.get("output_cost_per_image") or 0.0 num_images: int = len(image_response.data) return output_cost_per_image * num_images