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