rusty_gemini/
lib.rs

1use api::{
2    Candidate, ContentEmbedding, GenerationConfig, PromptFeedback, SafetySetting, TaskType, Tool,
3    UsageMetadata,
4};
5use content::Content;
6use serde::{Deserialize, Serialize};
7
8pub mod api;
9pub mod chat;
10pub mod content;
11pub mod schema;
12pub mod grounding;
13pub mod model;
14pub mod error;
15
16pub static BASE_URL: &str = "https://generativelanguage.googleapis.com/v1beta";
17
18#[derive(Debug, Serialize)]
19pub struct GeminiRequest {
20    pub contents: Vec<Content>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub tools: Option<Vec<Tool>>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub safety_settings: Option<Vec<SafetySetting>>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub system_instruction: Option<Content>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub generation_config: Option<GenerationConfig>,
29}
30#[derive(Debug, Deserialize)]
31#[serde(rename_all = "camelCase")]
32pub struct GeminiResponse {
33    pub candidates: Vec<Candidate>,
34    pub usage_metadata: UsageMetadata,
35    pub prompt_feedback: Option<PromptFeedback>,
36}
37
38impl GeminiResponse {
39    pub fn text(&self) -> Option<String> {
40        self.candidates[0].text()
41    }
42}
43
44#[derive(Debug, Clone, Serialize)]
45#[serde(rename_all = "camelCase")]
46pub struct EmbedContentRequest {
47    pub content: Content,
48    #[serde(flatten)]
49    pub config: EmbedContentConfig,
50}
51
52#[derive(Debug, Deserialize)]
53pub struct EmbedContentResponse {
54    pub embedding: ContentEmbedding,
55}
56
57#[derive(Debug, Clone, Serialize, Default)]
58#[serde(rename_all = "camelCase")]
59pub struct EmbedContentConfig {
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub task_type: Option<TaskType>,
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub title: Option<String>,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub output_dimensionality: Option<i32>,
66}
67
68
69#[cfg(test)]
70mod tests {}