Skip to main content

gproxy_protocol/gemini/batch_embed_contents/
request.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::gemini::batch_embed_contents::types::{GeminiContent, GeminiTaskType, HttpMethod};
6
7/// Request descriptor for Gemini `models.batchEmbedContents` endpoint.
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9pub struct GeminiBatchEmbedContentsRequest {
10    /// HTTP method.
11    pub method: HttpMethod,
12    /// Path parameters.
13    pub path: PathParameters,
14    /// Query parameters.
15    pub query: QueryParameters,
16    /// Request headers.
17    pub headers: RequestHeaders,
18    /// Request body.
19    pub body: RequestBody,
20}
21
22impl Default for GeminiBatchEmbedContentsRequest {
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    /// Resource name in form `models/{model}`.
37    pub model: String,
38}
39
40/// Proxy-side request model does not carry query parameters.
41#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
42pub struct QueryParameters {}
43
44/// Proxy-side request model does not carry auth headers.
45#[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/// Batch embed request body.
52#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
53pub struct RequestBody {
54    /// Embed requests for this batch.
55    #[serde(default, skip_serializing_if = "Vec::is_empty")]
56    pub requests: Vec<BatchRequestItem>,
57}
58
59/// One `EmbedContentRequest` item inside `batchEmbedContents`.
60#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
61pub struct BatchRequestItem {
62    /// Model name that must match the parent batch model.
63    pub model: String,
64    /// The content to embed. Only `parts.text` is counted.
65    pub content: GeminiContent,
66    /// Optional embedding task type.
67    #[serde(rename = "taskType", default, skip_serializing_if = "Option::is_none")]
68    pub task_type: Option<GeminiTaskType>,
69    /// Optional document title, used with `RETRIEVAL_DOCUMENT`.
70    #[serde(default, skip_serializing_if = "Option::is_none")]
71    pub title: Option<String>,
72    /// Optional reduced embedding dimension.
73    #[serde(
74        rename = "outputDimensionality",
75        default,
76        skip_serializing_if = "Option::is_none"
77    )]
78    pub output_dimensionality: Option<u32>,
79}