gproxy_protocol/wire/gemini/live/
content.rs1use super::realtime::LiveBlob;
4use super::server::BidiGenerateContentTranscription;
5use crate::Rest;
6use crate::gemini::content::*;
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
10#[serde(rename_all = "camelCase")]
11#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
12#[derive(gproxy_protocol_macros::DeclaredFields)]
13pub struct LiveContent {
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub parts: Option<Vec<LivePart>>,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub role: Option<String>,
18 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
19 pub rest: Rest,
20}
21
22#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
23#[serde(rename_all = "camelCase")]
24#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
25#[derive(gproxy_protocol_macros::DeclaredFields)]
26pub struct LivePart {
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub thought: Option<bool>,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 #[serde(alias = "thought_signature")]
31 pub thought_signature: Option<String>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 #[serde(alias = "part_metadata")]
34 pub part_metadata: Option<Rest>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 #[serde(alias = "media_resolution")]
37 pub media_resolution: Option<MediaResolution>,
38 #[serde(alias = "speech_metadata", skip_serializing_if = "Option::is_none")]
39 pub speech_metadata: Option<crate::gemini::audio::SpeechMetadata>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub text: Option<String>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 #[serde(alias = "inline_data")]
44 pub inline_data: Option<LiveBlob>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 #[serde(alias = "function_call")]
47 pub function_call: Option<FunctionCall>,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 #[serde(alias = "function_response")]
50 pub function_response: Option<FunctionResponse>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 #[serde(alias = "file_data")]
53 pub file_data: Option<FileData>,
54 #[serde(skip_serializing_if = "Option::is_none")]
55 #[serde(alias = "executable_code")]
56 pub executable_code: Option<ExecutableCode>,
57 #[serde(skip_serializing_if = "Option::is_none")]
58 #[serde(alias = "code_execution_result")]
59 pub code_execution_result: Option<CodeExecutionResult>,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 #[serde(alias = "tool_call")]
62 pub tool_call: Option<ToolCall>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 #[serde(alias = "tool_response")]
65 pub tool_response: Option<ToolResponse>,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 #[serde(alias = "video_metadata")]
68 pub video_metadata: Option<VideoMetadata>,
69 #[serde(
70 alias = "audio_transcription",
71 default,
72 skip_serializing_if = "Option::is_none"
73 )]
74 pub audio_transcription: Option<BidiGenerateContentTranscription>,
75 #[serde(
76 alias = "media_processing",
77 default,
78 skip_serializing_if = "Option::is_none"
79 )]
80 pub media_processing: Option<LiveMediaProcessing>,
81 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
82 pub rest: Rest,
83}
84
85pub use crate::gemini::content::MediaProcessing as LiveMediaProcessing;