use crate::providers::{ChatCompletionRequest, LLMProvider, Message}; pub async fn generate_topic_description( provider: &dyn LLMProvider, first_user_message: &str, ) -> Result> { let prompt = format!( "请根据用户的第一句话,用简短的词语(不超过15字)描述这个对话的主题或意图。只输出描述内容,不要其他解释。\n\n用户消息:{}", first_user_message ); let request = ChatCompletionRequest { messages: vec![Message::user(prompt)], temperature: Some(0.3), max_tokens: Some(50), tools: None, }; let response = provider.chat(request).await?; let description = response.content.trim().to_string(); if description.is_empty() { return Err("LLM returned empty description".into()); } if description.len() > 50 { Ok(description.chars().take(50).collect()) } else { Ok(description) } }