gproxy_protocol/wire/gemini/
embeddings.rs1use 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>;