Skip to main content

gproxy_protocol/wire/gemini/
embeddings.rs

1//! Gemini embedContent and batchEmbedContents wire shapes. Source: Embeddings.md.
2use super::content::Content;
3use crate::{Rest, WireRequest, WireResponse};
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
7#[serde(rename_all = "camelCase")]
8#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
9#[derive(gproxy_protocol_macros::DeclaredFields)]
10pub struct EmbedContentRequestBody {
11    pub content: Content,
12    #[serde(alias = "task_type")]
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub task_type: Option<GeminiTaskType>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub title: Option<String>,
17    #[serde(alias = "output_dimensionality")]
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub output_dimensionality: Option<i64>,
20    #[serde(alias = "embed_content_config")]
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub embed_content_config: Option<EmbedContentConfig>,
23    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
24    pub rest: Rest,
25}
26pub type EmbedContentRequest = WireRequest<EmbedContentRequestBody>;
27#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
28#[serde(rename_all = "camelCase")]
29#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
30#[derive(gproxy_protocol_macros::DeclaredFields)]
31pub struct EmbedContentResponseBody {
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub embedding: Option<ContentEmbedding>,
34    #[serde(alias = "usage_metadata")]
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub usage_metadata: Option<EmbeddingUsageMetadata>,
37    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
38    pub rest: Rest,
39}
40pub type EmbedContentResponse = WireResponse<EmbedContentResponseBody>;
41#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
42#[serde(rename_all = "camelCase")]
43#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
44#[derive(gproxy_protocol_macros::DeclaredFields)]
45pub struct EmbedContentConfig {
46    #[serde(alias = "document_ocr", skip_serializing_if = "Option::is_none")]
47    pub document_ocr: Option<bool>,
48    #[serde(
49        alias = "audio_track_extraction",
50        skip_serializing_if = "Option::is_none"
51    )]
52    pub audio_track_extraction: Option<bool>,
53    #[serde(alias = "task_type")]
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub task_type: Option<GeminiTaskType>,
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub title: Option<String>,
58    #[serde(alias = "output_dimensionality")]
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub output_dimensionality: Option<i64>,
61    #[serde(alias = "auto_truncate")]
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub auto_truncate: Option<bool>,
64    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
65    pub rest: Rest,
66}
67#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
68#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
69#[derive(gproxy_protocol_macros::DeclaredFields)]
70pub enum GeminiTaskType {
71    #[serde(rename = "TASK_TYPE_UNSPECIFIED")]
72    Unspecified,
73    #[serde(rename = "RETRIEVAL_QUERY")]
74    RetrievalQuery,
75    #[serde(rename = "RETRIEVAL_DOCUMENT")]
76    RetrievalDocument,
77    #[serde(rename = "SEMANTIC_SIMILARITY")]
78    SemanticSimilarity,
79    #[serde(rename = "CLASSIFICATION")]
80    Classification,
81    #[serde(rename = "CLUSTERING")]
82    Clustering,
83    #[serde(rename = "QUESTION_ANSWERING")]
84    QuestionAnswering,
85    #[serde(rename = "FACT_VERIFICATION")]
86    FactVerification,
87    #[serde(rename = "CODE_RETRIEVAL_QUERY")]
88    CodeRetrievalQuery,
89}
90#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
91#[serde(rename_all = "camelCase")]
92#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
93#[derive(gproxy_protocol_macros::DeclaredFields)]
94pub struct ContentEmbedding {
95    #[serde(skip_serializing_if = "Option::is_none")]
96    pub values: Option<Vec<serde_json::Number>>,
97    #[serde(skip_serializing_if = "Option::is_none")]
98    pub shape: Option<Vec<i64>>,
99    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
100    pub rest: Rest,
101}
102#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
103#[serde(rename_all = "camelCase")]
104#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
105#[derive(gproxy_protocol_macros::DeclaredFields)]
106pub struct EmbeddingUsageMetadata {
107    #[serde(alias = "prompt_token_count", skip_serializing_if = "Option::is_none")]
108    pub prompt_token_count: Option<i64>,
109    #[serde(
110        alias = "prompt_token_details",
111        skip_serializing_if = "Option::is_none"
112    )]
113    pub prompt_token_details: Option<Vec<super::count_tokens::ModalityTokenCount>>,
114    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
115    pub rest: Rest,
116}
117#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
118#[serde(rename_all = "camelCase")]
119#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
120#[derive(gproxy_protocol_macros::DeclaredFields)]
121pub struct BatchEmbedContentsRequestBody {
122    pub requests: Vec<BatchEmbedContentRequest>,
123    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
124    pub rest: Rest,
125}
126pub type BatchEmbedContentsRequest = WireRequest<BatchEmbedContentsRequestBody>;
127#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
128#[serde(rename_all = "camelCase")]
129#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
130#[derive(gproxy_protocol_macros::DeclaredFields)]
131pub struct BatchEmbedContentRequest {
132    pub model: String,
133    pub content: Content,
134    #[serde(alias = "task_type")]
135    #[serde(skip_serializing_if = "Option::is_none")]
136    pub task_type: Option<GeminiTaskType>,
137    #[serde(skip_serializing_if = "Option::is_none")]
138    pub title: Option<String>,
139    #[serde(alias = "output_dimensionality")]
140    #[serde(skip_serializing_if = "Option::is_none")]
141    pub output_dimensionality: Option<i64>,
142    #[serde(alias = "embed_content_config")]
143    #[serde(skip_serializing_if = "Option::is_none")]
144    pub embed_content_config: Option<EmbedContentConfig>,
145    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
146    pub rest: Rest,
147}
148#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
149#[serde(rename_all = "camelCase")]
150#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
151#[derive(gproxy_protocol_macros::DeclaredFields)]
152pub struct BatchEmbedContentsResponseBody {
153    #[serde(skip_serializing_if = "Option::is_none")]
154    pub embeddings: Option<Vec<ContentEmbedding>>,
155    #[serde(alias = "usage_metadata")]
156    #[serde(skip_serializing_if = "Option::is_none")]
157    pub usage_metadata: Option<EmbeddingUsageMetadata>,
158    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
159    pub rest: Rest,
160}
161pub type BatchEmbedContentsResponse = WireResponse<BatchEmbedContentsResponseBody>;