Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions sdk-endpoints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ POST /api/v1/audio/speech
POST /api/v1/audio/transcriptions

[excluded]
# The RFC 7523 token exchange the Anthropic SDKs and Claude Code already speak
# when ANTHROPIC_BASE_URL points at Otari. A client that wants workload identity
# uses that implementation; an Otari SDK wrapper would be a second one.
POST /api/v1/oauth/token # protocol endpoint, spoken by the Anthropic SDKs
GET /api/v1/models/{model_id} # redundant, list_models covers discovery
# Caller-orchestrated MCP is public, but no SDK shell wraps it yet. Typed
# mcp.list_tools and mcp.execute methods are the next step for the SDKs, and
Expand Down Expand Up @@ -124,6 +128,19 @@ POST /api/v1/provider-endpoints # not yet wrapped
GET /api/v1/provider-endpoints/{endpoint_id} # not yet wrapped
PATCH /api/v1/provider-endpoints/{endpoint_id} # not yet wrapped
DELETE /api/v1/provider-endpoints/{endpoint_id} # not yet wrapped
# Hosted providers (the deployment's own upstream credentials, operator-only)
GET /api/v1/hosted-providers # dashboard-only
POST /api/v1/hosted-providers # dashboard-only
GET /api/v1/hosted-providers/refresh/preview # dashboard-only
POST /api/v1/hosted-providers/refresh # dashboard-only
PATCH /api/v1/hosted-providers/{provider} # dashboard-only
DELETE /api/v1/hosted-providers/{provider} # dashboard-only
GET /api/v1/hosted-providers/{provider}/models # dashboard-only
POST /api/v1/hosted-providers/{provider}/models # dashboard-only
POST /api/v1/hosted-providers/{provider}/models/refresh # dashboard-only
GET /api/v1/hosted-providers/{provider}/available-models # dashboard-only
PATCH /api/v1/hosted-providers/{provider}/models/{model_id} # dashboard-only
DELETE /api/v1/hosted-providers/{provider}/models/{model_id} # dashboard-only
# Provider credentials (runtime provider management)
GET /api/v1/provider-credentials # not yet wrapped
POST /api/v1/provider-credentials # not yet wrapped
Expand Down Expand Up @@ -172,6 +189,9 @@ PATCH /api/v1/keys/{key_id}/end-users # not yet wrapped
GET /api/v1/keys/{key_id}/end-users/{external_id} # not yet wrapped
PUT /api/v1/keys/{key_id}/end-users/{external_id} # not yet wrapped
PATCH /api/v1/keys/{key_id}/end-users/{external_id} # not yet wrapped
POST /api/v1/keys/{key_id}/federation-rules # not yet wrapped
GET /api/v1/keys/{key_id}/federation-rules # not yet wrapped
DELETE /api/v1/keys/{key_id}/federation-rules/{rule_id} # not yet wrapped
# A service key managing its own end users, authenticated with that key
GET /api/v1/end-users # not yet wrapped
PUT /api/v1/end-users # not yet wrapped
Expand Down Expand Up @@ -316,6 +336,7 @@ POST /api/v1/admin/users/{user_id}/password-link # dashboard-only
POST /api/v1/organizations # dashboard-only
GET /api/v1/organizations/me # dashboard-only
PATCH /api/v1/organizations/me # dashboard-only
DELETE /api/v1/organizations/me # dashboard-only
GET /api/v1/organizations/me/memberships # dashboard-only
POST /api/v1/organizations/me/switch # dashboard-only
GET /api/v1/organizations/me/members # dashboard-only
Expand Down Expand Up @@ -354,6 +375,7 @@ DELETE /api/v1/organizations/me/routing-policies/{name} # dashboard-only
GET /api/v1/organizations/me/aliases # dashboard-only
POST /api/v1/organizations/me/aliases # dashboard-only
DELETE /api/v1/organizations/me/aliases/{name} # dashboard-only
GET /api/v1/organizations/me/automatic-fallbacks # dashboard-only
# The member's own keys (otari-ai#1941), excluded for the same reason as the
# usage reads above: scoped by the caller's dashboard session, which an SDK
# caller does not hold.
Expand Down Expand Up @@ -444,6 +466,7 @@ DELETE /api/v1/organizations/me/provider-keys/{key_id} #
POST /api/v1/organizations/me/provider-keys/{key_id}/archive # dashboard-only
POST /api/v1/organizations/me/provider-keys/{key_id}/restore # dashboard-only
POST /api/v1/organizations/me/provider-keys/{key_id}/default # dashboard-only
DELETE /api/v1/organizations/me/provider-keys/{key_id}/default # dashboard-only
# The models offered on one of those keys, their rates and their serving
# switches (otari#643 follow-up). Same surface, same reason: an SDK caller sends
# a model and a key, and which of an organization's adopted models are served
Expand Down
46 changes: 46 additions & 0 deletions src/otari/_client/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"FilesApi",
"HealthApi",
"HooksApi",
"HostedProvidersApi",
"ImagesApi",
"InvitationsApi",
"KeysApi",
Expand All @@ -43,6 +44,7 @@
"MessagesApi",
"ModelsApi",
"ModerationsApi",
"OauthApi",
"OrganizationBudgetsApi",
"OrganizationGuardrailDefinitionsApi",
"OrganizationGuardrailsApi",
Expand Down Expand Up @@ -127,6 +129,8 @@
"AudioSpeechRequest",
"AuthenticatePasskeyRequest",
"AuthorizeResponse",
"AutomaticFallbackPublic",
"AutomaticFallbacksResponse",
"BATCHBatchError",
"BATCHBatchRequestCounts",
"BATCHBatchUsage",
Expand Down Expand Up @@ -282,6 +286,11 @@
"ExternalIngestError",
"ExternalIngestResult",
"ExternalUsageEvent",
"FallbackOfferingPublic",
"FederationRuleCreate",
"FederationRulePublic",
"FederationTokenRequest",
"FederationTokenResponse",
"FeedbackSubmission",
"GateResultResponse",
"GatewaySettings",
Expand All @@ -292,6 +301,19 @@
"GuardrailProfileSpec",
"GuardrailStage",
"HTTPValidationError",
"HostedAvailableModelsPublic",
"HostedCatalogKeptGroupPublic",
"HostedCatalogProviderRefreshPublic",
"HostedCatalogRefreshPublic",
"HostedModelCreateRequest",
"HostedModelPublic",
"HostedModelUpdateRequest",
"HostedModelsPublic",
"HostedModelsRefreshPublic",
"HostedProviderCreateRequest",
"HostedProviderPublic",
"HostedProviderUpdateRequest",
"HostedProvidersPublic",
"IMGImage",
"IMGUsage",
"IMGUsageInputTokensDetails",
Expand Down Expand Up @@ -488,6 +510,7 @@
"NoulCriteria",
"NoulQuestion",
"OAuthCallbackRequest",
"OAuthErrorResponse",
"OAuthSessionResponse",
"OfferingUsage",
"OpenAIFileDeleted",
Expand Down Expand Up @@ -765,6 +788,7 @@
from otari._client.api.files_api import FilesApi as FilesApi
from otari._client.api.health_api import HealthApi as HealthApi
from otari._client.api.hooks_api import HooksApi as HooksApi
from otari._client.api.hosted_providers_api import HostedProvidersApi as HostedProvidersApi
from otari._client.api.images_api import ImagesApi as ImagesApi
from otari._client.api.invitations_api import InvitationsApi as InvitationsApi
from otari._client.api.keys_api import KeysApi as KeysApi
Expand All @@ -773,6 +797,7 @@
from otari._client.api.messages_api import MessagesApi as MessagesApi
from otari._client.api.models_api import ModelsApi as ModelsApi
from otari._client.api.moderations_api import ModerationsApi as ModerationsApi
from otari._client.api.oauth_api import OauthApi as OauthApi
from otari._client.api.organization_budgets_api import OrganizationBudgetsApi as OrganizationBudgetsApi
from otari._client.api.organization_guardrail_definitions_api import OrganizationGuardrailDefinitionsApi as OrganizationGuardrailDefinitionsApi
from otari._client.api.organization_guardrails_api import OrganizationGuardrailsApi as OrganizationGuardrailsApi
Expand Down Expand Up @@ -861,6 +886,8 @@
from otari._client.models.audio_speech_request import AudioSpeechRequest as AudioSpeechRequest
from otari._client.models.authenticate_passkey_request import AuthenticatePasskeyRequest as AuthenticatePasskeyRequest
from otari._client.models.authorize_response import AuthorizeResponse as AuthorizeResponse
from otari._client.models.automatic_fallback_public import AutomaticFallbackPublic as AutomaticFallbackPublic
from otari._client.models.automatic_fallbacks_response import AutomaticFallbacksResponse as AutomaticFallbacksResponse
from otari._client.models.batch_batch_error import BATCHBatchError as BATCHBatchError
from otari._client.models.batch_batch_request_counts import BATCHBatchRequestCounts as BATCHBatchRequestCounts
from otari._client.models.batch_batch_usage import BATCHBatchUsage as BATCHBatchUsage
Expand Down Expand Up @@ -1016,6 +1043,11 @@
from otari._client.models.external_ingest_error import ExternalIngestError as ExternalIngestError
from otari._client.models.external_ingest_result import ExternalIngestResult as ExternalIngestResult
from otari._client.models.external_usage_event import ExternalUsageEvent as ExternalUsageEvent
from otari._client.models.fallback_offering_public import FallbackOfferingPublic as FallbackOfferingPublic
from otari._client.models.federation_rule_create import FederationRuleCreate as FederationRuleCreate
from otari._client.models.federation_rule_public import FederationRulePublic as FederationRulePublic
from otari._client.models.federation_token_request import FederationTokenRequest as FederationTokenRequest
from otari._client.models.federation_token_response import FederationTokenResponse as FederationTokenResponse
from otari._client.models.feedback_submission import FeedbackSubmission as FeedbackSubmission
from otari._client.models.gate_result_response import GateResultResponse as GateResultResponse
from otari._client.models.gateway_settings import GatewaySettings as GatewaySettings
Expand All @@ -1026,6 +1058,19 @@
from otari._client.models.guardrail_profile_spec import GuardrailProfileSpec as GuardrailProfileSpec
from otari._client.models.guardrail_stage import GuardrailStage as GuardrailStage
from otari._client.models.http_validation_error import HTTPValidationError as HTTPValidationError
from otari._client.models.hosted_available_models_public import HostedAvailableModelsPublic as HostedAvailableModelsPublic
from otari._client.models.hosted_catalog_kept_group_public import HostedCatalogKeptGroupPublic as HostedCatalogKeptGroupPublic
from otari._client.models.hosted_catalog_provider_refresh_public import HostedCatalogProviderRefreshPublic as HostedCatalogProviderRefreshPublic
from otari._client.models.hosted_catalog_refresh_public import HostedCatalogRefreshPublic as HostedCatalogRefreshPublic
from otari._client.models.hosted_model_create_request import HostedModelCreateRequest as HostedModelCreateRequest
from otari._client.models.hosted_model_public import HostedModelPublic as HostedModelPublic
from otari._client.models.hosted_model_update_request import HostedModelUpdateRequest as HostedModelUpdateRequest
from otari._client.models.hosted_models_public import HostedModelsPublic as HostedModelsPublic
from otari._client.models.hosted_models_refresh_public import HostedModelsRefreshPublic as HostedModelsRefreshPublic
from otari._client.models.hosted_provider_create_request import HostedProviderCreateRequest as HostedProviderCreateRequest
from otari._client.models.hosted_provider_public import HostedProviderPublic as HostedProviderPublic
from otari._client.models.hosted_provider_update_request import HostedProviderUpdateRequest as HostedProviderUpdateRequest
from otari._client.models.hosted_providers_public import HostedProvidersPublic as HostedProvidersPublic
from otari._client.models.img_image import IMGImage as IMGImage
from otari._client.models.img_usage import IMGUsage as IMGUsage
from otari._client.models.img_usage_input_tokens_details import IMGUsageInputTokensDetails as IMGUsageInputTokensDetails
Expand Down Expand Up @@ -1222,6 +1267,7 @@
from otari._client.models.noul_criteria import NoulCriteria as NoulCriteria
from otari._client.models.noul_question import NoulQuestion as NoulQuestion
from otari._client.models.o_auth_callback_request import OAuthCallbackRequest as OAuthCallbackRequest
from otari._client.models.o_auth_error_response import OAuthErrorResponse as OAuthErrorResponse
from otari._client.models.o_auth_session_response import OAuthSessionResponse as OAuthSessionResponse
from otari._client.models.offering_usage import OfferingUsage as OfferingUsage
from otari._client.models.open_ai_file_deleted import OpenAIFileDeleted as OpenAIFileDeleted
Expand Down
2 changes: 2 additions & 0 deletions src/otari/_client/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from otari._client.api.files_api import FilesApi
from otari._client.api.health_api import HealthApi
from otari._client.api.hooks_api import HooksApi
from otari._client.api.hosted_providers_api import HostedProvidersApi
from otari._client.api.images_api import ImagesApi
from otari._client.api.invitations_api import InvitationsApi
from otari._client.api.keys_api import KeysApi
Expand All @@ -26,6 +27,7 @@
from otari._client.api.messages_api import MessagesApi
from otari._client.api.models_api import ModelsApi
from otari._client.api.moderations_api import ModerationsApi
from otari._client.api.oauth_api import OauthApi
from otari._client.api.organization_budgets_api import OrganizationBudgetsApi
from otari._client.api.organization_guardrail_definitions_api import OrganizationGuardrailDefinitionsApi
from otari._client.api.organization_guardrails_api import OrganizationGuardrailsApi
Expand Down
6 changes: 3 additions & 3 deletions src/otari/_client/api/catalog_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ def catalog_list_catalog(
) -> CatalogResponse:
"""List Catalog

The models this caller may use, one entry each however many providers serve it. Prices are the caller's: an organization's override where one applies, else the deployment's row, else the models.dev default. Aliases and routing policies are not models and are not listed; see Routing. A visitor, where the catalog is public, sees the configured instances and the hosted models at the deployment's rates, and nothing that belongs to a tenant.
The models this caller may use, one entry each however many providers serve it. Prices are the caller's: an organization's override where one applies, else the deployment's row, else the models.dev default. Aliases and routing policies are not models and are not listed; see Routing. A visitor, where the catalog is public, sees the configured instances and the hosted models every organization reaches, at the deployment's rates, and nothing that belongs to a tenant.

:param at_context: Compare prices for a request of this many input tokens: each model's minimum is taken from the pricing tier that request would settle at. Omitted, the base rates compare.
:type at_context: int
Expand Down Expand Up @@ -473,7 +473,7 @@ def catalog_list_catalog_with_http_info(
) -> ApiResponse[CatalogResponse]:
"""List Catalog

The models this caller may use, one entry each however many providers serve it. Prices are the caller's: an organization's override where one applies, else the deployment's row, else the models.dev default. Aliases and routing policies are not models and are not listed; see Routing. A visitor, where the catalog is public, sees the configured instances and the hosted models at the deployment's rates, and nothing that belongs to a tenant.
The models this caller may use, one entry each however many providers serve it. Prices are the caller's: an organization's override where one applies, else the deployment's row, else the models.dev default. Aliases and routing policies are not models and are not listed; see Routing. A visitor, where the catalog is public, sees the configured instances and the hosted models every organization reaches, at the deployment's rates, and nothing that belongs to a tenant.

:param at_context: Compare prices for a request of this many input tokens: each model's minimum is taken from the pricing tier that request would settle at. Omitted, the base rates compare.
:type at_context: int
Expand Down Expand Up @@ -605,7 +605,7 @@ def catalog_list_catalog_without_preload_content(
) -> RESTResponseType:
"""List Catalog

The models this caller may use, one entry each however many providers serve it. Prices are the caller's: an organization's override where one applies, else the deployment's row, else the models.dev default. Aliases and routing policies are not models and are not listed; see Routing. A visitor, where the catalog is public, sees the configured instances and the hosted models at the deployment's rates, and nothing that belongs to a tenant.
The models this caller may use, one entry each however many providers serve it. Prices are the caller's: an organization's override where one applies, else the deployment's row, else the models.dev default. Aliases and routing policies are not models and are not listed; see Routing. A visitor, where the catalog is public, sees the configured instances and the hosted models every organization reaches, at the deployment's rates, and nothing that belongs to a tenant.

:param at_context: Compare prices for a request of this many input tokens: each model's minimum is taken from the pricing tier that request would settle at. Omitted, the base rates compare.
:type at_context: int
Expand Down
Loading
Loading