dynamo_async_openai/
audio.rs1use bytes::Bytes;
12
13use crate::{
14 Client,
15 config::Config,
16 error::OpenAIError,
17 types::{
18 CreateSpeechRequest, CreateSpeechResponse, CreateTranscriptionRequest,
19 CreateTranscriptionResponseJson, CreateTranscriptionResponseVerboseJson,
20 CreateTranslationRequest, CreateTranslationResponseJson,
21 CreateTranslationResponseVerboseJson,
22 },
23};
24
25pub struct Audio<'c, C: Config> {
28 client: &'c Client<C>,
29}
30
31impl<'c, C: Config> Audio<'c, C> {
32 pub fn new(client: &'c Client<C>) -> Self {
33 Self { client }
34 }
35
36 #[crate::byot(
38 T0 = Clone,
39 R = serde::de::DeserializeOwned,
40 where_clause = "reqwest::multipart::Form: crate::traits::AsyncTryFrom<T0, Error = OpenAIError>",
41 )]
42 pub async fn transcribe(
43 &self,
44 request: CreateTranscriptionRequest,
45 ) -> Result<CreateTranscriptionResponseJson, OpenAIError> {
46 self.client
47 .post_form("/audio/transcriptions", request)
48 .await
49 }
50
51 #[crate::byot(
53 T0 = Clone,
54 R = serde::de::DeserializeOwned,
55 where_clause = "reqwest::multipart::Form: crate::traits::AsyncTryFrom<T0, Error = OpenAIError>",
56 )]
57 pub async fn transcribe_verbose_json(
58 &self,
59 request: CreateTranscriptionRequest,
60 ) -> Result<CreateTranscriptionResponseVerboseJson, OpenAIError> {
61 self.client
62 .post_form("/audio/transcriptions", request)
63 .await
64 }
65
66 pub async fn transcribe_raw(
68 &self,
69 request: CreateTranscriptionRequest,
70 ) -> Result<Bytes, OpenAIError> {
71 self.client
72 .post_form_raw("/audio/transcriptions", request)
73 .await
74 }
75
76 #[crate::byot(
78 T0 = Clone,
79 R = serde::de::DeserializeOwned,
80 where_clause = "reqwest::multipart::Form: crate::traits::AsyncTryFrom<T0, Error = OpenAIError>",
81 )]
82 pub async fn translate(
83 &self,
84 request: CreateTranslationRequest,
85 ) -> Result<CreateTranslationResponseJson, OpenAIError> {
86 self.client.post_form("/audio/translations", request).await
87 }
88
89 #[crate::byot(
91 T0 = Clone,
92 R = serde::de::DeserializeOwned,
93 where_clause = "reqwest::multipart::Form: crate::traits::AsyncTryFrom<T0, Error = OpenAIError>",
94 )]
95 pub async fn translate_verbose_json(
96 &self,
97 request: CreateTranslationRequest,
98 ) -> Result<CreateTranslationResponseVerboseJson, OpenAIError> {
99 self.client.post_form("/audio/translations", request).await
100 }
101
102 pub async fn translate_raw(
104 &self,
105 request: CreateTranslationRequest,
106 ) -> Result<Bytes, OpenAIError> {
107 self.client
108 .post_form_raw("/audio/translations", request)
109 .await
110 }
111
112 pub async fn speech(
114 &self,
115 request: CreateSpeechRequest,
116 ) -> Result<CreateSpeechResponse, OpenAIError> {
117 let bytes = self.client.post_raw("/audio/speech", request).await?;
118
119 Ok(CreateSpeechResponse { bytes })
120 }
121}