Files
letta-server/letta/schemas/provider_model.py
Sarah Wooders 982501f6fa feat: create model table to persist available models (#5835)
---------

Co-authored-by: Ari Webb <arijwebb@gmail.com>
Co-authored-by: Ari Webb <ari@letta.com>
2025-11-13 15:36:56 -08:00

78 lines
3.9 KiB
Python

from datetime import datetime
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")