doum_cli/core/
suggest.rs

1use crate::llm::client::LLMRequest;
2use crate::llm::retry_with_parse;
3use crate::llm::{LLMClient, Message, PromptBuilder, SuggestResponse, parse_suggest};
4use crate::system::{Config, SystemInfo};
5use anyhow::Result;
6
7/// Provide command suggestions using Suggest mode
8/// Returns the suggestion response for CLI to handle
9pub async fn handle_suggest(
10    request: &str,
11    client: &dyn LLMClient,
12    system_info: &SystemInfo,
13    config: &Config,
14) -> Result<SuggestResponse> {
15    let builder = PromptBuilder::new(system_info.clone());
16
17    // Call LLM to get suggestions
18    let response = retry_with_parse(
19        || {
20            let request = LLMRequest {
21                system: builder.build_suggest(),
22                messages: vec![Message::user(request)],
23                use_websearch: config.llm.use_web_search,
24            };
25            Box::pin(client.generate(request))
26        },
27        parse_suggest,
28        config.llm.max_retries,
29    )
30    .await?;
31
32    Ok(response)
33}