async_openai/audio/
transcriptions.rs1use bytes::Bytes;
2
3use crate::{
4 config::Config,
5 error::OpenAIError,
6 types::audio::{
7 CreateTranscriptionRequest, CreateTranscriptionResponseDiarizedJson,
8 CreateTranscriptionResponseJson, CreateTranscriptionResponseVerboseJson,
9 },
10 Client, RequestOptions,
11};
12
13use crate::types::audio::TranscriptionResponseStream;
14
15pub struct Transcriptions<'c, C: Config> {
16 client: &'c Client<C>,
17 pub(crate) request_options: RequestOptions,
18}
19
20impl<'c, C: Config> Transcriptions<'c, C> {
21 pub fn new(client: &'c Client<C>) -> Self {
22 Self {
23 client,
24 request_options: RequestOptions::new(),
25 }
26 }
27
28 #[crate::byot(
30 T0 = Clone,
31 R = serde::de::DeserializeOwned,
32 where_clause = "reqwest::multipart::Form: crate::traits::AsyncTryFrom<T0, Error = OpenAIError>, T0: crate::traits::MaybeSend + 'static",
33 )]
34 pub async fn create(
35 &self,
36 request: CreateTranscriptionRequest,
37 ) -> Result<CreateTranscriptionResponseJson, OpenAIError> {
38 self.client
39 .post_form("/audio/transcriptions", request, &self.request_options)
40 .await
41 }
42
43 #[crate::byot(
44 T0 = Clone,
45 R = serde::de::DeserializeOwned,
46 stream = "true",
47 where_clause = "R: crate::traits::MaybeSend + 'static, reqwest::multipart::Form: crate::traits::AsyncTryFrom<T0, Error = OpenAIError>, T0: crate::traits::MaybeSend + 'static"
48 )]
49 #[allow(unused_mut)]
50 pub async fn create_stream(
51 &self,
52 mut request: CreateTranscriptionRequest,
53 ) -> Result<TranscriptionResponseStream, OpenAIError> {
54 #[cfg(not(feature = "byot"))]
55 {
56 if let Some(stream) = request.stream {
57 if !stream {
58 return Err(OpenAIError::InvalidArgument(
59 "When stream is not true, use Audio::transcribe".into(),
60 ));
61 }
62 }
63 request.stream = Some(true);
64 }
65
66 self.client
67 .post_form_stream("/audio/transcriptions", request, &self.request_options)
68 .await
69 }
70
71 #[crate::byot(
73 T0 = Clone,
74 R = serde::de::DeserializeOwned,
75 where_clause = "reqwest::multipart::Form: crate::traits::AsyncTryFrom<T0, Error = OpenAIError>, T0: crate::traits::MaybeSend + 'static",
76 )]
77 pub async fn create_verbose_json(
78 &self,
79 request: CreateTranscriptionRequest,
80 ) -> Result<CreateTranscriptionResponseVerboseJson, OpenAIError> {
81 self.client
82 .post_form("/audio/transcriptions", request, &self.request_options)
83 .await
84 }
85
86 #[crate::byot(
88 T0 = Clone,
89 R = serde::de::DeserializeOwned,
90 where_clause = "reqwest::multipart::Form: crate::traits::AsyncTryFrom<T0, Error = OpenAIError>, T0: crate::traits::MaybeSend + 'static",
91 )]
92 pub async fn create_diarized_json(
93 &self,
94 request: CreateTranscriptionRequest,
95 ) -> Result<CreateTranscriptionResponseDiarizedJson, OpenAIError> {
96 self.client
97 .post_form("/audio/transcriptions", request, &self.request_options)
98 .await
99 }
100
101 pub async fn create_raw(
103 &self,
104 request: CreateTranscriptionRequest,
105 ) -> Result<Bytes, OpenAIError> {
106 let (bytes, _headers) = self
107 .client
108 .post_form_raw("/audio/transcriptions", request, &self.request_options)
109 .await?;
110 Ok(bytes)
111 }
112}