use clap::Parser;
use kagi_api::{
config::RecordReplayMode,
v0::{universal_summarizer::Subject, FastGPT, SummaryOptions, UniversalSummarizer},
KagiClient, KagiConfig,
};
use kagi_cli::{render::Render, KagiCommand};
#[tokio::main]
pub async fn main() {
let config = KagiConfig::from_env().unwrap();
let args = kagi_cli::Args::parse();
let reqwest_client = reqwest::Client::new();
let record_replay_mode = match args.replay {
true => RecordReplayMode::Replay,
false => RecordReplayMode::Record,
};
let client = KagiClient::with_replay(config, reqwest_client, record_replay_mode).unwrap();
match args.command.clone() {
KagiCommand::FastGpt { query, cache } => {
let answer = client.fastgpt(&query, cache).await.unwrap();
println!("{}", answer.render(args));
}
KagiCommand::Summarize {
subject,
summary_type,
engine,
target_language,
cache,
} => {
let subject = Subject::url_or_text(subject);
let cache = if cache { None } else { Some(false) };
let options = SummaryOptions {
summary_type,
engine,
target_language,
cache,
};
let summary = client.summarize(subject, options).await.unwrap();
serde_json::to_writer_pretty(std::io::stdout(), &summary).unwrap();
}
KagiCommand::Completion { shell } => {
clap_complete::generate(
shell,
&mut <kagi_cli::Args as clap::CommandFactory>::command(),
"kagi-cli",
&mut std::io::stdout(),
);
}
};
}