gproxy_protocol/gemini/generate_content/
request.rs1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::gemini::generate_content::types::{
6 GeminiContent, GeminiGenerationConfig, GeminiSafetySetting, GeminiTool, GeminiToolConfig,
7 HttpMethod,
8};
9
10#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
12pub struct GeminiGenerateContentRequest {
13 pub method: HttpMethod,
15 pub path: PathParameters,
17 pub query: QueryParameters,
19 pub headers: RequestHeaders,
21 pub body: RequestBody,
23}
24
25impl Default for GeminiGenerateContentRequest {
26 fn default() -> Self {
27 Self {
28 method: HttpMethod::Post,
29 path: PathParameters::default(),
30 query: QueryParameters::default(),
31 headers: RequestHeaders::default(),
32 body: RequestBody::default(),
33 }
34 }
35}
36
37#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
38pub struct PathParameters {
39 pub model: String,
41}
42
43#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
45pub struct QueryParameters {}
46
47#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
49pub struct RequestHeaders {
50 #[serde(flatten, default, skip_serializing_if = "BTreeMap::is_empty")]
51 pub extra: BTreeMap<String, String>,
52}
53
54#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
55pub struct RequestBody {
56 pub contents: Vec<GeminiContent>,
58 #[serde(default, skip_serializing_if = "Option::is_none")]
60 pub tools: Option<Vec<GeminiTool>>,
61 #[serde(
63 rename = "toolConfig",
64 default,
65 skip_serializing_if = "Option::is_none"
66 )]
67 pub tool_config: Option<GeminiToolConfig>,
68 #[serde(
70 rename = "safetySettings",
71 default,
72 skip_serializing_if = "Option::is_none"
73 )]
74 pub safety_settings: Option<Vec<GeminiSafetySetting>>,
75 #[serde(
77 rename = "systemInstruction",
78 default,
79 skip_serializing_if = "Option::is_none"
80 )]
81 pub system_instruction: Option<GeminiContent>,
82 #[serde(
84 rename = "generationConfig",
85 default,
86 skip_serializing_if = "Option::is_none"
87 )]
88 pub generation_config: Option<GeminiGenerationConfig>,
89 #[serde(
91 rename = "cachedContent",
92 default,
93 skip_serializing_if = "Option::is_none"
94 )]
95 pub cached_content: Option<String>,
96 #[serde(default, skip_serializing_if = "Option::is_none")]
98 pub store: Option<bool>,
99}