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 let response = gemini(
22 response,
23 &forgetful.env_variable,
24 forgetful.model,
25 "application/json",
26 );
27 response
28 }
30 Kind::Json(jsons) => {
31 let response = json(
32 forgetful.instruction,
33 forgetful.text,
34 &jsons,
35 forgetful.max_len,
36 );
37 let json = gemini(
39 response,
40 &forgetful.env_variable,
41 forgetful.model,
42 "application/json",
43 );
44
45 json
49 }
50 Kind::Image(path) => {
51 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 }
65 Kind::Audio(path) => {
66 let audioo = encode(path);
68 let auth = schema(instruction, t, "audio/mpeg", &audioo, max_len);
70 gemini(auth, forgetful.env_variable, forgetful.model, "audio/mpeg");
73
74 String::new()
75 }
76 Kind::Pdf(path) => {
77 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 }
92 Kind::Video(path) => {
93 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 = 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 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 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 let response = gemini(
148 response,
149 &forgetful.env_variable,
150 forgetful.model,
151 "application/json",
152 )
153 .await;
154 response
155 }
157 Kind::Json(jsons) => {
158 let response = json(
159 forgetful.instruction,
160 forgetful.text,
161 &jsons,
162 forgetful.max_len,
163 );
164 let json = gemini(
166 response,
167 &forgetful.env_variable,
168 forgetful.model,
169 "application/json",
170 )
171 .await;
172
173 json
177 }
178 Kind::Image(path) => {
179 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 }
193 Kind::Audio(path) => {
194 let audioo = encode(path);
196 let auth = schema(instruction, t, "audio/mpeg", &audioo, max_len);
198 gemini(auth, forgetful.env_variable, forgetful.model, "audio/mpeg");
201
202 String::new()
203 }
204 Kind::Pdf(path) => {
205 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 }
220 Kind::Video(path) => {
221 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 = 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 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 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}