1use 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}