gemini_ai/content_gen/
forgetful.rs

1use base64::encode;
2use rusty_scrap::Scrap;
3
4use crate::{
5    format::{json, schema, text},
6    GeminiContentGen, Kind,
7};
8
9use super::content::gemini;
10
11#[cfg(feature = "sync")]
12pub fn forgetFul(forgetful: &GeminiContentGen) -> String {
13    let instruction = forgetful.instruction;
14    let t = forgetful.text;
15    let model = forgetful.model;
16    let max_len = forgetful.max_len;
17    match forgetful.config.response {
18        Kind::Text => {
19            let response = text(&forgetful.instruction, &forgetful.text, forgetful.max_len);
20            // println!("{:?}", response);
21            let response = gemini(
22                response,
23                &forgetful.env_variable,
24                forgetful.model,
25                "application/json",
26            );
27            response
28            // String::new()
29        }
30        Kind::Json(jsons) => {
31            let response = json(
32                forgetful.instruction,
33                forgetful.text,
34                &jsons,
35                forgetful.max_len,
36            );
37            // println!("{}", response);
38            let json = gemini(
39                response,
40                &forgetful.env_variable,
41                forgetful.model,
42                "application/json",
43            );
44
45            // let response = serde_json::from_str::<JsonResponse>(&json).unwrap();
46            // println!("{}", json);
47            // String::new()
48            json
49        }
50        Kind::Image(path) => {
51            // let images = fs::read(path).unwrap();
52            // let mut image = Vec::new();
53            // images.read_to_end(&mut image);
54            let encode = encode(path);
55            let response = schema(instruction, t, "image/jpeg", &encode, max_len);
56            gemini(
57                response,
58                &forgetful.env_variable,
59                forgetful.model,
60                "image/jpeg",
61            )
62
63            // String::new()
64        }
65        Kind::Audio(path) => {
66            // let audioo = fs::read(path).unwrap();
67            let audioo = encode(path);
68            // let c = encode(path);
69            let auth = schema(instruction, t, "audio/mpeg", &audioo, max_len);
70            // println!("{}", auth);
71            // let response = upload_uri(path.len(), path, 0, "audio/mpeg");
72            gemini(auth, forgetful.env_variable, forgetful.model, "audio/mpeg");
73
74            String::new()
75        }
76        Kind::Pdf(path) => {
77            // let path = fs::read(path).unwrap();
78
79            let encode = encode(path);
80            let pdf = schema(instruction, t, "application/pdf", &encode, max_len);
81            gemini(
82                pdf,
83                forgetful.env_variable,
84                forgetful.model,
85                "application/pdf",
86            )
87
88            // println!("{}", pdf);
89
90            // String::new()
91        }
92        Kind::Video(path) => {
93            // let videoo = fs::read(path).unwrap();
94            let videoo = encode(path);
95
96            let video = schema(instruction, t, "video/mp4", &videoo, max_len);
97            gemini(video, &forgetful.env_variable, forgetful.model, "video/mp4")
98        }
99        Kind::Transcribe(path) => {
100            // let videoo = fs::read(path).unwrap();
101            let videoo = encode(path);
102
103            let video = schema(instruction, t, "video/mp4", &videoo, max_len);
104            gemini(video, &forgetful.env_variable, forgetful.model, "video/mp4")
105        }
106        Kind::Csv(path) => {
107            // let path = fs::read(path).unwrap();
108            let csv_file = encode(path);
109
110            let send = schema(instruction, t, "text/plain", &csv_file, max_len);
111            gemini(
112                send,
113                forgetful.env_variable,
114                forgetful.model,
115                "application/json",
116            )
117        }
118        Kind::Rag(data) => {
119            let ask = Scrap::new()
120                .urls(data)
121                .build()
122                .element_values()
123                .replace("\"", "");
124            // println!("{}", ask);
125            let encode = encode(ask);
126            let response = schema(instruction, t, "text/plain", &encode, max_len);
127            gemini(
128                response,
129                forgetful.env_variable,
130                forgetful.model,
131                "application/json",
132            )
133        }
134    }
135}
136
137#[cfg(feature = "async")]
138pub async fn forgetFul<'a>(forgetful: &GeminiContentGen<'a>) -> String {
139    let instruction = forgetful.instruction;
140    let t = forgetful.text;
141    let model = forgetful.model;
142    let max_len = forgetful.max_len;
143    match forgetful.config.response {
144        Kind::Text => {
145            let response = text(&forgetful.instruction, &forgetful.text, forgetful.max_len);
146            // println!("{:?}", response);
147            let response = gemini(
148                response,
149                &forgetful.env_variable,
150                forgetful.model,
151                "application/json",
152            )
153            .await;
154            response
155            // String::new()
156        }
157        Kind::Json(jsons) => {
158            let response = json(
159                forgetful.instruction,
160                forgetful.text,
161                &jsons,
162                forgetful.max_len,
163            );
164            // println!("{}", response);
165            let json = gemini(
166                response,
167                &forgetful.env_variable,
168                forgetful.model,
169                "application/json",
170            )
171            .await;
172
173            // let response = serde_json::from_str::<JsonResponse>(&json).unwrap();
174            // println!("{}", json);
175            // String::new()
176            json
177        }
178        Kind::Image(path) => {
179            // let images = fs::read(path).unwrap();
180            // let mut image = Vec::new();
181            // images.read_to_end(&mut image);
182            let encode = encode(path);
183            let response = schema(instruction, t, "image/jpeg", &encode, max_len);
184            gemini(
185                response,
186                &forgetful.env_variable,
187                forgetful.model,
188                "image/jpeg",
189            )
190            .await
191            // String::new()
192        }
193        Kind::Audio(path) => {
194            // let audioo = fs::read(path).unwrap();
195            let audioo = encode(path);
196            // let c = encode(path);
197            let auth = schema(instruction, t, "audio/mpeg", &audioo, max_len);
198            // println!("{}", auth);
199            // let response = upload_uri(path.len(), path, 0, "audio/mpeg");
200            gemini(auth, forgetful.env_variable, forgetful.model, "audio/mpeg");
201
202            String::new()
203        }
204        Kind::Pdf(path) => {
205            // let path = fs::read(path).unwrap();
206
207            let encode = encode(path);
208            let pdf = schema(instruction, t, "application/pdf", &encode, max_len);
209            gemini(
210                pdf,
211                forgetful.env_variable,
212                forgetful.model,
213                "application/pdf",
214            )
215            .await
216            // println!("{}", pdf);
217
218            // String::new()
219        }
220        Kind::Video(path) => {
221            // let videoo = fs::read(path).unwrap();
222            let videoo = encode(path);
223
224            let video = schema(instruction, t, "video/mp4", &videoo, max_len);
225            gemini(video, &forgetful.env_variable, forgetful.model, "video/mp4").await
226        }
227        Kind::Transcribe(path) => {
228            // let videoo = fs::read(path).unwrap();
229            let videoo = encode(path);
230
231            let video = schema(instruction, t, "video/mp4", &videoo, max_len);
232            gemini(video, &forgetful.env_variable, forgetful.model, "video/mp4").await
233        }
234        Kind::Csv(path) => {
235            // let path = fs::read(path).unwrap();
236            let csv_file = encode(path);
237
238            let send = schema(instruction, t, "text/plain", &csv_file, max_len);
239            gemini(
240                send,
241                forgetful.env_variable,
242                forgetful.model,
243                "application/json",
244            )
245            .await
246        }
247        Kind::Rag(data) => {
248            let ask = Scrap::new()
249                .urls(data)
250                .build()
251                .element_values()
252                .replace("\"", "");
253            // println!("{}", ask);
254            let encode = encode(ask);
255            let response = schema(instruction, t, "text/plain", &encode, max_len);
256            gemini(
257                response,
258                forgetful.env_variable,
259                forgetful.model,
260                "application/json",
261            )
262            .await
263        }
264    }
265}