gproxy_protocol/gemini/embeddings/
request.rs1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::gemini::embeddings::types::{GeminiContent, GeminiTaskType, HttpMethod};
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9pub struct GeminiEmbedContentRequest {
10 pub method: HttpMethod,
12 pub path: PathParameters,
14 pub query: QueryParameters,
16 pub headers: RequestHeaders,
18 pub body: RequestBody,
20}
21
22impl Default for GeminiEmbedContentRequest {
23 fn default() -> Self {
24 Self {
25 method: HttpMethod::Post,
26 path: PathParameters::default(),
27 query: QueryParameters::default(),
28 headers: RequestHeaders::default(),
29 body: RequestBody::default(),
30 }
31 }
32}
33
34#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
35pub struct PathParameters {
36 pub model: String,
38}
39
40#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
42pub struct QueryParameters {}
43
44#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
46pub struct RequestHeaders {
47 #[serde(flatten, default, skip_serializing_if = "BTreeMap::is_empty")]
48 pub extra: BTreeMap<String, String>,
49}
50
51#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
53pub struct RequestBody {
54 pub content: GeminiContent,
56 #[serde(rename = "taskType", default, skip_serializing_if = "Option::is_none")]
58 pub task_type: Option<GeminiTaskType>,
59 #[serde(default, skip_serializing_if = "Option::is_none")]
61 pub title: Option<String>,
62 #[serde(
64 rename = "outputDimensionality",
65 default,
66 skip_serializing_if = "Option::is_none"
67 )]
68 pub output_dimensionality: Option<u32>,
69}
70
71impl Default for RequestBody {
72 fn default() -> Self {
73 Self {
74 content: GeminiContent {
75 parts: Vec::new(),
76 role: None,
77 },
78 task_type: None,
79 title: None,
80 output_dimensionality: None,
81 }
82 }
83}