Skip to content

Commit 6134198

Browse files
feat(api): admin spend_alerts
1 parent 7015158 commit 6134198

7 files changed

Lines changed: 366 additions & 22 deletions

File tree

‎.stats.yml‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 262
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai/openai-e00ba6273043ec67eab4c213e30df144731fc5ae51d7c820ea647990c552b60b.yml
3-
openapi_spec_hash: 9168743f8e60b63630e679583b29a840
4-
config_hash: e02ca1082421dfe55b145c45e95d6126
1+
configured_endpoints: 264
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai/openai-c16aadb4992b72ce2391b8db90427e6be355e6c5f3f372bad3bfad7de5b8c8ed.yml
3+
openapi_spec_hash: 310aad77be43c413a991e659beedc1a8
4+
config_hash: c60fedbe1462084139674a3c34bbbc95

‎api.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -922,6 +922,7 @@ from openai.types.admin.organization import OrganizationSpendAlert, Organization
922922
Methods:
923923

924924
- <code title="post /organization/spend_alerts">client.admin.organization.spend_alerts.<a href="./src/openai/resources/admin/organization/spend_alerts.py">create</a>(\*\*<a href="src/openai/types/admin/organization/spend_alert_create_params.py">params</a>) -> <a href="./src/openai/types/admin/organization/organization_spend_alert.py">OrganizationSpendAlert</a></code>
925+
- <code title="get /organization/spend_alerts/{alert_id}">client.admin.organization.spend_alerts.<a href="./src/openai/resources/admin/organization/spend_alerts.py">retrieve</a>(alert_id) -> <a href="./src/openai/types/admin/organization/organization_spend_alert.py">OrganizationSpendAlert</a></code>
925926
- <code title="post /organization/spend_alerts/{alert_id}">client.admin.organization.spend_alerts.<a href="./src/openai/resources/admin/organization/spend_alerts.py">update</a>(alert_id, \*\*<a href="src/openai/types/admin/organization/spend_alert_update_params.py">params</a>) -> <a href="./src/openai/types/admin/organization/organization_spend_alert.py">OrganizationSpendAlert</a></code>
926927
- <code title="get /organization/spend_alerts">client.admin.organization.spend_alerts.<a href="./src/openai/resources/admin/organization/spend_alerts.py">list</a>(\*\*<a href="src/openai/types/admin/organization/spend_alert_list_params.py">params</a>) -> <a href="./src/openai/types/admin/organization/organization_spend_alert.py">SyncConversationCursorPage[OrganizationSpendAlert]</a></code>
927928
- <code title="delete /organization/spend_alerts/{alert_id}">client.admin.organization.spend_alerts.<a href="./src/openai/resources/admin/organization/spend_alerts.py">delete</a>(alert_id) -> <a href="./src/openai/types/admin/organization/organization_spend_alert_deleted.py">OrganizationSpendAlertDeleted</a></code>
@@ -1154,6 +1155,7 @@ from openai.types.admin.organization.projects import ProjectSpendAlert, ProjectS
11541155
Methods:
11551156

11561157
- <code title="post /organization/projects/{project_id}/spend_alerts">client.admin.organization.projects.spend_alerts.<a href="./src/openai/resources/admin/organization/projects/spend_alerts.py">create</a>(project_id, \*\*<a href="src/openai/types/admin/organization/projects/spend_alert_create_params.py">params</a>) -> <a href="./src/openai/types/admin/organization/projects/project_spend_alert.py">ProjectSpendAlert</a></code>
1158+
- <code title="get /organization/projects/{project_id}/spend_alerts/{alert_id}">client.admin.organization.projects.spend_alerts.<a href="./src/openai/resources/admin/organization/projects/spend_alerts.py">retrieve</a>(alert_id, \*, project_id) -> <a href="./src/openai/types/admin/organization/projects/project_spend_alert.py">ProjectSpendAlert</a></code>
11571159
- <code title="post /organization/projects/{project_id}/spend_alerts/{alert_id}">client.admin.organization.projects.spend_alerts.<a href="./src/openai/resources/admin/organization/projects/spend_alerts.py">update</a>(alert_id, \*, project_id, \*\*<a href="src/openai/types/admin/organization/projects/spend_alert_update_params.py">params</a>) -> <a href="./src/openai/types/admin/organization/projects/project_spend_alert.py">ProjectSpendAlert</a></code>
11581160
- <code title="get /organization/projects/{project_id}/spend_alerts">client.admin.organization.projects.spend_alerts.<a href="./src/openai/resources/admin/organization/projects/spend_alerts.py">list</a>(project_id, \*\*<a href="src/openai/types/admin/organization/projects/spend_alert_list_params.py">params</a>) -> <a href="./src/openai/types/admin/organization/projects/project_spend_alert.py">SyncConversationCursorPage[ProjectSpendAlert]</a></code>
11591161
- <code title="delete /organization/projects/{project_id}/spend_alerts/{alert_id}">client.admin.organization.projects.spend_alerts.<a href="./src/openai/resources/admin/organization/projects/spend_alerts.py">delete</a>(alert_id, \*, project_id) -> <a href="./src/openai/types/admin/organization/projects/project_spend_alert_deleted.py">ProjectSpendAlertDeleted</a></code>

‎src/openai/resources/admin/organization/projects/spend_alerts.py‎

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,48 @@ def create(
103103
cast_to=ProjectSpendAlert,
104104
)
105105

106+
def retrieve(
107+
self,
108+
alert_id: str,
109+
*,
110+
project_id: str,
111+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
112+
# The extra values given here take precedence over values defined on the client or passed to this method.
113+
extra_headers: Headers | None = None,
114+
extra_query: Query | None = None,
115+
extra_body: Body | None = None,
116+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
117+
) -> ProjectSpendAlert:
118+
"""
119+
Retrieves a project spend alert.
120+
121+
Args:
122+
extra_headers: Send extra headers
123+
124+
extra_query: Add additional query parameters to the request
125+
126+
extra_body: Add additional JSON properties to the request
127+
128+
timeout: Override the client-level default timeout for this request, in seconds
129+
"""
130+
if not project_id:
131+
raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}")
132+
if not alert_id:
133+
raise ValueError(f"Expected a non-empty value for `alert_id` but received {alert_id!r}")
134+
return self._get(
135+
path_template(
136+
"/organization/projects/{project_id}/spend_alerts/{alert_id}", project_id=project_id, alert_id=alert_id
137+
),
138+
options=make_request_options(
139+
extra_headers=extra_headers,
140+
extra_query=extra_query,
141+
extra_body=extra_body,
142+
timeout=timeout,
143+
security={"admin_api_key_auth": True},
144+
),
145+
cast_to=ProjectSpendAlert,
146+
)
147+
106148
def update(
107149
self,
108150
alert_id: str,
@@ -349,6 +391,48 @@ async def create(
349391
cast_to=ProjectSpendAlert,
350392
)
351393

394+
async def retrieve(
395+
self,
396+
alert_id: str,
397+
*,
398+
project_id: str,
399+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
400+
# The extra values given here take precedence over values defined on the client or passed to this method.
401+
extra_headers: Headers | None = None,
402+
extra_query: Query | None = None,
403+
extra_body: Body | None = None,
404+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
405+
) -> ProjectSpendAlert:
406+
"""
407+
Retrieves a project spend alert.
408+
409+
Args:
410+
extra_headers: Send extra headers
411+
412+
extra_query: Add additional query parameters to the request
413+
414+
extra_body: Add additional JSON properties to the request
415+
416+
timeout: Override the client-level default timeout for this request, in seconds
417+
"""
418+
if not project_id:
419+
raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}")
420+
if not alert_id:
421+
raise ValueError(f"Expected a non-empty value for `alert_id` but received {alert_id!r}")
422+
return await self._get(
423+
path_template(
424+
"/organization/projects/{project_id}/spend_alerts/{alert_id}", project_id=project_id, alert_id=alert_id
425+
),
426+
options=make_request_options(
427+
extra_headers=extra_headers,
428+
extra_query=extra_query,
429+
extra_body=extra_body,
430+
timeout=timeout,
431+
security={"admin_api_key_auth": True},
432+
),
433+
cast_to=ProjectSpendAlert,
434+
)
435+
352436
async def update(
353437
self,
354438
alert_id: str,
@@ -524,6 +608,9 @@ def __init__(self, spend_alerts: SpendAlerts) -> None:
524608
self.create = _legacy_response.to_raw_response_wrapper(
525609
spend_alerts.create,
526610
)
611+
self.retrieve = _legacy_response.to_raw_response_wrapper(
612+
spend_alerts.retrieve,
613+
)
527614
self.update = _legacy_response.to_raw_response_wrapper(
528615
spend_alerts.update,
529616
)
@@ -542,6 +629,9 @@ def __init__(self, spend_alerts: AsyncSpendAlerts) -> None:
542629
self.create = _legacy_response.async_to_raw_response_wrapper(
543630
spend_alerts.create,
544631
)
632+
self.retrieve = _legacy_response.async_to_raw_response_wrapper(
633+
spend_alerts.retrieve,
634+
)
545635
self.update = _legacy_response.async_to_raw_response_wrapper(
546636
spend_alerts.update,
547637
)
@@ -560,6 +650,9 @@ def __init__(self, spend_alerts: SpendAlerts) -> None:
560650
self.create = to_streamed_response_wrapper(
561651
spend_alerts.create,
562652
)
653+
self.retrieve = to_streamed_response_wrapper(
654+
spend_alerts.retrieve,
655+
)
563656
self.update = to_streamed_response_wrapper(
564657
spend_alerts.update,
565658
)
@@ -578,6 +671,9 @@ def __init__(self, spend_alerts: AsyncSpendAlerts) -> None:
578671
self.create = async_to_streamed_response_wrapper(
579672
spend_alerts.create,
580673
)
674+
self.retrieve = async_to_streamed_response_wrapper(
675+
spend_alerts.retrieve,
676+
)
581677
self.update = async_to_streamed_response_wrapper(
582678
spend_alerts.update,
583679
)

‎src/openai/resources/admin/organization/spend_alerts.py‎

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,43 @@ def create(
9696
cast_to=OrganizationSpendAlert,
9797
)
9898

99+
def retrieve(
100+
self,
101+
alert_id: str,
102+
*,
103+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
104+
# The extra values given here take precedence over values defined on the client or passed to this method.
105+
extra_headers: Headers | None = None,
106+
extra_query: Query | None = None,
107+
extra_body: Body | None = None,
108+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
109+
) -> OrganizationSpendAlert:
110+
"""
111+
Retrieves an organization spend alert.
112+
113+
Args:
114+
extra_headers: Send extra headers
115+
116+
extra_query: Add additional query parameters to the request
117+
118+
extra_body: Add additional JSON properties to the request
119+
120+
timeout: Override the client-level default timeout for this request, in seconds
121+
"""
122+
if not alert_id:
123+
raise ValueError(f"Expected a non-empty value for `alert_id` but received {alert_id!r}")
124+
return self._get(
125+
path_template("/organization/spend_alerts/{alert_id}", alert_id=alert_id),
126+
options=make_request_options(
127+
extra_headers=extra_headers,
128+
extra_query=extra_query,
129+
extra_body=extra_body,
130+
timeout=timeout,
131+
security={"admin_api_key_auth": True},
132+
),
133+
cast_to=OrganizationSpendAlert,
134+
)
135+
99136
def update(
100137
self,
101138
alert_id: str,
@@ -326,6 +363,43 @@ async def create(
326363
cast_to=OrganizationSpendAlert,
327364
)
328365

366+
async def retrieve(
367+
self,
368+
alert_id: str,
369+
*,
370+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
371+
# The extra values given here take precedence over values defined on the client or passed to this method.
372+
extra_headers: Headers | None = None,
373+
extra_query: Query | None = None,
374+
extra_body: Body | None = None,
375+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
376+
) -> OrganizationSpendAlert:
377+
"""
378+
Retrieves an organization spend alert.
379+
380+
Args:
381+
extra_headers: Send extra headers
382+
383+
extra_query: Add additional query parameters to the request
384+
385+
extra_body: Add additional JSON properties to the request
386+
387+
timeout: Override the client-level default timeout for this request, in seconds
388+
"""
389+
if not alert_id:
390+
raise ValueError(f"Expected a non-empty value for `alert_id` but received {alert_id!r}")
391+
return await self._get(
392+
path_template("/organization/spend_alerts/{alert_id}", alert_id=alert_id),
393+
options=make_request_options(
394+
extra_headers=extra_headers,
395+
extra_query=extra_query,
396+
extra_body=extra_body,
397+
timeout=timeout,
398+
security={"admin_api_key_auth": True},
399+
),
400+
cast_to=OrganizationSpendAlert,
401+
)
402+
329403
async def update(
330404
self,
331405
alert_id: str,
@@ -488,6 +562,9 @@ def __init__(self, spend_alerts: SpendAlerts) -> None:
488562
self.create = _legacy_response.to_raw_response_wrapper(
489563
spend_alerts.create,
490564
)
565+
self.retrieve = _legacy_response.to_raw_response_wrapper(
566+
spend_alerts.retrieve,
567+
)
491568
self.update = _legacy_response.to_raw_response_wrapper(
492569
spend_alerts.update,
493570
)
@@ -506,6 +583,9 @@ def __init__(self, spend_alerts: AsyncSpendAlerts) -> None:
506583
self.create = _legacy_response.async_to_raw_response_wrapper(
507584
spend_alerts.create,
508585
)
586+
self.retrieve = _legacy_response.async_to_raw_response_wrapper(
587+
spend_alerts.retrieve,
588+
)
509589
self.update = _legacy_response.async_to_raw_response_wrapper(
510590
spend_alerts.update,
511591
)
@@ -524,6 +604,9 @@ def __init__(self, spend_alerts: SpendAlerts) -> None:
524604
self.create = to_streamed_response_wrapper(
525605
spend_alerts.create,
526606
)
607+
self.retrieve = to_streamed_response_wrapper(
608+
spend_alerts.retrieve,
609+
)
527610
self.update = to_streamed_response_wrapper(
528611
spend_alerts.update,
529612
)
@@ -542,6 +625,9 @@ def __init__(self, spend_alerts: AsyncSpendAlerts) -> None:
542625
self.create = async_to_streamed_response_wrapper(
543626
spend_alerts.create,
544627
)
628+
self.retrieve = async_to_streamed_response_wrapper(
629+
spend_alerts.retrieve,
630+
)
545631
self.update = async_to_streamed_response_wrapper(
546632
spend_alerts.update,
547633
)

‎src/openai/types/responses/response.py‎

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from .response_status import ResponseStatus
1313
from .tool_choice_mcp import ToolChoiceMcp
1414
from ..shared.metadata import Metadata
15+
from ..shared.reasoning import Reasoning
1516
from .tool_choice_shell import ToolChoiceShell
1617
from .tool_choice_types import ToolChoiceTypes
1718
from .tool_choice_custom import ToolChoiceCustom
@@ -36,7 +37,6 @@
3637
"ModerationOutput",
3738
"ModerationOutputModerationResult",
3839
"ModerationOutputError",
39-
"Reasoning",
4040
]
4141

4242

@@ -173,22 +173,6 @@ class Moderation(BaseModel):
173173
"""Moderation for the response output."""
174174

175175

176-
class Reasoning(BaseModel):
177-
"""Reasoning configuration and metadata that were used for the response."""
178-
179-
context: Optional[Literal["current_turn", "all_turns"]] = None
180-
"""The effective reasoning context mode used for the response."""
181-
182-
effort: Optional[Literal["none", "minimal", "low", "medium", "high", "xhigh"]] = None
183-
"""The reasoning effort that was requested for the model, if specified."""
184-
185-
summary: Optional[Literal["concise", "detailed", "auto"]] = None
186-
"""A model-generated summary of its reasoning that was produced, if available."""
187-
188-
generate_summary: Optional[Literal["concise", "detailed", "auto"]] = None
189-
"""Deprecated. `summary` was used instead."""
190-
191-
192176
class Response(BaseModel):
193177
id: str
194178
"""Unique identifier for this Response."""
@@ -370,7 +354,11 @@ class Response(BaseModel):
370354
"""
371355

372356
reasoning: Optional[Reasoning] = None
373-
"""Reasoning configuration and metadata that were used for the response."""
357+
"""**gpt-5 and o-series models only**
358+
359+
Configuration options for
360+
[reasoning models](https://platform.openai.com/docs/guides/reasoning).
361+
"""
374362

375363
safety_identifier: Optional[str] = None
376364
"""

0 commit comments

Comments
 (0)