doum_cli/cli/
auto_mode.rs

1use super::ask::handle_ask_command;
2use super::suggest::handle_suggest_command;
3use crate::llm::client::LLMRequest;
4use crate::llm::{LLMMessage, PromptBuilder, create_client, parse_auto_mode};
5use crate::system::{get_system_info, load_config};
6use anyhow::Result;
7use cliclack::spinner;
8
9pub async fn handle_auto_command(input: &str) -> Result<()> {
10    let config = load_config()?;
11    let client = create_client(&config.llm)?;
12    let system_info = get_system_info();
13    let builder = PromptBuilder::new(system_info.clone());
14
15    let sp = spinner();
16    sp.start("[AUTO MODE] Selecting mode...");
17
18    let llm_request = LLMRequest {
19        system: builder.build_auto_mode(),
20        messages: vec![LLMMessage::user(input)],
21    };
22
23    let mode_response = client.generate_with_parser(llm_request, parse_auto_mode).await?;
24
25    sp.stop("");
26
27    // Execute based on selected mode
28    match mode_response.mode.as_str() {
29        "ask" => handle_ask_command(input).await,
30        "suggest" => handle_suggest_command(input).await,
31        unknown => {
32            println!("⚠️  Unknown mode: {}", unknown);
33            println!("💡 Falling back to Ask mode.\n");
34            handle_ask_command(input).await
35        }
36    }
37}