Skip to content

ccproxy.plugins.pricing.models

ccproxy.plugins.pricing.models

Pydantic models for pricing data validation and type safety.

ModelPricing

Bases: BaseModel

Pricing information for a single Claude model.

All costs are in USD per 1 million tokens.

convert_to_decimal classmethod

convert_to_decimal(v)

Convert numeric values to Decimal for precision.

Source code in ccproxy/plugins/pricing/models.py
@field_validator("*", mode="before")
@classmethod
def convert_to_decimal(cls, v: Any) -> Decimal:
    """Convert numeric values to Decimal for precision."""
    if isinstance(v, int | float | str):
        return Decimal(str(v))
    if isinstance(v, Decimal):
        return v
    raise TypeError(f"Cannot convert {type(v)} to Decimal")

serialize_decimal

serialize_decimal(value)

Serialize Decimal fields as float for JSON compatibility.

Source code in ccproxy/plugins/pricing/models.py
@field_serializer("input", "output", "cache_read", "cache_write")
def serialize_decimal(self, value: Decimal) -> float:
    """Serialize Decimal fields as float for JSON compatibility."""
    return float(value)

PricingData

Bases: RootModel[dict[str, ModelPricing]]

Complete pricing data for all Claude models.

This is a wrapper around a dictionary of model name to ModelPricing that provides dict-like access while maintaining type safety.

items

items()

Get model name and pricing pairs.

Source code in ccproxy/plugins/pricing/models.py
def items(self) -> Iterator[tuple[str, ModelPricing]]:
    """Get model name and pricing pairs."""
    return iter(self.root.items())

keys

keys()

Get model names.

Source code in ccproxy/plugins/pricing/models.py
def keys(self) -> Iterator[str]:
    """Get model names."""
    return iter(self.root.keys())

values

values()

Get pricing objects.

Source code in ccproxy/plugins/pricing/models.py
def values(self) -> Iterator[ModelPricing]:
    """Get pricing objects."""
    return iter(self.root.values())

get

get(model_name, default=None)

Get pricing for a model with optional default.

Source code in ccproxy/plugins/pricing/models.py
def get(
    self, model_name: str, default: ModelPricing | None = None
) -> ModelPricing | None:
    """Get pricing for a model with optional default."""
    return self.root.get(model_name, default)

model_names

model_names()

Get list of all model names.

Source code in ccproxy/plugins/pricing/models.py
def model_names(self) -> list[str]:
    """Get list of all model names."""
    return list(self.root.keys())