Skip to main content

google_gemini_rs/google/
common.rs

1//! Common types and wrappers for Google AI Models. See: https://ai.google.dev/api/generate-content
2
3use enum_iterator::Sequence;
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6
7#[derive(Debug, Clone, Serialize, Deserialize, Sequence)]
8#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
9pub enum HarmCategory {
10    HarmCategoryHarassment,
11    HarmCategoryHateSpeech,
12    HarmCategorySexuallyExplicit,
13    HarmCategoryDangerousContent,
14    HarmCategoryCivicIntegrity,
15}
16
17#[derive(Clone, Debug, Serialize, Deserialize, Default)]
18#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
19pub enum HarmProbability {
20    HarmProbabilityUnspecified,
21    Negligible,
22    #[default]
23    Low,
24    Medium,
25    High,
26}
27
28#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
29#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
30pub enum Modality {
31    ModalityUnspecified,
32    Text,
33    Image,
34    Audio,
35    Video,
36}
37
38#[derive(Debug, Clone, Serialize, Deserialize)]
39#[serde(rename_all = "camelCase")]
40pub struct Blob {
41    pub mime_type: String,
42    pub data: String,
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
46#[serde(rename_all = "camelCase")]
47pub struct FileData {
48    pub mime_type: String,
49    pub file_uri: String,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
53#[serde(rename_all = "camelCase")]
54pub struct FunctionCall {
55    #[serde(default)]
56    pub id: Option<String>,
57    pub name: String,
58    #[serde(default)]
59    pub args: Option<serde_json::Map<String, Value>>,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
63#[serde(rename_all = "camelCase")]
64pub struct FunctionResponse {
65    pub id: Option<String>,
66    pub name: String,
67    pub response: serde_json::Map<String, Value>,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
71#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
72pub enum Language {
73    Python,
74    LanguageUnspecified,
75}
76
77#[derive(Debug, Clone, Serialize, Deserialize)]
78#[serde(rename_all = "camelCase")]
79pub struct ExecutableCode {
80    pub language: Language,
81    pub code: String,
82}
83
84#[derive(Debug, Clone, Serialize, Deserialize)]
85#[serde(rename_all = "camelCase")]
86pub enum Outcome {
87    OutcomeUnspecified,
88    OutcomeOk,
89    OutcomeFailed,
90    OutcomeDeadlineExceeded,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
94#[serde(rename_all = "camelCase")]
95pub struct CodeExecutionResult {
96    pub outcome: Outcome,
97    pub output: String,
98}
99
100#[derive(Debug, Clone, Serialize, Deserialize)]
101#[serde(rename_all = "camelCase")]
102pub enum Part {
103    Thought(bool),
104    Text(String),
105    InlineData(Blob),
106    FunctionCall(FunctionCall),
107    FunctionResponse(FunctionResponse),
108    FileData(FileData),
109    ExecutableCode(ExecutableCode),
110    CodeExecutionResult(CodeExecutionResult),
111}
112
113#[derive(Debug, Clone, Serialize, Deserialize, Default)]
114#[serde(rename_all = "lowercase")]
115pub enum Role {
116    #[default]
117    User,
118    Model,
119}
120
121#[derive(Debug, Clone, Serialize, Deserialize, Default)]
122#[serde(rename_all = "camelCase")]
123pub struct Content {
124    #[serde(default)]
125    pub parts: Vec<Part>,
126    pub role: Role,
127}