use crate::Rest;
use serde::{Deserialize, Serialize};
fn deserialize_present_value<'de, D>(deserializer: D) -> Result<Option<serde_json::Value>, D::Error>
where
D: serde::Deserializer<'de>,
{
Ok(Some(serde_json::Value::deserialize(deserializer)?))
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum Modality {
#[serde(rename = "MODALITY_UNSPECIFIED")]
Unspecified,
#[serde(rename = "TEXT")]
Text,
#[serde(rename = "IMAGE")]
Image,
#[serde(rename = "VIDEO")]
Video,
#[serde(rename = "AUDIO")]
Audio,
#[serde(rename = "DOCUMENT")]
Document,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum SchemaType {
#[serde(rename = "TYPE_UNSPECIFIED")]
Unspecified,
#[serde(rename = "STRING")]
String,
#[serde(rename = "NUMBER")]
Number,
#[serde(rename = "INTEGER")]
Integer,
#[serde(rename = "BOOLEAN")]
Boolean,
#[serde(rename = "ARRAY")]
Array,
#[serde(rename = "OBJECT")]
Object,
#[serde(rename = "NULL")]
Null,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum HarmCategory {
#[serde(rename = "HARM_CATEGORY_UNSPECIFIED")]
Unspecified,
#[serde(rename = "HARM_CATEGORY_HARASSMENT")]
Harassment,
#[serde(rename = "HARM_CATEGORY_HATE_SPEECH")]
HateSpeech,
#[serde(rename = "HARM_CATEGORY_SEXUALLY_EXPLICIT")]
SexuallyExplicit,
#[serde(rename = "HARM_CATEGORY_DANGEROUS_CONTENT")]
DangerousContent,
#[serde(rename = "HARM_CATEGORY_CIVIC_INTEGRITY")]
CivicIntegrity,
#[serde(rename = "HARM_CATEGORY_DEROGATORY")]
Derogatory,
#[serde(rename = "HARM_CATEGORY_TOXICITY")]
Toxicity,
#[serde(rename = "HARM_CATEGORY_VIOLENCE")]
Violence,
#[serde(rename = "HARM_CATEGORY_SEXUAL")]
Sexual,
#[serde(rename = "HARM_CATEGORY_MEDICAL")]
Medical,
#[serde(rename = "HARM_CATEGORY_DANGEROUS")]
Dangerous,
#[serde(rename = "HARM_CATEGORY_JAILBREAK")]
Jailbreak,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum HarmBlockThreshold {
#[serde(rename = "HARM_BLOCK_THRESHOLD_UNSPECIFIED")]
Unspecified,
#[serde(rename = "BLOCK_LOW_AND_ABOVE")]
BlockLowAndAbove,
#[serde(rename = "BLOCK_MEDIUM_AND_ABOVE")]
BlockMediumAndAbove,
#[serde(rename = "BLOCK_ONLY_HIGH")]
BlockOnlyHigh,
#[serde(rename = "BLOCK_NONE")]
BlockNone,
#[serde(rename = "OFF")]
Off,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum FunctionCallingMode {
#[serde(rename = "MODE_UNSPECIFIED")]
Unspecified,
#[serde(rename = "AUTO")]
Auto,
#[serde(rename = "ANY")]
Any,
#[serde(rename = "NONE")]
None,
#[serde(rename = "VALIDATED")]
Validated,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum Behavior {
#[serde(rename = "UNSPECIFIED")]
Unspecified,
#[serde(rename = "BLOCKING")]
Blocking,
#[serde(rename = "NON_BLOCKING")]
NonBlocking,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum Scheduling {
#[serde(rename = "SCHEDULING_UNSPECIFIED")]
Unspecified,
#[serde(rename = "SILENT")]
Silent,
#[serde(rename = "WHEN_IDLE")]
WhenIdle,
#[serde(rename = "INTERRUPT")]
Interrupt,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum Language {
#[serde(rename = "LANGUAGE_UNSPECIFIED")]
Unspecified,
#[serde(rename = "PYTHON")]
Python,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum Outcome {
#[serde(rename = "OUTCOME_UNSPECIFIED")]
Unspecified,
#[serde(rename = "OUTCOME_OK")]
Ok,
#[serde(rename = "OUTCOME_FAILED")]
Failed,
#[serde(rename = "OUTCOME_DEADLINE_EXCEEDED")]
DeadlineExceeded,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum ToolType {
#[serde(rename = "TOOL_TYPE_UNSPECIFIED")]
Unspecified,
#[serde(rename = "GOOGLE_SEARCH_WEB")]
GoogleSearchWeb,
#[serde(rename = "GOOGLE_SEARCH_IMAGE")]
GoogleSearchImage,
#[serde(rename = "URL_CONTEXT")]
UrlContext,
#[serde(rename = "GOOGLE_MAPS")]
GoogleMaps,
#[serde(rename = "FILE_SEARCH")]
FileSearch,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum MediaResolutionLevel {
#[serde(rename = "MEDIA_RESOLUTION_UNSPECIFIED")]
Unspecified,
#[serde(rename = "MEDIA_RESOLUTION_LOW")]
Low,
#[serde(rename = "MEDIA_RESOLUTION_MEDIUM")]
Medium,
#[serde(rename = "MEDIA_RESOLUTION_HIGH")]
High,
#[serde(rename = "MEDIA_RESOLUTION_ULTRA_HIGH")]
UltraHigh,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum RetrievalMode {
#[serde(rename = "MODE_UNSPECIFIED")]
Unspecified,
#[serde(rename = "MODE_DYNAMIC")]
Dynamic,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum ComputerEnvironment {
#[serde(rename = "ENVIRONMENT_UNSPECIFIED")]
Unspecified,
#[serde(rename = "ENVIRONMENT_BROWSER")]
Browser,
#[serde(rename = "ENVIRONMENT_MOBILE")]
Mobile,
#[serde(rename = "ENVIRONMENT_DESKTOP")]
Desktop,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct Content {
#[serde(skip_serializing_if = "Option::is_none")]
pub parts: Option<Vec<Part>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct Part {
#[serde(skip_serializing_if = "Option::is_none")]
pub thought: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "thought_signature")]
pub thought_signature: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "part_metadata")]
pub part_metadata: Option<Rest>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "media_resolution")]
pub media_resolution: Option<MediaResolution>,
#[serde(alias = "media_processing", skip_serializing_if = "Option::is_none")]
pub media_processing: Option<MediaProcessing>,
#[serde(alias = "audio_transcription", skip_serializing_if = "Option::is_none")]
pub audio_transcription: Option<super::audio::AudioTranscription>,
#[serde(alias = "speech_metadata", skip_serializing_if = "Option::is_none")]
pub speech_metadata: Option<super::audio::SpeechMetadata>,
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "inline_data")]
pub inline_data: Option<Blob>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "function_call")]
pub function_call: Option<FunctionCall>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "function_response")]
pub function_response: Option<FunctionResponse>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "file_data")]
pub file_data: Option<FileData>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "executable_code")]
pub executable_code: Option<ExecutableCode>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "code_execution_result")]
pub code_execution_result: Option<CodeExecutionResult>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "tool_call")]
pub tool_call: Option<ToolCall>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "tool_response")]
pub tool_response: Option<ToolResponse>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "video_metadata")]
pub video_metadata: Option<VideoMetadata>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct Blob {
#[serde(alias = "mime_type")]
pub mime_type: String,
pub data: String,
#[serde(alias = "display_name", skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct FileData {
#[serde(alias = "file_uri")]
pub file_uri: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "mime_type")]
pub mime_type: Option<String>,
#[serde(alias = "display_name", skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct FunctionCall {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub args: Option<Rest>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct FunctionResponse {
pub name: String,
pub response: Rest,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "parts")]
pub parts: Option<Vec<FunctionResponsePart>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "will_continue")]
pub will_continue: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "scheduling")]
pub scheduling: Option<Scheduling>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct FunctionResponsePart {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "inline_data")]
pub inline_data: Option<Blob>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct ExecutableCode {
pub language: Language,
pub code: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct CodeExecutionResult {
pub outcome: Outcome,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output: Option<String>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct ToolCall {
#[serde(alias = "tool_type")]
pub tool_type: ToolType,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(alias = "tool_name", skip_serializing_if = "Option::is_none")]
pub tool_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub args: Option<Rest>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct ToolResponse {
#[serde(alias = "tool_type")]
pub tool_type: ToolType,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub response: Option<Rest>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct VideoMetadata {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "start_offset")]
pub start_offset: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "end_offset")]
pub end_offset: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fps: Option<f64>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct MediaResolution {
#[serde(skip_serializing_if = "Option::is_none")]
pub level: Option<MediaResolutionLevel>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct Schema {
#[serde(rename = "type")]
pub type_: SchemaType,
#[serde(skip_serializing_if = "Option::is_none")]
pub format: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub nullable: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub r#enum: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "max_items")]
pub max_items: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "min_items")]
pub min_items: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub properties: Option<std::collections::BTreeMap<String, Box<Schema>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub required: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "min_properties")]
pub min_properties: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "max_properties")]
pub max_properties: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "min_length")]
pub min_length: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "max_length")]
pub max_length: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pattern: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default, deserialize_with = "deserialize_present_value")]
pub example: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "any_of")]
pub any_of: Option<Vec<Box<Schema>>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "property_ordering")]
pub property_ordering: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default, deserialize_with = "deserialize_present_value")]
pub default: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub items: Option<Box<Schema>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub minimum: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub maximum: Option<f64>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct FunctionDeclaration {
pub name: String,
pub description: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub behavior: Option<Behavior>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parameters: Option<Schema>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "parameters_json_schema")]
pub parameters_json_schema: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub response: Option<Schema>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "response_json_schema")]
pub response_json_schema: Option<serde_json::Value>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct GoogleSearchRetrieval {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "dynamic_retrieval_config")]
pub dynamic_retrieval_config: Option<DynamicRetrievalConfig>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct DynamicRetrievalConfig {
#[serde(skip_serializing_if = "Option::is_none")]
pub mode: Option<RetrievalMode>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "dynamic_threshold")]
pub dynamic_threshold: Option<f64>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct CodeExecution {
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct GoogleSearch {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "time_range_filter")]
pub time_range_filter: Option<Interval>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "search_types")]
pub search_types: Option<SearchTypes>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct Interval {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "start_time")]
pub start_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "end_time")]
pub end_time: Option<String>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct SearchTypes {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "web_search")]
pub web_search: Option<WebSearch>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "image_search")]
pub image_search: Option<ImageSearch>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct WebSearch {
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct ImageSearch {
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct UrlContext {
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct FileSearch {
#[serde(alias = "file_search_store_names")]
pub file_search_store_names: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "metadata_filter")]
pub metadata_filter: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "top_k")]
pub top_k: Option<i64>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct McpServer {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "streamable_http_transport")]
pub streamable_http_transport: Option<StreamableHttpTransport>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct StreamableHttpTransport {
pub url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub headers: Option<std::collections::BTreeMap<String, String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timeout: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "sse_read_timeout")]
pub sse_read_timeout: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "terminate_on_close")]
pub terminate_on_close: Option<bool>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct ComputerUse {
pub environment: ComputerEnvironment,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "excluded_predefined_functions")]
pub excluded_predefined_functions: Option<Vec<String>>,
#[serde(
alias = "enable_prompt_injection_detection",
skip_serializing_if = "Option::is_none"
)]
pub enable_prompt_injection_detection: Option<bool>,
#[serde(
alias = "disabled_safety_policies",
skip_serializing_if = "Option::is_none"
)]
pub disabled_safety_policies: Option<Vec<ComputerUseSafetyPolicy>>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct GoogleMaps {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "enable_widget")]
pub enable_widget: Option<bool>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct Tool {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "function_declarations")]
pub function_declarations: Option<Vec<FunctionDeclaration>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "google_search_retrieval")]
pub google_search_retrieval: Option<GoogleSearchRetrieval>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "code_execution")]
pub code_execution: Option<CodeExecution>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "google_search")]
pub google_search: Option<GoogleSearch>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "computer_use")]
pub computer_use: Option<ComputerUse>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "url_context")]
pub url_context: Option<UrlContext>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "file_search")]
pub file_search: Option<FileSearch>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "mcp_servers")]
pub mcp_servers: Option<Vec<McpServer>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "google_maps")]
pub google_maps: Option<GoogleMaps>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct FunctionCallingConfig {
#[serde(skip_serializing_if = "Option::is_none")]
pub mode: Option<FunctionCallingMode>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "allowed_function_names")]
pub allowed_function_names: Option<Vec<String>>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct ToolConfig {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "function_calling_config")]
pub function_calling_config: Option<FunctionCallingConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "retrieval_config")]
pub retrieval_config: Option<RetrievalConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "include_server_side_tool_invocations")]
pub include_server_side_tool_invocations: Option<bool>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct RetrievalConfig {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "lat_lng")]
pub lat_lng: Option<LatLng>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "language_code")]
pub language_code: Option<String>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct LatLng {
pub latitude: f64,
pub longitude: f64,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct SafetySetting {
pub category: HarmCategory,
pub threshold: HarmBlockThreshold,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum MediaProcessing {
#[serde(rename = "MEDIA_PROCESSING_UNSPECIFIED")]
Unspecified,
#[serde(rename = "STATIC")]
Static,
#[serde(rename = "AGENTIC")]
Agentic,
}
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
Serialize,
Deserialize,
gproxy_protocol_macros::DeclaredFields,
)]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
pub enum ComputerUseSafetyPolicy {
#[serde(rename = "SAFETY_POLICY_UNSPECIFIED")]
Unspecified,
#[serde(rename = "FINANCIAL_TRANSACTIONS")]
FinancialTransactions,
#[serde(rename = "SENSITIVE_DATA_MODIFICATION")]
SensitiveDataModification,
#[serde(rename = "COMMUNICATION_TOOL")]
CommunicationTool,
#[serde(rename = "ACCOUNT_CREATION")]
AccountCreation,
#[serde(rename = "DATA_MODIFICATION")]
DataModification,
#[serde(rename = "USER_CONSENT_MANAGEMENT")]
UserConsentManagement,
#[serde(rename = "LEGAL_TERMS_AND_AGREEMENTS")]
LegalTermsAndAgreements,
}