Skip to main content

gproxy_protocol/openai/audio/
response.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4use crate::openai::common::Rest;
5
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7#[serde(untagged)]
8pub enum TranscriptionResponse {
9    Verbose(TranscriptionVerbose),
10    Diarized(TranscriptionDiarized),
11    Json(Transcription),
12    Text(String),
13    Raw(Value),
14}
15
16#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
17#[serde(untagged)]
18pub enum TranslationResponse {
19    Verbose(TranslationVerbose),
20    Json(Translation),
21    Text(String),
22    Raw(Value),
23}
24
25#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
26#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
27pub struct Transcription {
28    pub text: String,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub languages: Option<Vec<TranscriptionLanguage>>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub logprobs: Option<Vec<TranscriptionLogprob>>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub usage: Option<AudioUsage>,
35    #[serde(default, flatten)]
36    pub rest: Rest,
37}
38
39#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
40#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
41pub struct TranscriptionVerbose {
42    pub duration: f64,
43    pub language: String,
44    pub text: String,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub task: Option<String>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub segments: Option<Vec<TranscriptionSegment>>,
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub usage: Option<AudioDurationUsage>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub words: Option<Vec<TranscriptionWord>>,
53    #[serde(default, flatten)]
54    pub rest: Rest,
55}
56
57#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
58#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
59pub struct TranscriptionDiarized {
60    pub duration: f64,
61    pub segments: Vec<TranscriptionDiarizedSegment>,
62    pub task: String,
63    pub text: String,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub usage: Option<AudioUsage>,
66    #[serde(default, flatten)]
67    pub rest: Rest,
68}
69
70#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
71#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
72pub struct Translation {
73    pub text: String,
74    #[serde(default, flatten)]
75    pub rest: Rest,
76}
77
78#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
79#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
80pub struct TranslationVerbose {
81    pub duration: f64,
82    pub language: String,
83    pub text: String,
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub segments: Option<Vec<TranscriptionSegment>>,
86    #[serde(default, flatten)]
87    pub rest: Rest,
88}
89
90#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
91#[serde(untagged)]
92pub enum AudioUsage {
93    Tokens(AudioTokenUsage),
94    Duration(AudioDurationUsage),
95    Raw(Value),
96}
97
98#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
99#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
100pub struct AudioTokenUsage {
101    pub input_tokens: u64,
102    pub output_tokens: u64,
103    pub total_tokens: u64,
104    #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
105    pub type_: Option<AudioTokenUsageType>,
106    #[serde(skip_serializing_if = "Option::is_none")]
107    pub input_token_details: Option<AudioInputTokenDetails>,
108    #[serde(default, flatten)]
109    pub rest: Rest,
110}
111
112#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
113pub enum AudioTokenUsageType {
114    #[serde(rename = "tokens")]
115    Tokens,
116}
117
118#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
119#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
120pub struct AudioDurationUsage {
121    pub seconds: f64,
122    #[serde(rename = "type")]
123    pub type_: AudioDurationUsageType,
124    #[serde(default, flatten)]
125    pub rest: Rest,
126}
127
128#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
129pub enum AudioDurationUsageType {
130    #[serde(rename = "duration")]
131    Duration,
132}
133
134#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
135#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
136pub struct AudioInputTokenDetails {
137    #[serde(skip_serializing_if = "Option::is_none")]
138    pub audio_tokens: Option<u64>,
139    #[serde(skip_serializing_if = "Option::is_none")]
140    pub text_tokens: Option<u64>,
141    #[serde(default, flatten)]
142    pub rest: Rest,
143}
144
145#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
146#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
147pub struct TranscriptionLanguage {
148    pub code: String,
149    #[serde(default, flatten)]
150    pub rest: Rest,
151}
152
153#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
154#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
155pub struct TranscriptionLogprob {
156    #[serde(skip_serializing_if = "Option::is_none")]
157    pub token: Option<String>,
158    #[serde(skip_serializing_if = "Option::is_none")]
159    pub bytes: Option<Vec<u8>>,
160    #[serde(skip_serializing_if = "Option::is_none")]
161    pub logprob: Option<f64>,
162    #[serde(default, flatten)]
163    pub rest: Rest,
164}
165
166#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
167#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
168pub struct TranscriptionSegment {
169    pub id: u64,
170    pub avg_logprob: f64,
171    pub compression_ratio: f64,
172    pub end: f64,
173    pub no_speech_prob: f64,
174    pub seek: u64,
175    pub start: f64,
176    pub temperature: f64,
177    pub text: String,
178    pub tokens: Vec<u64>,
179    #[serde(default, flatten)]
180    pub rest: Rest,
181}
182
183#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
184#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
185pub struct TranscriptionWord {
186    pub end: f64,
187    pub start: f64,
188    pub word: String,
189    #[serde(default, flatten)]
190    pub rest: Rest,
191}
192
193#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
194#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
195pub struct TranscriptionDiarizedSegment {
196    pub id: String,
197    pub end: f64,
198    pub speaker: String,
199    pub start: f64,
200    pub text: String,
201    #[serde(rename = "type")]
202    pub type_: TranscriptionSegmentType,
203    #[serde(default, flatten)]
204    pub rest: Rest,
205}
206
207#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
208pub enum TranscriptionSegmentType {
209    #[serde(rename = "transcript.text.segment")]
210    TranscriptTextSegment,
211}