doum_cli/core/
ask.rs

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
9/// Provide answer of the question using Ask mode
10pub 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    // Start spinner
25    let spinner = create_spinner("AI is generating an answer...");
26
27    // Generate response
28    let response = client.generate(request).await?;
29
30    // End spinner
31    finish_spinner(spinner, None);
32
33    // 응답 출력
34    println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
35    println!("{}\n", response);
36    println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
37
38    Ok(())
39}