--------- Co-authored-by: Ari Webb <arijwebb@gmail.com> Co-authored-by: Ari Webb <ari@letta.com>
78 lines
3.9 KiB
Python
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")
|