mod args;
use std::io::stdin;
#[tokio::main]
async fn main() {
let cmd_args = args::build_cli();
let mut server = String::new();
if let Some(server_arg) = cmd_args.get_one::<String>("server") {
server.push_str(&server_arg.to_lowercase());
}
let mut token = String::from("NA");
if let Some(cmd_token) = cmd_args.get_one::<String>("token") {
token.clear();
token.push_str(cmd_token);
}
let mut model = String::new();
if let Some(model_arg) = cmd_args.get_one::<String>("model") {
model.push_str(model_arg);
}
let timeout_in_sec = cmd_args
.get_one::<String>("timeout_in_sec")
.expect("Timeout value expected")
.parse::<u64>()
.expect("Expected unsigned int, u8");
if !(server == "ollama" || server == "openai") {
panic!("Unknown AI Server")
}
let mut prompt = String::new();
println!("Enter a prompt for {model}!");
stdin().read_line(&mut prompt).expect("Failed to read line");
let prompt = prompt.trim().to_string();
let mut response = String::new();
if server == "ollama" {
match cargo_ai::ollama_send_request(&model, &prompt, timeout_in_sec).await {
Ok(r) => response.push_str(&r),
Err(e) => {
println!("We have an error {}", e);
}
};
} else if server == "openai" {
match cargo_ai::openai_send_request(&model, &prompt, timeout_in_sec, &token).await {
Ok(r) => response.push_str(&r),
Err(e) => {
println!("We have an error {}", e);
}
};
}
println!("{server} Response: {response}");
}