swiftide_integrations/dashscope/
simple_prompt.rs1use async_openai::types::{ChatCompletionRequestUserMessageArgs, CreateChatCompletionRequestArgs};
2use async_trait::async_trait;
3use swiftide_core::{chat_completion::errors::LanguageModelError, prompt::Prompt, SimplePrompt};
4
5use crate::openai::openai_error_to_language_model_error;
6
7use super::Dashscope;
8use anyhow::{Context as _, Result};
9
10#[async_trait]
11impl SimplePrompt for Dashscope {
12 async fn prompt(&self, prompt: Prompt) -> Result<String, LanguageModelError> {
13 let model = self
14 .default_options
15 .prompt_model
16 .as_ref()
17 .context("Model not set")?
18 .to_string();
19
20 let request = CreateChatCompletionRequestArgs::default()
21 .model(model)
22 .messages(vec![ChatCompletionRequestUserMessageArgs::default()
23 .content(prompt.render()?)
24 .build()
25 .map_err(openai_error_to_language_model_error)?
26 .into()])
27 .build()
28 .map_err(openai_error_to_language_model_error)?;
29
30 tracing::debug!(
31 messages =
32 serde_json::to_string_pretty(&request).map_err(LanguageModelError::permanent)?,
33 "[SimplePrompt] Request to qwen"
34 );
35
36 let mut response = self
37 .client
38 .chat()
39 .create(request)
40 .await
41 .map_err(openai_error_to_language_model_error)?;
42
43 tracing::debug!(
44 response =
45 serde_json::to_string_pretty(&response).map_err(LanguageModelError::permanent)?,
46 "[SimplePrompt] Response from qwen"
47 );
48
49 response
50 .choices
51 .remove(0)
52 .message
53 .content
54 .take()
55 .ok_or(LanguageModelError::PermanentError(
56 "Expected content in response".into(),
57 ))
58 }
59}