Skip to content

models

Model definitions for AI providers and their models.

This module provides a standardized way to represent and work with AI models from different providers. It includes utilities for parsing model names, validating them, and accessing available models.

Classes:

Name Description
InvalidFullModelNameError

Raised when a full model name doesn't follow the 'provider:name' format.

MissingAPIKeyError

Raised when a model has no API key environment variable.

MissingContextWindowSizeError

Raised when a model has no context window size.

Model

Represents an AI model with its provider and name.

Attributes:

Name Type Description
AVAILABLE_MODELS

Frozen set of all available and valid AI models.

AVAILABLE_MODEL_FULL_NAMES

Frozen set of all available and valid AI model full names.

AVAILABLE_MODELS module-attribute πŸ”—

AVAILABLE_MODELS = frozenset(_iter_available_models())

Frozen set of all available and valid AI models.

AVAILABLE_MODEL_FULL_NAMES module-attribute πŸ”—

AVAILABLE_MODEL_FULL_NAMES = frozenset(full_name for model in AVAILABLE_MODELS)

Frozen set of all available and valid AI model full names.

InvalidFullModelNameError πŸ”—

Bases: ValueError

Raised when a full model name doesn't follow the 'provider:name' format.

Source code in src/brag/models.py
class InvalidFullModelNameError(ValueError):
    """Raised when a full model name doesn't follow the 'provider:name' format."""

    def __init__(self, full_name: str) -> None:
        super().__init__(f"Invalid model name: {full_name}")

MissingAPIKeyError πŸ”—

Bases: ValueError

Raised when a model has no API key environment variable.

Source code in src/brag/models.py
class MissingAPIKeyError(ValueError):
    """Raised when a model has no API key environment variable."""

    def __init__(self, provider: ProviderName) -> None:
        super().__init__(f"Model {provider} has no API key environment variable.")

MissingContextWindowSizeError πŸ”—

Bases: ValueError

Raised when a model has no context window size.

Source code in src/brag/models.py
class MissingContextWindowSizeError(ValueError):
    """Raised when a model has no context window size."""

    def __init__(self, model_name: str) -> None:
        super().__init__(f"Model {model_name} has no known context window size.")

Model πŸ”—

Bases: BaseModel

Represents an AI model with its provider and name.

Models are immutable and identified by a combination of provider and name.

Methods:

Name Description
from_full_name

Parse a full model name in 'provider:name' format into a Model instance.

Source code in src/brag/models.py
class Model(BaseModel):
    """Represents an AI model with its provider and name.

    Models are immutable and identified by a combination of provider and name.
    """

    model_config = ConfigDict(frozen=True)

    full_name: AvailableModelFullName
    provider: ProviderName
    name: ModelName
    api_key_env_var: str
    context_window_size: TokenCount

    @classmethod
    def from_full_name(cls, full_name: AvailableModelFullName) -> Self:
        """Parse a full model name in 'provider:name' format into a Model instance."""
        try:
            provider, name = full_name.split(":")
        except ValueError as e:
            raise InvalidFullModelNameError(full_name) from e

        try:
            context_window_size = CONTEXT_WINDOW_SIZES[full_name]
        except KeyError as e:
            raise MissingContextWindowSizeError(full_name) from e

        try:
            api_key_env_var = REQUIRED_API_KEY_ENV_VARS[provider]
        except KeyError as e:
            raise MissingAPIKeyError(provider) from e

        return cls(
            full_name=full_name,
            provider=provider,
            name=name,
            api_key_env_var=api_key_env_var,
            context_window_size=context_window_size,
        )

from_full_name classmethod πŸ”—

from_full_name(full_name: AvailableModelFullName) -> Self

Parse a full model name in 'provider:name' format into a Model instance.

Source code in src/brag/models.py
@classmethod
def from_full_name(cls, full_name: AvailableModelFullName) -> Self:
    """Parse a full model name in 'provider:name' format into a Model instance."""
    try:
        provider, name = full_name.split(":")
    except ValueError as e:
        raise InvalidFullModelNameError(full_name) from e

    try:
        context_window_size = CONTEXT_WINDOW_SIZES[full_name]
    except KeyError as e:
        raise MissingContextWindowSizeError(full_name) from e

    try:
        api_key_env_var = REQUIRED_API_KEY_ENV_VARS[provider]
    except KeyError as e:
        raise MissingAPIKeyError(provider) from e

    return cls(
        full_name=full_name,
        provider=provider,
        name=name,
        api_key_env_var=api_key_env_var,
        context_window_size=context_window_size,
    )