gproxy_protocol/protocol/gemini/generate_content/
config.rs1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6use super::super::common::{
7 AudioResponseDelivery, AudioResponseFormatMimeType, ExtraFields, GenerationMediaResolution,
8 ImageAspectRatio, ImageResponseAspectRatio, ImageResponseDelivery, ImageResponseFormatMimeType,
9 ImageResponseSize, ImageSize, ResponseMimeType, ResponseModality, Schema, SpeechConfig,
10 TextResponseFormatMimeType, ThinkingLevel,
11};
12
13#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
14#[serde(rename_all = "camelCase")]
15pub struct GenerationConfig {
16 #[serde(default, skip_serializing_if = "Vec::is_empty")]
17 pub stop_sequences: Vec<String>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub response_mime_type: Option<ResponseMimeType>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub response_schema: Option<Schema>,
22 #[serde(
23 rename = "_responseJsonSchema",
24 skip_serializing_if = "Option::is_none"
25 )]
26 pub private_response_json_schema: Option<Value>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub response_json_schema: Option<Value>,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub response_format: Option<ResponseFormatConfig>,
31 #[serde(default, skip_serializing_if = "Vec::is_empty")]
32 pub response_modalities: Vec<ResponseModality>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub candidate_count: Option<i32>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub max_output_tokens: Option<i32>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub temperature: Option<f64>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub top_p: Option<f64>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub top_k: Option<i32>,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub seed: Option<i64>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub presence_penalty: Option<f64>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub frequency_penalty: Option<f64>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub response_logprobs: Option<bool>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub logprobs: Option<i32>,
53 #[serde(skip_serializing_if = "Option::is_none")]
54 pub enable_enhanced_civic_answers: Option<bool>,
55 #[serde(skip_serializing_if = "Option::is_none")]
56 pub speech_config: Option<SpeechConfig>,
57 #[serde(skip_serializing_if = "Option::is_none")]
58 pub thinking_config: Option<ThinkingConfig>,
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub image_config: Option<ImageConfig>,
61 #[serde(skip_serializing_if = "Option::is_none")]
62 pub media_resolution: Option<GenerationMediaResolution>,
63 #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
64 pub extra: ExtraFields,
65}
66
67#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
68#[serde(rename_all = "camelCase")]
69pub struct ResponseFormatConfig {
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub text: Option<TextResponseFormat>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub audio: Option<AudioResponseFormat>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 pub image: Option<ImageResponseFormat>,
76 #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
77 pub extra: ExtraFields,
78}
79
80#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
81#[serde(rename_all = "camelCase")]
82pub struct TextResponseFormat {
83 #[serde(skip_serializing_if = "Option::is_none")]
84 pub mime_type: Option<TextResponseFormatMimeType>,
85 #[serde(skip_serializing_if = "Option::is_none")]
86 pub schema: Option<Value>,
87 #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
88 pub extra: ExtraFields,
89}
90
91#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
92#[serde(rename_all = "camelCase")]
93pub struct AudioResponseFormat {
94 #[serde(skip_serializing_if = "Option::is_none")]
95 pub mime_type: Option<AudioResponseFormatMimeType>,
96 #[serde(skip_serializing_if = "Option::is_none")]
97 pub delivery: Option<AudioResponseDelivery>,
98 #[serde(skip_serializing_if = "Option::is_none")]
99 pub sample_rate: Option<i32>,
100 #[serde(skip_serializing_if = "Option::is_none")]
101 pub bit_rate: Option<i32>,
102 #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
103 pub extra: ExtraFields,
104}
105
106#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
107#[serde(rename_all = "camelCase")]
108pub struct ImageResponseFormat {
109 #[serde(skip_serializing_if = "Option::is_none")]
110 pub mime_type: Option<ImageResponseFormatMimeType>,
111 #[serde(skip_serializing_if = "Option::is_none")]
112 pub delivery: Option<ImageResponseDelivery>,
113 #[serde(skip_serializing_if = "Option::is_none")]
114 pub aspect_ratio: Option<ImageResponseAspectRatio>,
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub image_size: Option<ImageResponseSize>,
117 #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
118 pub extra: ExtraFields,
119}
120
121#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
122#[serde(rename_all = "camelCase")]
123pub struct ThinkingConfig {
124 #[serde(skip_serializing_if = "Option::is_none")]
125 pub include_thoughts: Option<bool>,
126 #[serde(skip_serializing_if = "Option::is_none")]
127 pub thinking_budget: Option<i32>,
128 #[serde(skip_serializing_if = "Option::is_none")]
129 pub thinking_level: Option<ThinkingLevel>,
130 #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
131 pub extra: ExtraFields,
132}
133
134#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
135#[serde(rename_all = "camelCase")]
136pub struct ImageConfig {
137 #[serde(skip_serializing_if = "Option::is_none")]
138 pub aspect_ratio: Option<ImageAspectRatio>,
139 #[serde(skip_serializing_if = "Option::is_none")]
140 pub image_size: Option<ImageSize>,
141 #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
142 pub extra: ExtraFields,
143}