Files
letta-server/letta/server/rest_api/routers/v1/llms.py
2025-11-24 19:10:27 -08:00

58 lines
2.3 KiB
Python

from typing import TYPE_CHECKING, List, Optional
from fastapi import APIRouter, Depends, Query
from letta.schemas.enums import ProviderCategory, ProviderType
from letta.schemas.model import EmbeddingModel, Model
from letta.server.rest_api.dependencies import HeaderParams, get_headers, get_letta_server
if TYPE_CHECKING:
from letta.server.server import SyncServer
router = APIRouter(prefix="/models", tags=["models", "llms"])
@router.get("/", response_model=List[Model], operation_id="list_models")
async def list_llm_models(
provider_category: Optional[List[ProviderCategory]] = Query(None),
provider_name: Optional[str] = Query(None),
provider_type: Optional[ProviderType] = Query(None),
server: "SyncServer" = Depends(get_letta_server),
headers: HeaderParams = Depends(get_headers),
):
"""
List available LLM models using the asynchronous implementation for improved performance.
Returns Model format which extends LLMConfig with additional metadata fields.
Legacy LLMConfig fields are marked as deprecated but still available for backward compatibility.
"""
actor = await server.user_manager.get_actor_or_default_async(actor_id=headers.actor_id)
models = await server.list_llm_models_async(
provider_category=provider_category,
provider_name=provider_name,
provider_type=provider_type,
actor=actor,
)
# Convert all models to the new Model schema
return [Model.from_llm_config(model) for model in models]
@router.get("/embedding", response_model=List[EmbeddingModel], operation_id="list_embedding_models")
async def list_embedding_models(
server: "SyncServer" = Depends(get_letta_server),
headers: HeaderParams = Depends(get_headers),
):
"""
List available embedding models using the asynchronous implementation for improved performance.
Returns EmbeddingModel format which extends EmbeddingConfig with additional metadata fields.
Legacy EmbeddingConfig fields are marked as deprecated but still available for backward compatibility.
"""
actor = await server.user_manager.get_actor_or_default_async(actor_id=headers.actor_id)
models = await server.list_embedding_models_async(actor=actor)
# Convert all models to the new EmbeddingModel schema
return [EmbeddingModel.from_embedding_config(model) for model in models]