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