Skip to main content

gproxy_protocol/wire/gemini/
models.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{Rest, WireRequest, WireResponse};
4
5/// Request/response shapes for `models.list` and `models.get`.
6/// `page_size` and `page_token` are query parameters; `name` is the
7/// `models/{model}` path resource. Source: `upstream_docs/gemini/docs/Models.md`.
8#[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}