Skip to main content

gproxy_protocol/gemini/
embeddings.rs

1use serde::{Deserialize, Serialize};
2
3use super::{Content, ModalityTokenCount, TaskType};
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
6#[serde(rename_all = "camelCase")]
7#[derive(gproxy_protocol_macros::WireBuilder)]
8#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
9pub struct EmbedContentRequest {
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub model: Option<String>,
12    pub content: Content,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub task_type: Option<TaskType>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub title: Option<String>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub output_dimensionality: Option<i32>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub embed_content_config: Option<EmbedContentConfig>,
21    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
22    pub rest: serde_json::Map<String, serde_json::Value>,
23}
24
25#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
26#[serde(rename_all = "camelCase")]
27#[derive(gproxy_protocol_macros::WireBuilder)]
28#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
29pub struct EmbedContentConfig {
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub title: Option<String>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub task_type: Option<TaskType>,
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub auto_truncate: Option<bool>,
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub output_dimensionality: Option<i32>,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub document_ocr: Option<bool>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub audio_track_extraction: Option<bool>,
42    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
43    pub rest: serde_json::Map<String, serde_json::Value>,
44}
45
46#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
47#[serde(rename_all = "camelCase")]
48#[derive(gproxy_protocol_macros::WireBuilder)]
49#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
50pub struct EmbedContentResponse {
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub embedding: Option<ContentEmbedding>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub usage_metadata: Option<EmbeddingUsageMetadata>,
55    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
56    pub rest: serde_json::Map<String, serde_json::Value>,
57}
58
59#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
60#[serde(rename_all = "camelCase")]
61#[derive(gproxy_protocol_macros::WireBuilder)]
62#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
63pub struct BatchEmbedContentsRequest {
64    pub requests: Vec<EmbedContentRequest>,
65    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
66    pub rest: serde_json::Map<String, serde_json::Value>,
67}
68
69#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
70#[serde(rename_all = "camelCase")]
71#[derive(gproxy_protocol_macros::WireBuilder)]
72#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
73pub struct BatchEmbedContentsResponse {
74    #[serde(default, skip_serializing_if = "Vec::is_empty")]
75    pub embeddings: Vec<ContentEmbedding>,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub usage_metadata: Option<EmbeddingUsageMetadata>,
78    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
79    pub rest: serde_json::Map<String, serde_json::Value>,
80}
81
82#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
83#[serde(rename_all = "camelCase")]
84#[derive(gproxy_protocol_macros::WireBuilder)]
85#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
86pub struct ContentEmbedding {
87    #[serde(default, skip_serializing_if = "Vec::is_empty")]
88    pub values: Vec<f32>,
89    #[serde(default, skip_serializing_if = "Vec::is_empty")]
90    pub shape: Vec<i32>,
91    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
92    pub rest: serde_json::Map<String, serde_json::Value>,
93}
94
95#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
96#[serde(rename_all = "camelCase")]
97#[derive(gproxy_protocol_macros::WireBuilder)]
98#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
99pub struct EmbeddingUsageMetadata {
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub prompt_token_count: Option<i32>,
102    #[serde(default, skip_serializing_if = "Vec::is_empty")]
103    pub prompt_token_details: Vec<ModalityTokenCount>,
104    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
105    pub rest: serde_json::Map<String, serde_json::Value>,
106}