doum_cli/core/
ask.rs

1use crate::llm::Message;
2use crate::llm::client::LLMRequest;
3use crate::system::error::Result;
4use crate::system::Config;
5use crate::system::SystemInfo;
6use crate::llm::{LLMClient, PromptBuilder};
7use crate::cli::ui::{create_spinner, finish_spinner};
8
9/// Ask 모드 핵심 로직
10/// 
11/// 사용자의 질문에 대해 LLM이 답변을 제공합니다.
12pub async fn handle_ask(
13    question: &str,
14    client: &dyn LLMClient,
15    system_info: &SystemInfo,
16    _config: &Config,
17) -> Result<()> {
18    // 프롬프트 빌더 생성
19    let builder = PromptBuilder::new(system_info.clone());
20    
21    // Ask 모드용 메시지 생성
22    let request = LLMRequest {
23        system: builder.build_ask(),
24        messages: vec![Message::user(question)],
25        use_websearch: true,
26    };
27    
28    // 스피너 시작
29    let spinner = create_spinner("AI is generating an answer...");
30    
31    // LLM 호출
32    let response = client.generate(request).await?;
33    
34    // 스피너 완료
35    finish_spinner(spinner, None);
36    
37    // 응답 출력
38    println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
39    println!("{}\n", response);
40    println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
41    
42    Ok(())
43}