Skip to content

Commit c0823d8

Browse files
RobertCraigiemegamanics
authored andcommitted
feat(api): releases from DevDay; assistants, multimodality, tools, dall-e-3, tts, and more (openai#682)
* feat(api): releases from DevDay; assistants, multimodality, tools, dall-e-3, tts, and more * docs(api): improve docstrings * v1.1.0
1 parent c2bd21b commit c0823d8

File tree

144 files changed

+8618
-252
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

144 files changed

+8618
-252
lines changed

.stats.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
configured_endpoints: 28
1+
configured_endpoints: 57

api.md

+139-1
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,23 @@ Types:
1919
```python
2020
from openai.types.chat import (
2121
ChatCompletion,
22+
ChatCompletionAssistantMessageParam,
2223
ChatCompletionChunk,
24+
ChatCompletionContentPart,
25+
ChatCompletionContentPartImage,
26+
ChatCompletionContentPartText,
27+
ChatCompletionFunctionCallOption,
28+
ChatCompletionFunctionMessageParam,
2329
ChatCompletionMessage,
2430
ChatCompletionMessageParam,
31+
ChatCompletionMessageToolCall,
32+
ChatCompletionNamedToolChoice,
2533
ChatCompletionRole,
34+
ChatCompletionSystemMessageParam,
35+
ChatCompletionTool,
36+
ChatCompletionToolChoiceOption,
37+
ChatCompletionToolMessageParam,
38+
ChatCompletionUserMessageParam,
2639
)
2740
```
2841

@@ -66,7 +79,7 @@ Methods:
6679

6780
- <code title="post /files">client.files.<a href="./src/openai/resources/files.py">create</a>(\*\*<a href="src/openai/types/file_create_params.py">params</a>) -> <a href="./src/openai/types/file_object.py">FileObject</a></code>
6881
- <code title="get /files/{file_id}">client.files.<a href="./src/openai/resources/files.py">retrieve</a>(file_id) -> <a href="./src/openai/types/file_object.py">FileObject</a></code>
69-
- <code title="get /files">client.files.<a href="./src/openai/resources/files.py">list</a>() -> <a href="./src/openai/types/file_object.py">SyncPage[FileObject]</a></code>
82+
- <code title="get /files">client.files.<a href="./src/openai/resources/files.py">list</a>(\*\*<a href="src/openai/types/file_list_params.py">params</a>) -> <a href="./src/openai/types/file_object.py">SyncPage[FileObject]</a></code>
7083
- <code title="delete /files/{file_id}">client.files.<a href="./src/openai/resources/files.py">delete</a>(file_id) -> <a href="./src/openai/types/file_deleted.py">FileDeleted</a></code>
7184
- <code title="get /files/{file_id}/content">client.files.<a href="./src/openai/resources/files.py">retrieve_content</a>(file_id) -> str</code>
7285
- <code>client.files.<a href="./src/openai/resources/files.py">wait_for_processing</a>(\*args) -> FileObject</code>
@@ -111,6 +124,12 @@ Methods:
111124

112125
- <code title="post /audio/translations">client.audio.translations.<a href="./src/openai/resources/audio/translations.py">create</a>(\*\*<a href="src/openai/types/audio/translation_create_params.py">params</a>) -> <a href="./src/openai/types/audio/translation.py">Translation</a></code>
113126

127+
## Speech
128+
129+
Methods:
130+
131+
- <code title="post /audio/speech">client.audio.speech.<a href="./src/openai/resources/audio/speech.py">create</a>(\*\*<a href="src/openai/types/audio/speech_create_params.py">params</a>) -> HttpxBinaryResponseContent</code>
132+
114133
# Moderations
115134

116135
Types:
@@ -170,3 +189,122 @@ Methods:
170189
- <code title="get /fine-tunes">client.fine_tunes.<a href="./src/openai/resources/fine_tunes.py">list</a>() -> <a href="./src/openai/types/fine_tune.py">SyncPage[FineTune]</a></code>
171190
- <code title="post /fine-tunes/{fine_tune_id}/cancel">client.fine_tunes.<a href="./src/openai/resources/fine_tunes.py">cancel</a>(fine_tune_id) -> <a href="./src/openai/types/fine_tune.py">FineTune</a></code>
172191
- <code title="get /fine-tunes/{fine_tune_id}/events">client.fine_tunes.<a href="./src/openai/resources/fine_tunes.py">list_events</a>(fine_tune_id, \*\*<a href="src/openai/types/fine_tune_list_events_params.py">params</a>) -> <a href="./src/openai/types/fine_tune_events_list_response.py">FineTuneEventsListResponse</a></code>
192+
193+
# Beta
194+
195+
## Assistants
196+
197+
Types:
198+
199+
```python
200+
from openai.types.beta import Assistant, AsssitantDeleted
201+
```
202+
203+
Methods:
204+
205+
- <code title="post /assistants">client.beta.assistants.<a href="./src/openai/resources/beta/assistants/assistants.py">create</a>(\*\*<a href="src/openai/types/beta/assistant_create_params.py">params</a>) -> <a href="./src/openai/types/beta/assistant.py">Assistant</a></code>
206+
- <code title="get /assistants/{assistant_id}">client.beta.assistants.<a href="./src/openai/resources/beta/assistants/assistants.py">retrieve</a>(assistant_id) -> <a href="./src/openai/types/beta/assistant.py">Assistant</a></code>
207+
- <code title="post /assistants/{assistant_id}">client.beta.assistants.<a href="./src/openai/resources/beta/assistants/assistants.py">update</a>(assistant_id, \*\*<a href="src/openai/types/beta/assistant_update_params.py">params</a>) -> <a href="./src/openai/types/beta/assistant.py">Assistant</a></code>
208+
- <code title="get /assistants">client.beta.assistants.<a href="./src/openai/resources/beta/assistants/assistants.py">list</a>(\*\*<a href="src/openai/types/beta/assistant_list_params.py">params</a>) -> <a href="./src/openai/types/beta/assistant.py">SyncCursorPage[Assistant]</a></code>
209+
- <code title="delete /assistants/{assistant_id}">client.beta.assistants.<a href="./src/openai/resources/beta/assistants/assistants.py">delete</a>(assistant_id) -> <a href="./src/openai/types/beta/asssitant_deleted.py">AsssitantDeleted</a></code>
210+
211+
### Files
212+
213+
Types:
214+
215+
```python
216+
from openai.types.beta.assistants import AssistantFile, FileDeleteResponse
217+
```
218+
219+
Methods:
220+
221+
- <code title="post /assistants/{assistant_id}/files">client.beta.assistants.files.<a href="./src/openai/resources/beta/assistants/files.py">create</a>(assistant_id, \*\*<a href="src/openai/types/beta/assistants/file_create_params.py">params</a>) -> <a href="./src/openai/types/beta/assistants/assistant_file.py">AssistantFile</a></code>
222+
- <code title="get /assistants/{assistant_id}/files/{file_id}">client.beta.assistants.files.<a href="./src/openai/resources/beta/assistants/files.py">retrieve</a>(file_id, \*, assistant_id) -> <a href="./src/openai/types/beta/assistants/assistant_file.py">AssistantFile</a></code>
223+
- <code title="get /assistants/{assistant_id}/files">client.beta.assistants.files.<a href="./src/openai/resources/beta/assistants/files.py">list</a>(assistant_id, \*\*<a href="src/openai/types/beta/assistants/file_list_params.py">params</a>) -> <a href="./src/openai/types/beta/assistants/assistant_file.py">SyncCursorPage[AssistantFile]</a></code>
224+
- <code title="delete /assistants/{assistant_id}/files/{file_id}">client.beta.assistants.files.<a href="./src/openai/resources/beta/assistants/files.py">delete</a>(file_id, \*, assistant_id) -> <a href="./src/openai/types/beta/assistants/file_delete_response.py">FileDeleteResponse</a></code>
225+
226+
## Threads
227+
228+
Types:
229+
230+
```python
231+
from openai.types.beta import Thread, ThreadDeleted
232+
```
233+
234+
Methods:
235+
236+
- <code title="post /threads">client.beta.threads.<a href="./src/openai/resources/beta/threads/threads.py">create</a>(\*\*<a href="src/openai/types/beta/thread_create_params.py">params</a>) -> <a href="./src/openai/types/beta/thread.py">Thread</a></code>
237+
- <code title="get /threads/{thread_id}">client.beta.threads.<a href="./src/openai/resources/beta/threads/threads.py">retrieve</a>(thread_id) -> <a href="./src/openai/types/beta/thread.py">Thread</a></code>
238+
- <code title="post /threads/{thread_id}">client.beta.threads.<a href="./src/openai/resources/beta/threads/threads.py">update</a>(thread_id, \*\*<a href="src/openai/types/beta/thread_update_params.py">params</a>) -> <a href="./src/openai/types/beta/thread.py">Thread</a></code>
239+
- <code title="delete /threads/{thread_id}">client.beta.threads.<a href="./src/openai/resources/beta/threads/threads.py">delete</a>(thread_id) -> <a href="./src/openai/types/beta/thread_deleted.py">ThreadDeleted</a></code>
240+
- <code title="post /threads/runs">client.beta.threads.<a href="./src/openai/resources/beta/threads/threads.py">create_and_run</a>(\*\*<a href="src/openai/types/beta/thread_create_and_run_params.py">params</a>) -> <a href="./src/openai/types/beta/threads/run.py">Run</a></code>
241+
242+
### Runs
243+
244+
Types:
245+
246+
```python
247+
from openai.types.beta.threads import RequiredActionFunctionToolCall, Run
248+
```
249+
250+
Methods:
251+
252+
- <code title="post /threads/{thread_id}/runs">client.beta.threads.runs.<a href="./src/openai/resources/beta/threads/runs/runs.py">create</a>(thread_id, \*\*<a href="src/openai/types/beta/threads/run_create_params.py">params</a>) -> <a href="./src/openai/types/beta/threads/run.py">Run</a></code>
253+
- <code title="get /threads/{thread_id}/runs/{run_id}">client.beta.threads.runs.<a href="./src/openai/resources/beta/threads/runs/runs.py">retrieve</a>(run_id, \*, thread_id) -> <a href="./src/openai/types/beta/threads/run.py">Run</a></code>
254+
- <code title="post /threads/{thread_id}/runs/{run_id}">client.beta.threads.runs.<a href="./src/openai/resources/beta/threads/runs/runs.py">update</a>(run_id, \*, thread_id, \*\*<a href="src/openai/types/beta/threads/run_update_params.py">params</a>) -> <a href="./src/openai/types/beta/threads/run.py">Run</a></code>
255+
- <code title="get /threads/{thread_id}/runs">client.beta.threads.runs.<a href="./src/openai/resources/beta/threads/runs/runs.py">list</a>(thread_id, \*\*<a href="src/openai/types/beta/threads/run_list_params.py">params</a>) -> <a href="./src/openai/types/beta/threads/run.py">SyncCursorPage[Run]</a></code>
256+
- <code title="post /threads/{thread_id}/runs/{run_id}/cancel">client.beta.threads.runs.<a href="./src/openai/resources/beta/threads/runs/runs.py">cancel</a>(run_id, \*, thread_id) -> <a href="./src/openai/types/beta/threads/run.py">Run</a></code>
257+
- <code title="post /threads/{thread_id}/runs/{run_id}/submit_tool_outputs">client.beta.threads.runs.<a href="./src/openai/resources/beta/threads/runs/runs.py">submit_tool_outputs</a>(run_id, \*, thread_id, \*\*<a href="src/openai/types/beta/threads/run_submit_tool_outputs_params.py">params</a>) -> <a href="./src/openai/types/beta/threads/run.py">Run</a></code>
258+
259+
#### Steps
260+
261+
Types:
262+
263+
```python
264+
from openai.types.beta.threads.runs import (
265+
CodeToolCall,
266+
FunctionToolCall,
267+
MessageCreationStepDetails,
268+
RetrievalToolCall,
269+
RunStep,
270+
ToolCallsStepDetails,
271+
)
272+
```
273+
274+
Methods:
275+
276+
- <code title="get /threads/{thread_id}/runs/{run_id}/steps/{step_id}">client.beta.threads.runs.steps.<a href="./src/openai/resources/beta/threads/runs/steps.py">retrieve</a>(step_id, \*, thread_id, run_id) -> <a href="./src/openai/types/beta/threads/runs/run_step.py">RunStep</a></code>
277+
- <code title="get /threads/{thread_id}/runs/{run_id}/steps">client.beta.threads.runs.steps.<a href="./src/openai/resources/beta/threads/runs/steps.py">list</a>(run_id, \*, thread_id, \*\*<a href="src/openai/types/beta/threads/runs/step_list_params.py">params</a>) -> <a href="./src/openai/types/beta/threads/runs/run_step.py">SyncCursorPage[RunStep]</a></code>
278+
279+
### Messages
280+
281+
Types:
282+
283+
```python
284+
from openai.types.beta.threads import (
285+
MessageContentImageFile,
286+
MessageContentText,
287+
ThreadMessage,
288+
ThreadMessageDeleted,
289+
)
290+
```
291+
292+
Methods:
293+
294+
- <code title="post /threads/{thread_id}/messages">client.beta.threads.messages.<a href="./src/openai/resources/beta/threads/messages/messages.py">create</a>(thread_id, \*\*<a href="src/openai/types/beta/threads/message_create_params.py">params</a>) -> <a href="./src/openai/types/beta/threads/thread_message.py">ThreadMessage</a></code>
295+
- <code title="get /threads/{thread_id}/messages/{message_id}">client.beta.threads.messages.<a href="./src/openai/resources/beta/threads/messages/messages.py">retrieve</a>(message_id, \*, thread_id) -> <a href="./src/openai/types/beta/threads/thread_message.py">ThreadMessage</a></code>
296+
- <code title="post /threads/{thread_id}/messages/{message_id}">client.beta.threads.messages.<a href="./src/openai/resources/beta/threads/messages/messages.py">update</a>(message_id, \*, thread_id, \*\*<a href="src/openai/types/beta/threads/message_update_params.py">params</a>) -> <a href="./src/openai/types/beta/threads/thread_message.py">ThreadMessage</a></code>
297+
- <code title="get /threads/{thread_id}/messages">client.beta.threads.messages.<a href="./src/openai/resources/beta/threads/messages/messages.py">list</a>(thread_id, \*\*<a href="src/openai/types/beta/threads/message_list_params.py">params</a>) -> <a href="./src/openai/types/beta/threads/thread_message.py">SyncCursorPage[ThreadMessage]</a></code>
298+
299+
#### Files
300+
301+
Types:
302+
303+
```python
304+
from openai.types.beta.threads.messages import MessageFile
305+
```
306+
307+
Methods:
308+
309+
- <code title="get /threads/{thread_id}/messages/{message_id}/files/{file_id}">client.beta.threads.messages.files.<a href="./src/openai/resources/beta/threads/messages/files.py">retrieve</a>(file_id, \*, thread_id, message_id) -> <a href="./src/openai/types/beta/threads/messages/message_file.py">MessageFile</a></code>
310+
- <code title="get /threads/{thread_id}/messages/{message_id}/files">client.beta.threads.messages.files.<a href="./src/openai/resources/beta/threads/messages/files.py">list</a>(message_id, \*, thread_id, \*\*<a href="src/openai/types/beta/threads/messages/file_list_params.py">params</a>) -> <a href="./src/openai/types/beta/threads/messages/message_file.py">SyncCursorPage[MessageFile]</a></code>

examples/async_demo.py

100644100755
File mode changed.

examples/azure.py

100644100755
File mode changed.

examples/azure_ad.py

100644100755
File mode changed.

examples/demo.py

100644100755
File mode changed.

examples/module_client.py

100644100755
File mode changed.

pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "openai"
3-
version = "1.0.1"
3+
version = "1.1.0"
44
description = "Client library for the openai API"
55
readme = "README.md"
66
license = "Apache-2.0"

src/openai/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,7 @@ def _reset_client() -> None: # type: ignore[reportUnusedFunction]
329329
_client = None
330330

331331

332+
from ._module_client import beta as beta
332333
from ._module_client import chat as chat
333334
from ._module_client import audio as audio
334335
from ._module_client import edits as edits

src/openai/_client.py

+6
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class OpenAI(SyncAPIClient):
5252
models: resources.Models
5353
fine_tuning: resources.FineTuning
5454
fine_tunes: resources.FineTunes
55+
beta: resources.Beta
5556
with_raw_response: OpenAIWithRawResponse
5657

5758
# client options
@@ -125,6 +126,7 @@ def __init__(
125126
self.models = resources.Models(self)
126127
self.fine_tuning = resources.FineTuning(self)
127128
self.fine_tunes = resources.FineTunes(self)
129+
self.beta = resources.Beta(self)
128130
self.with_raw_response = OpenAIWithRawResponse(self)
129131

130132
@property
@@ -257,6 +259,7 @@ class AsyncOpenAI(AsyncAPIClient):
257259
models: resources.AsyncModels
258260
fine_tuning: resources.AsyncFineTuning
259261
fine_tunes: resources.AsyncFineTunes
262+
beta: resources.AsyncBeta
260263
with_raw_response: AsyncOpenAIWithRawResponse
261264

262265
# client options
@@ -330,6 +333,7 @@ def __init__(
330333
self.models = resources.AsyncModels(self)
331334
self.fine_tuning = resources.AsyncFineTuning(self)
332335
self.fine_tunes = resources.AsyncFineTunes(self)
336+
self.beta = resources.AsyncBeta(self)
333337
self.with_raw_response = AsyncOpenAIWithRawResponse(self)
334338

335339
@property
@@ -466,6 +470,7 @@ def __init__(self, client: OpenAI) -> None:
466470
self.models = resources.ModelsWithRawResponse(client.models)
467471
self.fine_tuning = resources.FineTuningWithRawResponse(client.fine_tuning)
468472
self.fine_tunes = resources.FineTunesWithRawResponse(client.fine_tunes)
473+
self.beta = resources.BetaWithRawResponse(client.beta)
469474

470475

471476
class AsyncOpenAIWithRawResponse:
@@ -481,6 +486,7 @@ def __init__(self, client: AsyncOpenAI) -> None:
481486
self.models = resources.AsyncModelsWithRawResponse(client.models)
482487
self.fine_tuning = resources.AsyncFineTuningWithRawResponse(client.fine_tuning)
483488
self.fine_tunes = resources.AsyncFineTunesWithRawResponse(client.fine_tunes)
489+
self.beta = resources.AsyncBetaWithRawResponse(client.beta)
484490

485491

486492
Client = OpenAI

src/openai/_module_client.py

+7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ def __load__(self) -> resources.Chat:
1212
return _load_client().chat
1313

1414

15+
class BetaProxy(LazyProxy[resources.Beta]):
16+
@override
17+
def __load__(self) -> resources.Beta:
18+
return _load_client().beta
19+
20+
1521
class EditsProxy(LazyProxy[resources.Edits]):
1622
@override
1723
def __load__(self) -> resources.Edits:
@@ -73,6 +79,7 @@ def __load__(self) -> resources.FineTuning:
7379

7480

7581
chat: resources.Chat = ChatProxy().__as_proxied__()
82+
beta: resources.Beta = BetaProxy().__as_proxied__()
7683
edits: resources.Edits = EditsProxy().__as_proxied__()
7784
files: resources.Files = FilesProxy().__as_proxied__()
7885
audio: resources.Audio = AudioProxy().__as_proxied__()

src/openai/_version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# File generated from our OpenAPI spec by Stainless.
22

33
__title__ = "openai"
4-
__version__ = "1.0.1"
4+
__version__ = "1.1.0"

src/openai/cli/_api/chat/completions.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import sys
44
from typing import TYPE_CHECKING, List, Optional, cast
55
from argparse import ArgumentParser
6-
from typing_extensions import NamedTuple
6+
from typing_extensions import Literal, NamedTuple
77

88
from ..._utils import get_client
99
from ..._models import BaseModel
@@ -97,7 +97,9 @@ class CLIChatCompletion:
9797
def create(args: CLIChatCompletionCreateArgs) -> None:
9898
params: CompletionCreateParams = {
9999
"model": args.model,
100-
"messages": [{"role": message.role, "content": message.content} for message in args.message],
100+
"messages": [
101+
{"role": cast(Literal["user"], message.role), "content": message.content} for message in args.message
102+
],
101103
"n": args.n,
102104
"temperature": args.temperature,
103105
"top_p": args.top_p,

src/openai/cli/_api/files.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from typing import TYPE_CHECKING
3+
from typing import TYPE_CHECKING, Any, cast
44
from argparse import ArgumentParser
55

66
from .._utils import get_client, print_model
@@ -55,7 +55,12 @@ def create(args: CLIFileCreateArgs) -> None:
5555
with open(args.file, "rb") as file_reader:
5656
buffer_reader = BufferReader(file_reader.read(), desc="Upload progress")
5757

58-
file = get_client().files.create(file=(args.file, buffer_reader), purpose=args.purpose)
58+
file = get_client().files.create(
59+
file=(args.file, buffer_reader),
60+
# casts required because the API is typed for enums
61+
# but we don't want to validate that here for forwards-compat
62+
purpose=cast(Any, args.purpose),
63+
)
5964
print_model(file)
6065

6166
@staticmethod

src/openai/pagination.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# File generated from our OpenAPI spec by Stainless.
22

33
from typing import Any, List, Generic, TypeVar, Optional, cast
4-
from typing_extensions import Protocol, override, runtime_checkable
4+
from typing_extensions import Literal, Protocol, override, runtime_checkable
55

66
from ._types import ModelT
77
from ._models import BaseModel
@@ -21,7 +21,7 @@ class SyncPage(BaseSyncPage[ModelT], BasePage[ModelT], Generic[ModelT]):
2121
"""Note: no pagination actually occurs yet, this is for forwards-compatibility."""
2222

2323
data: List[ModelT]
24-
object: str
24+
object: Literal["list"]
2525

2626
@override
2727
def _get_page_items(self) -> List[ModelT]:
@@ -40,7 +40,7 @@ class AsyncPage(BaseAsyncPage[ModelT], BasePage[ModelT], Generic[ModelT]):
4040
"""Note: no pagination actually occurs yet, this is for forwards-compatibility."""
4141

4242
data: List[ModelT]
43-
object: str
43+
object: Literal["list"]
4444

4545
@override
4646
def _get_page_items(self) -> List[ModelT]:

src/openai/resources/__init__.py

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# File generated from our OpenAPI spec by Stainless.
22

3+
from .beta import Beta, AsyncBeta, BetaWithRawResponse, AsyncBetaWithRawResponse
34
from .chat import Chat, AsyncChat, ChatWithRawResponse, AsyncChatWithRawResponse
45
from .audio import Audio, AsyncAudio, AudioWithRawResponse, AsyncAudioWithRawResponse
56
from .edits import Edits, AsyncEdits, EditsWithRawResponse, AsyncEditsWithRawResponse
@@ -92,4 +93,8 @@
9293
"AsyncFineTunes",
9394
"FineTunesWithRawResponse",
9495
"AsyncFineTunesWithRawResponse",
96+
"Beta",
97+
"AsyncBeta",
98+
"BetaWithRawResponse",
99+
"AsyncBetaWithRawResponse",
95100
]

src/openai/resources/audio/__init__.py

+10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
# File generated from our OpenAPI spec by Stainless.
22

33
from .audio import Audio, AsyncAudio, AudioWithRawResponse, AsyncAudioWithRawResponse
4+
from .speech import (
5+
Speech,
6+
AsyncSpeech,
7+
SpeechWithRawResponse,
8+
AsyncSpeechWithRawResponse,
9+
)
410
from .translations import (
511
Translations,
612
AsyncTranslations,
@@ -23,6 +29,10 @@
2329
"AsyncTranslations",
2430
"TranslationsWithRawResponse",
2531
"AsyncTranslationsWithRawResponse",
32+
"Speech",
33+
"AsyncSpeech",
34+
"SpeechWithRawResponse",
35+
"AsyncSpeechWithRawResponse",
2636
"Audio",
2737
"AsyncAudio",
2838
"AudioWithRawResponse",

0 commit comments

Comments
 (0)