# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. from __future__ import annotations from typing import List, Optional import httpx from ...types import ProviderType, model_list_params from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given from ..._utils import maybe_transform, async_maybe_transform from ..._compat import cached_property from .embeddings import ( EmbeddingsResource, AsyncEmbeddingsResource, EmbeddingsResourceWithRawResponse, AsyncEmbeddingsResourceWithRawResponse, EmbeddingsResourceWithStreamingResponse, AsyncEmbeddingsResourceWithStreamingResponse, ) from ..._resource import SyncAPIResource, AsyncAPIResource from ..._response import ( to_raw_response_wrapper, to_streamed_response_wrapper, async_to_raw_response_wrapper, async_to_streamed_response_wrapper, ) from ..._base_client import make_request_options from ...types.provider_type import ProviderType from ...types.provider_category import ProviderCategory from ...types.model_list_response import ModelListResponse __all__ = ["ModelsResource", "AsyncModelsResource"] class ModelsResource(SyncAPIResource): @cached_property def embeddings(self) -> EmbeddingsResource: return EmbeddingsResource(self._client) @cached_property def with_raw_response(self) -> ModelsResourceWithRawResponse: """ This property can be used as a prefix for any HTTP method call to return the raw response object instead of the parsed content. For more information, see https://www.github.com/letta-ai/letta-python#accessing-raw-response-data-eg-headers """ return ModelsResourceWithRawResponse(self) @cached_property def with_streaming_response(self) -> ModelsResourceWithStreamingResponse: """ An alternative to `.with_raw_response` that doesn't eagerly read the response body. For more information, see https://www.github.com/letta-ai/letta-python#with_streaming_response """ return ModelsResourceWithStreamingResponse(self) def list( self, *, provider_category: Optional[List[ProviderCategory]] | Omit = omit, provider_name: Optional[str] | Omit = omit, provider_type: Optional[ProviderType] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> ModelListResponse: """ 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. Args: extra_headers: Send extra headers extra_query: Add additional query parameters to the request extra_body: Add additional JSON properties to the request timeout: Override the client-level default timeout for this request, in seconds """ return self._get( "/v1/models/", options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform( { "provider_category": provider_category, "provider_name": provider_name, "provider_type": provider_type, }, model_list_params.ModelListParams, ), ), cast_to=ModelListResponse, ) class AsyncModelsResource(AsyncAPIResource): @cached_property def embeddings(self) -> AsyncEmbeddingsResource: return AsyncEmbeddingsResource(self._client) @cached_property def with_raw_response(self) -> AsyncModelsResourceWithRawResponse: """ This property can be used as a prefix for any HTTP method call to return the raw response object instead of the parsed content. For more information, see https://www.github.com/letta-ai/letta-python#accessing-raw-response-data-eg-headers """ return AsyncModelsResourceWithRawResponse(self) @cached_property def with_streaming_response(self) -> AsyncModelsResourceWithStreamingResponse: """ An alternative to `.with_raw_response` that doesn't eagerly read the response body. For more information, see https://www.github.com/letta-ai/letta-python#with_streaming_response """ return AsyncModelsResourceWithStreamingResponse(self) async def list( self, *, provider_category: Optional[List[ProviderCategory]] | Omit = omit, provider_name: Optional[str] | Omit = omit, provider_type: Optional[ProviderType] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> ModelListResponse: """ 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. Args: extra_headers: Send extra headers extra_query: Add additional query parameters to the request extra_body: Add additional JSON properties to the request timeout: Override the client-level default timeout for this request, in seconds """ return await self._get( "/v1/models/", options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform( { "provider_category": provider_category, "provider_name": provider_name, "provider_type": provider_type, }, model_list_params.ModelListParams, ), ), cast_to=ModelListResponse, ) class ModelsResourceWithRawResponse: def __init__(self, models: ModelsResource) -> None: self._models = models self.list = to_raw_response_wrapper( models.list, ) @cached_property def embeddings(self) -> EmbeddingsResourceWithRawResponse: return EmbeddingsResourceWithRawResponse(self._models.embeddings) class AsyncModelsResourceWithRawResponse: def __init__(self, models: AsyncModelsResource) -> None: self._models = models self.list = async_to_raw_response_wrapper( models.list, ) @cached_property def embeddings(self) -> AsyncEmbeddingsResourceWithRawResponse: return AsyncEmbeddingsResourceWithRawResponse(self._models.embeddings) class ModelsResourceWithStreamingResponse: def __init__(self, models: ModelsResource) -> None: self._models = models self.list = to_streamed_response_wrapper( models.list, ) @cached_property def embeddings(self) -> EmbeddingsResourceWithStreamingResponse: return EmbeddingsResourceWithStreamingResponse(self._models.embeddings) class AsyncModelsResourceWithStreamingResponse: def __init__(self, models: AsyncModelsResource) -> None: self._models = models self.list = async_to_streamed_response_wrapper( models.list, ) @cached_property def embeddings(self) -> AsyncEmbeddingsResourceWithStreamingResponse: return AsyncEmbeddingsResourceWithStreamingResponse(self._models.embeddings)