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")]
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}