use text::text_generator::{TextGenerator, TextGeneratorImpl};
mod config;
pub mod text;
pub struct GeminiRs();
impl GeminiRs {
pub fn new_text_generator(model: String) -> Box<dyn TextGenerator> {
Box::new(TextGeneratorImpl {
uri: build_uri(
config::Config::from_env().unwrap().api_key.to_owned(),
model,
),
})
}
}
fn build_uri(api_key: String, model: String) -> String {
format!(
"https://generativelanguage.googleapis.com/v1beta/models/{}:generateContent?key={}",
model, api_key
)
}
#[cfg(test)]
mod tests {
use text::request::{Content, Part, RequestBody};
use super::*;
#[tokio::test]
async fn test_api_call() {
let gen = GeminiRs::new_text_generator("gemini-1.5-flash-latest".to_owned());
let res = gen
.generate_content(RequestBody {
contents: vec![Content {
parts: vec![Part {
text: "send me a test response".to_owned(),
}],
}],
safety_settings: None,
generation_config: None,
})
.await;
if res.is_ok() {
let text = res.unwrap();
assert!(text.candidates.len() > 0);
return;
}
panic!("Error: {:?}", res.err().unwrap());
}
}