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
7 changes: 7 additions & 0 deletions sdk-endpoints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,13 @@ GET /v1/workspaces/{workspace_id}/member-budget-policies # dashb
POST /v1/workspaces/{workspace_id}/member-budget-policies # dashboard-only
PATCH /v1/workspaces/{workspace_id}/member-budget-policies/{default_id} # dashboard-only
DELETE /v1/workspaces/{workspace_id}/member-budget-policies/{default_id} # dashboard-only
# The dashboard's first-request setup guide (otari#660). It exists to walk a
# browser from an empty workspace to a working call, and the credential it
# issues is the thing an SDK caller already holds, so there is nothing here for
# a shell to wrap.
GET /v1/workspaces/{workspace_id}/activation # dashboard-only
POST /v1/workspaces/{workspace_id}/activation/key # dashboard-only
POST /v1/workspaces/{workspace_id}/activation/dismiss # dashboard-only
# Organization-scoped provider keys (otari-ai#1748, otari#643): the same
# tenancy-admin surface as the organization/workspace rows just above, and
# excluded for the same reason. An SDK caller acts inside one workspace with a
Expand Down
8 changes: 8 additions & 0 deletions src/otari/_client/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
"ToolsApi",
"UsageApi",
"UsersApi",
"WorkspaceActivationApi",
"WorkspaceMemberBudgetPoliciesApi",
"WorkspacesApi",
"ApiResponse",
Expand All @@ -65,6 +66,8 @@
"ApiException",
"AcceptInvitationRequest",
"AcceptInvitationResultPublic",
"ActivationApiKeyPublic",
"ActivationAttemptPublic",
"ActiveOrganizationMemberCreateRequest",
"ActiveOrganizationMemberCreateResultPublic",
"ActiveOrganizationMemberPublic",
Expand Down Expand Up @@ -440,6 +443,7 @@
"ValidationError",
"Value",
"Value1",
"WorkspaceActivationPublic",
"WorkspaceAssignmentRequest",
"WorkspaceCreate",
"WorkspaceMemberBudgetPoliciesPublic",
Expand Down Expand Up @@ -493,6 +497,7 @@
from otari._client.api.tools_api import ToolsApi as ToolsApi
from otari._client.api.usage_api import UsageApi as UsageApi
from otari._client.api.users_api import UsersApi as UsersApi
from otari._client.api.workspace_activation_api import WorkspaceActivationApi as WorkspaceActivationApi
from otari._client.api.workspace_member_budget_policies_api import WorkspaceMemberBudgetPoliciesApi as WorkspaceMemberBudgetPoliciesApi
from otari._client.api.workspaces_api import WorkspacesApi as WorkspacesApi

Expand All @@ -510,6 +515,8 @@
# import models into sdk package
from otari._client.models.accept_invitation_request import AcceptInvitationRequest as AcceptInvitationRequest
from otari._client.models.accept_invitation_result_public import AcceptInvitationResultPublic as AcceptInvitationResultPublic
from otari._client.models.activation_api_key_public import ActivationApiKeyPublic as ActivationApiKeyPublic
from otari._client.models.activation_attempt_public import ActivationAttemptPublic as ActivationAttemptPublic
from otari._client.models.active_organization_member_create_request import ActiveOrganizationMemberCreateRequest as ActiveOrganizationMemberCreateRequest
from otari._client.models.active_organization_member_create_result_public import ActiveOrganizationMemberCreateResultPublic as ActiveOrganizationMemberCreateResultPublic
from otari._client.models.active_organization_member_public import ActiveOrganizationMemberPublic as ActiveOrganizationMemberPublic
Expand Down Expand Up @@ -885,6 +892,7 @@
from otari._client.models.validation_error import ValidationError as ValidationError
from otari._client.models.value import Value as Value
from otari._client.models.value1 import Value1 as Value1
from otari._client.models.workspace_activation_public import WorkspaceActivationPublic as WorkspaceActivationPublic
from otari._client.models.workspace_assignment_request import WorkspaceAssignmentRequest as WorkspaceAssignmentRequest
from otari._client.models.workspace_create import WorkspaceCreate as WorkspaceCreate
from otari._client.models.workspace_member_budget_policies_public import WorkspaceMemberBudgetPoliciesPublic as WorkspaceMemberBudgetPoliciesPublic
Expand Down
1 change: 1 addition & 0 deletions src/otari/_client/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
from otari._client.api.tools_api import ToolsApi
from otari._client.api.usage_api import UsageApi
from otari._client.api.users_api import UsersApi
from otari._client.api.workspace_activation_api import WorkspaceActivationApi
from otari._client.api.workspace_member_budget_policies_api import WorkspaceMemberBudgetPoliciesApi
from otari._client.api.workspaces_api import WorkspacesApi

6 changes: 3 additions & 3 deletions src/otari/_client/api/organization_pricing_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def create_organization_pricing_v1_organizations_me_pricing_post(
) -> OrganizationModelPricingPublic:
"""Create Organization Pricing

Set the organization's rate for a model over a period. Refused with a 409 when the period overlaps one already stored for that model, naming the period it collides with, rather than shadowing it. The key is normalized to its canonical ``instance:model`` form first, the same call ``POST /v1/pricing`` makes, and that is what makes one model one row rather than one per spelling. Stored verbatim, ``openai:gpt-4o`` and ``openai/gpt-4o`` are two keys: the overlap rule would not see them as colliding, resolution prefers the canonical one so the other sits dormant until the first is deleted, and the batched tool-rate lookup matches only the canonical form, so a tool priced under the slash spelling would pass the require-pricing gate and then settle at zero.
Set the organization's rate for a model over a period. Refused with a 409 when the period overlaps one already stored for that model, naming the period it collides with, rather than shadowing it. The key is normalized to its canonical ``instance:model`` form first, the same call ``POST /v1/pricing`` makes, and that is what makes one model one row rather than one per spelling. Stored verbatim, ``openai:gpt-4o`` and ``openai/gpt-4o`` are two keys: the overlap rule would not see them as colliding, and both would resolve, with the canonical one preferred, leaving the other dormant until the first is deleted. Normalizing on the way in is what stops that pair existing at all.

:param organization_model_pricing_create: (required)
:type organization_model_pricing_create: OrganizationModelPricingCreate
Expand Down Expand Up @@ -129,7 +129,7 @@ def create_organization_pricing_v1_organizations_me_pricing_post_with_http_info(
) -> ApiResponse[OrganizationModelPricingPublic]:
"""Create Organization Pricing

Set the organization's rate for a model over a period. Refused with a 409 when the period overlaps one already stored for that model, naming the period it collides with, rather than shadowing it. The key is normalized to its canonical ``instance:model`` form first, the same call ``POST /v1/pricing`` makes, and that is what makes one model one row rather than one per spelling. Stored verbatim, ``openai:gpt-4o`` and ``openai/gpt-4o`` are two keys: the overlap rule would not see them as colliding, resolution prefers the canonical one so the other sits dormant until the first is deleted, and the batched tool-rate lookup matches only the canonical form, so a tool priced under the slash spelling would pass the require-pricing gate and then settle at zero.
Set the organization's rate for a model over a period. Refused with a 409 when the period overlaps one already stored for that model, naming the period it collides with, rather than shadowing it. The key is normalized to its canonical ``instance:model`` form first, the same call ``POST /v1/pricing`` makes, and that is what makes one model one row rather than one per spelling. Stored verbatim, ``openai:gpt-4o`` and ``openai/gpt-4o`` are two keys: the overlap rule would not see them as colliding, and both would resolve, with the canonical one preferred, leaving the other dormant until the first is deleted. Normalizing on the way in is what stops that pair existing at all.

:param organization_model_pricing_create: (required)
:type organization_model_pricing_create: OrganizationModelPricingCreate
Expand Down Expand Up @@ -197,7 +197,7 @@ def create_organization_pricing_v1_organizations_me_pricing_post_without_preload
) -> RESTResponseType:
"""Create Organization Pricing

Set the organization's rate for a model over a period. Refused with a 409 when the period overlaps one already stored for that model, naming the period it collides with, rather than shadowing it. The key is normalized to its canonical ``instance:model`` form first, the same call ``POST /v1/pricing`` makes, and that is what makes one model one row rather than one per spelling. Stored verbatim, ``openai:gpt-4o`` and ``openai/gpt-4o`` are two keys: the overlap rule would not see them as colliding, resolution prefers the canonical one so the other sits dormant until the first is deleted, and the batched tool-rate lookup matches only the canonical form, so a tool priced under the slash spelling would pass the require-pricing gate and then settle at zero.
Set the organization's rate for a model over a period. Refused with a 409 when the period overlaps one already stored for that model, naming the period it collides with, rather than shadowing it. The key is normalized to its canonical ``instance:model`` form first, the same call ``POST /v1/pricing`` makes, and that is what makes one model one row rather than one per spelling. Stored verbatim, ``openai:gpt-4o`` and ``openai/gpt-4o`` are two keys: the overlap rule would not see them as colliding, and both would resolve, with the canonical one preferred, leaving the other dormant until the first is deleted. Normalizing on the way in is what stops that pair existing at all.

:param organization_model_pricing_create: (required)
:type organization_model_pricing_create: OrganizationModelPricingCreate
Expand Down
Loading
Loading