gproxy_protocol/wire/gemini/
models.rs1use serde::{Deserialize, Serialize};
2
3use crate::{Rest, WireRequest, WireResponse};
4
5#[derive(
9 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
10)]
11#[serde(rename_all = "camelCase")]
12#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
13#[derive(gproxy_protocol_macros::DeclaredFields)]
14#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
15pub struct ListModelsQuery {
16 #[serde(skip_serializing_if = "Option::is_none")]
17 #[serde(alias = "page_size")]
18 pub page_size: Option<i64>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 #[serde(alias = "page_token")]
21 pub page_token: Option<String>,
22 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
23 pub rest: Rest,
24}
25
26pub type ListModelsRequest = WireRequest<()>;
27pub type GetModelRequest = WireRequest<()>;
28
29#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
30#[serde(rename_all = "camelCase")]
31#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
32#[derive(gproxy_protocol_macros::DeclaredFields)]
33#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
34pub struct ListModelsResponseBody {
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub models: Option<Vec<Model>>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 #[serde(alias = "next_page_token")]
39 pub next_page_token: Option<String>,
40 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
41 pub rest: Rest,
42}
43
44pub type ListModelsResponse = WireResponse<ListModelsResponseBody>;
45pub type GetModelResponse = WireResponse<Model>;
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 Model {
53 pub name: String,
54 #[serde(alias = "base_model_id")]
55 pub base_model_id: String,
56 #[serde(default, skip_serializing_if = "String::is_empty")]
57 pub version: String,
58 #[serde(skip_serializing_if = "Option::is_none")]
59 #[serde(alias = "display_name")]
60 pub display_name: Option<String>,
61 #[serde(skip_serializing_if = "Option::is_none")]
62 pub description: Option<String>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 #[serde(alias = "input_token_limit")]
65 pub input_token_limit: Option<i64>,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 #[serde(alias = "output_token_limit")]
68 pub output_token_limit: Option<i64>,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 #[serde(alias = "supported_generation_methods")]
71 pub supported_generation_methods: Option<Vec<String>>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub thinking: Option<bool>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 pub temperature: Option<f64>,
76 #[serde(skip_serializing_if = "Option::is_none")]
77 #[serde(alias = "max_temperature")]
78 pub max_temperature: Option<f64>,
79 #[serde(skip_serializing_if = "Option::is_none")]
80 #[serde(alias = "top_p")]
81 pub top_p: Option<f64>,
82 #[serde(skip_serializing_if = "Option::is_none")]
83 #[serde(alias = "top_k")]
84 pub top_k: Option<i64>,
85 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
86 pub rest: Rest,
87}