Skip to content

ccproxy.pricing.models

ccproxy.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/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")

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/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/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/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/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/pricing/models.py
def model_names(self) -> list[str]:
    """Get list of all model names."""
    return list(self.root.keys())

to_dict

to_dict()

Convert to legacy dict format for backward compatibility.

Source code in ccproxy/pricing/models.py
def to_dict(self) -> dict[str, dict[str, Decimal]]:
    """Convert to legacy dict format for backward compatibility."""
    return {
        model_name: {
            "input": pricing.input,
            "output": pricing.output,
            "cache_read": pricing.cache_read,
            "cache_write": pricing.cache_write,
        }
        for model_name, pricing in self.root.items()
    }

from_dict classmethod

from_dict(data)

Create PricingData from legacy dict format.

Source code in ccproxy/pricing/models.py
@classmethod
def from_dict(cls, data: dict[str, dict[str, Any]]) -> "PricingData":
    """Create PricingData from legacy dict format."""
    models = {
        model_name: ModelPricing(**pricing_dict)
        for model_name, pricing_dict in data.items()
    }
    return cls(root=models)