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