Skip to main content

gproxy_protocol/wire/gemini/
audio.rs

1//! Shared speech, translation and transcription settings from Generating content.md.
2use crate::Rest;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
6#[serde(rename_all = "camelCase")]
7#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
8#[derive(gproxy_protocol_macros::DeclaredFields)]
9pub struct AudioTranscriptionConfig {
10    #[serde(alias = "language_codes")]
11    #[serde(default, skip_serializing_if = "Option::is_none")]
12    pub language_codes: Option<Vec<String>>,
13    #[serde(alias = "language_auto")]
14    #[serde(default, skip_serializing_if = "Option::is_none")]
15    pub language_auto: Option<LanguageAuto>,
16    #[serde(alias = "language_hints")]
17    #[serde(default, skip_serializing_if = "Option::is_none")]
18    pub language_hints: Option<LanguageHints>,
19    #[serde(alias = "custom_vocabulary")]
20    #[serde(default, skip_serializing_if = "Option::is_none")]
21    pub custom_vocabulary: Option<Vec<String>>,
22    #[serde(alias = "adaptation_phrases")]
23    #[serde(default, skip_serializing_if = "Option::is_none")]
24    pub adaptation_phrases: Option<Vec<String>>,
25    #[serde(alias = "word_timestamp")]
26    #[serde(default, skip_serializing_if = "Option::is_none")]
27    pub word_timestamp: Option<bool>,
28    #[serde(default, skip_serializing_if = "Option::is_none")]
29    pub diarization: Option<bool>,
30    #[serde(default, skip_serializing_if = "Option::is_none")]
31    pub mode: Option<AudioTranscriptionMode>,
32    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
33    pub rest: Rest,
34}
35
36#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
37#[serde(rename_all = "camelCase")]
38#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
39#[derive(gproxy_protocol_macros::DeclaredFields)]
40pub struct LanguageAuto {
41    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
42    pub rest: Rest,
43}
44
45#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
46#[serde(rename_all = "camelCase")]
47#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
48#[derive(gproxy_protocol_macros::DeclaredFields)]
49pub struct LanguageHints {
50    #[serde(alias = "language_codes")]
51    #[serde(default, skip_serializing_if = "Option::is_none")]
52    pub language_codes: Option<Vec<String>>,
53    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
54    pub rest: Rest,
55}
56
57#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
58#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
59#[derive(gproxy_protocol_macros::DeclaredFields)]
60pub enum AudioTranscriptionMode {
61    #[serde(rename = "MODE_UNSPECIFIED")]
62    ModeUnspecified,
63    #[serde(rename = "VERBATIM")]
64    Verbatim,
65    #[serde(rename = "SMART")]
66    Smart,
67}
68
69#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
70#[serde(rename_all = "camelCase")]
71#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
72#[derive(gproxy_protocol_macros::DeclaredFields)]
73pub struct TranslationConfig {
74    #[serde(alias = "echo_target_language")]
75    #[serde(default, skip_serializing_if = "Option::is_none")]
76    pub echo_target_language: Option<bool>,
77    #[serde(alias = "target_language_code")]
78    #[serde(default, skip_serializing_if = "Option::is_none")]
79    pub target_language_code: Option<String>,
80    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
81    pub rest: Rest,
82}
83#[derive(
84    Debug,
85    Clone,
86    PartialEq,
87    Serialize,
88    Deserialize,
89    gproxy_protocol_macros::WireBuilder,
90    gproxy_protocol_macros::DeclaredFields,
91)]
92#[serde(rename_all = "camelCase")]
93#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
94pub struct SpeechMetadata {
95    #[serde(skip_serializing_if = "Option::is_none")]
96    pub speaker: Option<String>,
97    #[serde(skip_serializing_if = "Option::is_none")]
98    pub style: Option<String>,
99    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
100    pub rest: Rest,
101}
102
103#[derive(
104    Debug,
105    Clone,
106    PartialEq,
107    Serialize,
108    Deserialize,
109    gproxy_protocol_macros::WireBuilder,
110    gproxy_protocol_macros::DeclaredFields,
111)]
112#[serde(rename_all = "camelCase")]
113#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
114pub struct AudioTranscription {
115    pub text: String,
116    #[serde(alias = "speaker_label")]
117    #[serde(skip_serializing_if = "Option::is_none")]
118    pub speaker_label: Option<String>,
119    #[serde(skip_serializing_if = "Option::is_none")]
120    pub words: Option<Vec<WordInfo>>,
121    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
122    pub rest: Rest,
123}
124
125#[derive(
126    Debug,
127    Clone,
128    PartialEq,
129    Serialize,
130    Deserialize,
131    gproxy_protocol_macros::WireBuilder,
132    gproxy_protocol_macros::DeclaredFields,
133)]
134#[serde(rename_all = "camelCase")]
135#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
136pub struct WordInfo {
137    pub word: String,
138    #[serde(alias = "start_offset")]
139    #[serde(skip_serializing_if = "Option::is_none")]
140    pub start_offset: Option<String>,
141    #[serde(alias = "end_offset")]
142    #[serde(skip_serializing_if = "Option::is_none")]
143    pub end_offset: Option<String>,
144    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
145    pub rest: Rest,
146}