(
chat_msgs: Vec<ChatCompletionRequestMessage>,
)
| 274 | |
| 275 | |
| 276 | pub async fn generate_program_by_chat( |
| 277 | chat_msgs: Vec<ChatCompletionRequestMessage>, |
| 278 | ) -> Result<(Program, TokenUsage)> { |
| 279 | let (content, usage) = if get_config().deepseek_reasoning { |
| 280 | let request = create_reasoning_chat_request(chat_msgs, None)?; |
| 281 | let response = get_reasoning_chat_response(request).await?; |
| 282 | let usage = TokenUsage::from_raw_response(&response); |
| 283 | let content = response["choices"][0]["message"]["content"].as_str().ok_or(eyre::eyre!("Empty response content"))?.to_string(); |
| 284 | (content, usage) |
| 285 | } else { |
| 286 | let request = create_chat_request(chat_msgs, None)?; |
| 287 | let respond = get_chat_response(request).await?; |
| 288 | let usage = TokenUsage::from_response(&respond); |
| 289 | let choice = respond.choices.first().unwrap(); |
| 290 | let content = choice.message.content.as_ref().ok_or(eyre::eyre!("Empty response content"))?.to_string(); |
| 291 | (content, usage) |
| 292 | }; |
| 293 | let content = strip_code_wrapper(&content); |
| 294 | let program = Program::new(&content); |
| 295 | Ok((program, usage)) |
| 296 | } |
| 297 | |
| 298 | |
| 299 | fn strip_code_prefix<'a>(input: &'a str, pat: &str) -> &'a str { |
no test coverage detected