gem_rs/
api.rs

1/// This module contains constants and types related to the Gemini API.
2///
3/// Gem-rs is a Rust library that serves as a wrapper around the Gemini API,
4/// providing support for streaming. This library is designed to facilitate
5/// interaction with the Gemini API, making it easier to integrate its
6/// functionalities into Rust projects.
7use serde::{Deserialize, Serialize};
8
9/// Base URL for generating content using the Gemini API.
10pub const GENERATE_CONTENT: &str = "https://generativelanguage.googleapis.com/v1beta/models/";
11
12/// Base URL for streaming content generation using the Gemini API.
13pub const STREAM_GENERATE_CONTENT: &str =
14    "https://generativelanguage.googleapis.com/v1beta/models/";
15
16/// Enum representing different Gemini API models.
17///
18/// This enum includes various versions of Gemini models, including experimental
19/// and stable versions. The default model is set to `Gemini15Pro`.
20#[derive(Debug, Clone, Serialize, Deserialize, Default)]
21pub enum Models {
22    /// Experimental Gemini 1.5 Pro model (version 0827)
23    #[deprecated = "Use custom model instead, if you need to use older models"]
24    #[serde(rename = "gemini-1.5-pro-exp-0827")]
25    Gemini15ProExp0827,
26
27    /// Experimental Gemini 1.5 Flash model (version 0827)
28    #[deprecated = "Use custom model instead, if you need to use older models"]
29    #[serde(rename = "gemini-1.5-flash-exp-0827")]
30    Gemini15FlashExp0827,
31
32    /// Experimental Gemini 1.5 Flash 8B model (version 0827)
33    #[deprecated = "Use custom model instead, if you need to use older models"]
34    #[serde(rename = "gemini-1.5-flash-8b-exp-0827")]
35    Gemini15Flash8bExp0827,
36
37    /// Gemini 1.5 Pro model
38    #[deprecated = "Use custom model instead, if you need to use older models"]
39    #[serde(rename = "gemini-1.5-pro")]
40    Gemini15Pro,
41
42    /// Default Gemini 2 Flash Experimental model
43    #[deprecated = "Use custom model instead, if you need to use older models"]
44    #[serde(rename = "gemini-2.0-flash-exp")]
45    Gemini2FlashExp,
46
47    /// Gemini 2 Experimental model
48    #[deprecated = "Use custom model instead, if you need to use older models"]
49    #[serde(rename = "gemini-exp-1206")]
50    Gemini2Exp1206,
51
52    /// Gemini 1.5 Flash model
53    #[deprecated = "Use custom model instead, if you need to use older models"]
54    #[serde(rename = "gemini-1.5-flash")]
55    Gemini15Flash,
56
57    /// Gemini 1.0 Pro model
58    #[deprecated = "Use custom model instead, if you need to use older models"]
59    #[serde(rename = "gemini-1.0-pro")]
60    Gemini10Pro,
61
62    /// Gemma 2 2B IT model
63    #[deprecated = "Use custom model instead, if you need to use older models"]
64    #[serde(rename = "gemma-2-2b-it")]
65    Gemma2_2bIt,
66
67    /// Gemma 2 9B IT model
68    #[deprecated = "Use custom model instead, if you need to use older models"]
69    #[serde(rename = "gemma-2-9b-it")]
70    Gemma2_9bIt,
71
72    /// Gemma 2 27B IT model
73    #[deprecated = "Use custom model instead, if you need to use older models"]
74    #[serde(rename = "gemma-2-27b-it")]
75    Gemma2_27bIt,
76
77    #[serde(rename = "gemini-2.0-flash")]
78    Gemini2Flash,
79
80    #[serde(rename = "gemini-2.0-flash-lite")]
81    Gemini2FlashLite,
82
83    #[serde(rename = "gemini-2.5-pro-preview-03-25")]
84    Gemini25ProPreview0325,
85
86    #[serde(rename = "gemini-2.5-pro-exp-03-25")]
87    Gemini25ProExp0325,
88
89    #[default]
90    #[serde(rename = "gemini-2.5-flash-preview-04-17")]
91    Gemini25FlashPreview0417,
92
93    #[serde(rename = "gemma-3-1b-it")]
94    Gemma3_1b,
95
96    #[serde(rename = "gemma-3-4b-it")]
97    Gemma3_4b,
98
99    #[serde(rename = "gemma-3-12b-it")]
100    Gemma3_12b,
101
102    #[serde(rename = "gemma-3-27b-it")]
103    Gemma3_27b,
104
105    /// Custom model
106    Custom(String),
107}
108
109impl ToString for Models {
110    fn to_string(&self) -> String {
111        match self {
112            Models::Custom(model) => model.to_string().replace("\"", ""),
113            _ => serde_json::to_string(self).unwrap().replace("\"", ""),
114        }
115    }
116}