gproxy_protocol/protocol/gemini/
embeddings.rs1use 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}