doum_cli/core/
auto_mode.rs

1use crate::llm::client::LLMRequest;
2use crate::llm::retry_with_parse;
3use crate::llm::{AutoResponse, LLMClient, Message, PromptBuilder, parse_auto_mode};
4use crate::system::{Config, SystemInfo};
5use anyhow::Result;
6
7/// Select mode automatically based on input
8/// Returns the selected mode and original input
9pub async fn select_mode(
10    input: &str,
11    client: &dyn LLMClient,
12    system_info: &SystemInfo,
13    config: &Config,
14) -> Result<AutoResponse> {
15    let builder = PromptBuilder::new(system_info.clone());
16
17    // Request mode selection
18    let response = retry_with_parse(
19        || {
20            let request = LLMRequest {
21                system: builder.build_auto_mode(),
22                messages: vec![Message::user(input)],
23                use_websearch: false,
24            };
25            Box::pin(client.generate(request))
26        },
27        parse_auto_mode,
28        config.llm.max_retries,
29    )
30    .await?;
31
32    Ok(response)
33}