Skip to content

pixano.app.routers.inference.models

ModelInfoResponse(**data)

Bases: BaseModel

Response model for model info.

Source code in .venv/lib/python3.12/site-packages/pydantic/main.py
def __init__(self, /, **data: Any) -> None:
    """Create a new model by parsing and validating input data from keyword arguments.

    Raises [`ValidationError`][pydantic_core.ValidationError] if the input data cannot be
    validated to form a valid model.

    `self` is explicitly positional-only to allow `self` as a field name.
    """
    # `__tracebackhide__` tells pytest and some other tools to omit this function from tracebacks
    __tracebackhide__ = True
    validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
    if self is not validated_self:
        warnings.warn(
            'A custom validator is returning a value other than `self`.\n'
            "Returning anything other than `self` from a top level model validator isn't supported when validating via `__init__`.\n"
            'See the `model_validator` docs (https://docs.pydantic.dev/latest/concepts/validators/#model-validators) for more details.',
            stacklevel=2,
        )

ModelInfoWithProvider(**data)

Bases: BaseModel

Response model for model info with provider name.

Source code in .venv/lib/python3.12/site-packages/pydantic/main.py
def __init__(self, /, **data: Any) -> None:
    """Create a new model by parsing and validating input data from keyword arguments.

    Raises [`ValidationError`][pydantic_core.ValidationError] if the input data cannot be
    validated to form a valid model.

    `self` is explicitly positional-only to allow `self` as a field name.
    """
    # `__tracebackhide__` tells pytest and some other tools to omit this function from tracebacks
    __tracebackhide__ = True
    validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
    if self is not validated_self:
        warnings.warn(
            'A custom validator is returning a value other than `self`.\n'
            "Returning anything other than `self` from a top level model validator isn't supported when validating via `__init__`.\n"
            'See the `model_validator` docs (https://docs.pydantic.dev/latest/concepts/validators/#model-validators) for more details.',
            stacklevel=2,
        )

ServerInfoResponse(**data)

Bases: BaseModel

Response model for server info.

Source code in .venv/lib/python3.12/site-packages/pydantic/main.py
def __init__(self, /, **data: Any) -> None:
    """Create a new model by parsing and validating input data from keyword arguments.

    Raises [`ValidationError`][pydantic_core.ValidationError] if the input data cannot be
    validated to form a valid model.

    `self` is explicitly positional-only to allow `self` as a field name.
    """
    # `__tracebackhide__` tells pytest and some other tools to omit this function from tracebacks
    __tracebackhide__ = True
    validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
    if self is not validated_self:
        warnings.warn(
            'A custom validator is returning a value other than `self`.\n'
            "Returning anything other than `self` from a top level model validator isn't supported when validating via `__init__`.\n"
            'See the `model_validator` docs (https://docs.pydantic.dev/latest/concepts/validators/#model-validators) for more details.',
            stacklevel=2,
        )

get_server_info(settings, provider_name=None) async

Get server information from the inference provider.

Parameters:

Name Type Description Default
settings Annotated[Settings, Depends(get_settings)]

App settings.

required
provider_name str | None

Optional provider name (uses default if not specified).

None

Returns:

Type Description
ServerInfoResponse

Server information including version, GPU info, models, and readiness.

Source code in pixano/app/routers/inference/models.py
@router.get("/server-info", response_model=ServerInfoResponse)
async def get_server_info(
    settings: Annotated[Settings, Depends(get_settings)],
    provider_name: str | None = None,
) -> ServerInfoResponse:
    """Get server information from the inference provider.

    Args:
        settings: App settings.
        provider_name: Optional provider name (uses default if not specified).

    Returns:
        Server information including version, GPU info, models, and readiness.
    """
    provider = get_provider_from_settings(settings, provider_name)

    try:
        info = await provider.get_server_info()
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"Failed to get server info: {e}")

    return ServerInfoResponse(
        app_name=info.app_name,
        app_version=info.app_version,
        app_description=info.app_description,
        num_cpus=info.num_cpus,
        num_gpus=info.num_gpus,
        num_nodes=info.num_nodes,
        gpus_used=info.gpus_used,
        gpu_to_model=info.gpu_to_model,
        models=info.models,
        models_to_task=info.models_to_task,
    )

list_all_models(settings, task=None) async

List models from all connected providers.

Parameters:

Name Type Description Default
settings Annotated[Settings, Depends(get_settings)]

App settings.

required
task str | None

Optional task to filter models by.

None

Returns:

Type Description
list[ModelInfoWithProvider]

List of available models tagged with their provider name.

Source code in pixano/app/routers/inference/models.py
@router.get("/list-all", response_model=list[ModelInfoWithProvider])
async def list_all_models(
    settings: Annotated[Settings, Depends(get_settings)],
    task: str | None = None,
) -> list[ModelInfoWithProvider]:
    """List models from all connected providers.

    Args:
        settings: App settings.
        task: Optional task to filter models by.

    Returns:
        List of available models tagged with their provider name.
    """
    task_enum = None
    if task is not None:
        try:
            task_enum = InferenceTask(task)
        except ValueError:
            pass

    results: list[ModelInfoWithProvider] = []
    for provider_key, provider in settings.inference_providers.items():
        try:
            models: list[ModelInfo] = await provider.list_models(task=task_enum)
            if task is not None and task_enum is None:
                models = [m for m in models if m.task == task]
            results.extend(
                ModelInfoWithProvider(
                    name=m.name,
                    task=m.task,
                    provider_name=provider_key,
                    model_path=m.model_path,
                    model_class=m.model_class,
                    model_provider=m.provider,
                )
                for m in models
            )
        except Exception:
            # Skip unreachable providers
            continue

    return results

list_models(settings, task=None, provider_name=None) async

List all models from the inference provider.

Parameters:

Name Type Description Default
settings Annotated[Settings, Depends(get_settings)]

App settings.

required
task str | None

Optional task to filter models by.

None
provider_name str | None

Optional provider name (uses default if not specified).

None

Returns:

Type Description
list[ModelInfoResponse]

List of available models.

Source code in pixano/app/routers/inference/models.py
@router.get("/list", response_model=list[ModelInfoResponse])
async def list_models(
    settings: Annotated[Settings, Depends(get_settings)],
    task: str | None = None,
    provider_name: str | None = None,
) -> list[ModelInfoResponse]:
    """List all models from the inference provider.

    Args:
        settings: App settings.
        task: Optional task to filter models by.
        provider_name: Optional provider name (uses default if not specified).

    Returns:
        List of available models.
    """
    provider = get_provider_from_settings(settings, provider_name)

    # Convert task string to InferenceTask enum if provided
    task_enum = None
    if task is not None:
        try:
            task_enum = InferenceTask(task)
        except ValueError:
            # Task might not match enum, try to filter by string
            pass

    models: list[ModelInfo] = await provider.list_models(task=task_enum)

    # If task_enum was None but task string was provided, filter by string
    if task is not None and task_enum is None:
        models = [m for m in models if m.task == task]

    return [
        ModelInfoResponse(
            name=m.name,
            task=m.task,
            model_path=m.model_path,
            model_class=m.model_class,
            provider=m.provider,
        )
        for m in models
    ]