from __future__ import annotations from pydantic import BaseModel, ConfigDict, Field from app.generation.domain.enums import GenerationModality class GenerationModelCapability(BaseModel): """An explicitly implemented model contract. ``input_schema`` is descriptive only; request validation remains owned by the adapter's typed Pydantic input model. It lets future transports build capability-driven UIs without accepting arbitrary provider payloads. """ model_config = ConfigDict(extra="forbid") id: str = Field(min_length=1, max_length=255) name: str = Field(min_length=1, max_length=255) modality: GenerationModality input_asset_supported: bool = False input_schema: dict[str, object] = Field(default_factory=dict) class GenerationProviderCapabilities(BaseModel): """Public, non-secret provider discovery metadata.""" model_config = ConfigDict(extra="forbid") provider: str = Field(pattern=r"^[a-z][a-z0-9_-]{0,63}$") name: str = Field(min_length=1, max_length=255) models: list[GenerationModelCapability] = Field(default_factory=list) implementation_status: str = Field(default="foundation", max_length=64) supports_cancellation: bool = False supports_status_reconciliation: bool = False