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