Files
letta-server/letta/schemas/provider_model.py
Kian Jones 25d54dd896 chore: enable F821, F401, W293 (#9503)
* auto fixes

* auto fix pt2 and transitive deps and undefined var checking locals()

* manual fixes (ignored or letta-code fixed)

* fix circular import
2026-02-24 10:55:08 -08:00

77 lines
3.9 KiB
Python

from typing import Optional
from pydantic import Field
from letta.schemas.enums import PrimitiveType
from letta.schemas.letta_base import OrmMetadataBase
class ProviderModelBase(OrmMetadataBase):
__id_prefix__ = PrimitiveType.PROVIDER_MODEL.value
class ProviderModel(ProviderModelBase):
"""
Pydantic model for provider models.
This represents individual models available from providers with a unique handle
that decouples the user-facing API from provider-specific implementation details.
"""
id: str = ProviderModelBase.generate_id_field()
# The unique handle used in the API (e.g., "openai/gpt-4o-mini", "anthropic/claude-3-5-sonnet")
# Format: {provider_display_name}/{model_display_name}
handle: str = Field(..., description="Unique handle for API reference (format: provider_display_name/model_display_name)")
# Display name shown in the UI for the model
name: str = Field(..., description="The actual model name used by the provider")
display_name: str = Field(..., description="Display name for the model shown in UI")
# Foreign key to the provider
provider_id: str = Field(..., description="Provider ID reference")
# Optional organization ID - NULL for global models, set for org-scoped models
organization_id: Optional[str] = Field(None, description="Organization ID if org-scoped, NULL if global")
# Model type: llm or embedding
model_type: str = Field(..., description="Type of model (llm or embedding)")
# Whether the model is enabled (default True)
enabled: bool = Field(default=True, description="Whether the model is enabled")
# Model endpoint type (e.g., "openai", "anthropic", etc.)
model_endpoint_type: str = Field(..., description="The endpoint type for the model (e.g., 'openai', 'anthropic')")
# Additional metadata fields
max_context_window: Optional[int] = Field(None, description="Context window size for the model")
supports_token_streaming: Optional[bool] = Field(None, description="Whether token streaming is supported")
supports_tool_calling: Optional[bool] = Field(None, description="Whether tool calling is supported")
embedding_dim: Optional[int] = Field(None, description="Embedding dimension for embedding models")
class ProviderModelCreate(ProviderModelBase):
"""Schema for creating a new provider model"""
handle: str = Field(..., description="Unique handle for API reference (format: provider_display_name/model_display_name)")
display_name: str = Field(..., description="Display name for the model shown in UI")
model_name: str = Field(..., description="The actual model name used by the provider")
model_display_name: str = Field(..., description="Model display name used in the handle")
provider_display_name: str = Field(..., description="Display name for the provider")
provider_id: str = Field(..., description="Provider ID reference")
model_type: str = Field(..., description="Type of model (llm or embedding)")
enabled: bool = Field(default=True, description="Whether the model is enabled")
context_window: Optional[int] = Field(None, description="Context window size for the model")
supports_streaming: Optional[bool] = Field(None, description="Whether streaming is supported")
supports_function_calling: Optional[bool] = Field(None, description="Whether function calling is supported")
class ProviderModelUpdate(ProviderModelBase):
"""Schema for updating a provider model"""
display_name: Optional[str] = Field(None, description="Display name for the model shown in UI")
enabled: Optional[bool] = Field(None, description="Whether the model is enabled")
context_window: Optional[int] = Field(None, description="Context window size for the model")
supports_streaming: Optional[bool] = Field(None, description="Whether streaming is supported")
supports_function_calling: Optional[bool] = Field(None, description="Whether function calling is supported")