1use crate::cli::ui::{create_spinner, finish_spinner};
2use crate::llm::Message;
3use crate::llm::client::LLMRequest;
4use crate::llm::{LLMClient, PromptBuilder};
5use crate::system::Config;
6use crate::system::SystemInfo;
7use crate::system::error::DoumResult;
8
9pub async fn handle_ask(
11 question: &str,
12 client: &dyn LLMClient,
13 system_info: &SystemInfo,
14 _config: &Config,
15) -> DoumResult<()> {
16 let builder = PromptBuilder::new(system_info.clone());
17
18 let request = LLMRequest {
19 system: builder.build_ask(),
20 messages: vec![Message::user(question)],
21 use_websearch: _config.llm.use_web_search,
22 };
23
24 let spinner = create_spinner("AI is generating an answer...");
26
27 let response = client.generate(request).await?;
29
30 finish_spinner(spinner, None);
32
33 println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
35 println!("{}\n", response);
36 println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
37
38 Ok(())
39}