Skip to main content

async_openai/audio/
transcriptions.rs

1use 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    /// Transcribes audio into the input language.
29    #[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    /// Transcribes audio into the input language.
72    #[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    /// Transcribes audio into the input language.
87    #[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    /// Transcribes audio into the input language.
102    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}