Skip to main content

gproxy_protocol/protocol/gemini/
embeddings.rs

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