feat: introduce /admin API for stack administration and operations (#4401)

# What does this PR do?

- Add new /admin API (v1alpha) for administrative operations including
provider management, health checks, version info, and route listing
- Implement using FastAPI routers following batches pattern with proper
request/response models
- Endpoints: /admin/providers, /admin/providers/{id},
/admin/inspect/routes, /admin/health, /admin/version
- Create admin module structure: models.py, api.py, fastapi_routes.py,
init.py
- Add AdminImpl in llama_stack/core combining provider and inspect
functionality
- Deprecate standalone /providers and /inspect APIs (remain functional
for backward compatibility)
- Consolidate duplicate types: ProviderInfo, HealthInfo, RouteInfo, etc.
now defined once in admin.models

## Test Plan

new admin integration suite, uses generated stainless SDK, and records
new tests on this PR.

Signed-off-by: Charlie Doern <cdoern@redhat.com>
This commit is contained in:
Charlie Doern 2025-12-22 12:11:49 -05:00 committed by GitHub
parent d684ec91cc
commit 258c52c84c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 3306 additions and 2078 deletions

View file

@ -6,38 +6,19 @@
"""Pydantic models for Providers API requests and responses.
This module defines the request and response models for the Providers API
using Pydantic with Field descriptions for OpenAPI schema generation.
This module re-exports models from llama_stack_api.admin.models to ensure
a single source of truth and avoid type conflicts.
"""
from typing import Any
# Import and re-export shared models from admin
from llama_stack_api.admin.models import (
InspectProviderRequest,
ListProvidersResponse,
ProviderInfo,
)
from pydantic import BaseModel, Field
from llama_stack_api.datatypes import HealthResponse
from llama_stack_api.schema_utils import json_schema_type
@json_schema_type
class ProviderInfo(BaseModel):
"""Information about a registered provider including its configuration and health status."""
api: str = Field(..., description="The API name this provider implements")
provider_id: str = Field(..., description="Unique identifier for the provider")
provider_type: str = Field(..., description="The type of provider implementation")
config: dict[str, Any] = Field(..., description="Configuration parameters for the provider")
health: HealthResponse = Field(..., description="Current health status of the provider")
@json_schema_type
class ListProvidersResponse(BaseModel):
"""Response containing a list of all available providers."""
data: list[ProviderInfo] = Field(..., description="List of provider information objects")
@json_schema_type
class InspectProviderRequest(BaseModel):
"""Request model for inspecting a provider by ID."""
provider_id: str = Field(..., description="The ID of the provider to inspect.")
__all__ = [
"ProviderInfo",
"ListProvidersResponse",
"InspectProviderRequest",
]