|
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: |
|
|
|
optional_params = optional_params or {} |
|
|
|
|
|
|
|
_steps = optional_params.get("steps", 50) |
|
steps = "max-steps" if _steps > 50 else "50-steps" |
|
|
|
|
|
|
|
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 |
|
|