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
7pub 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 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}