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}