swiftide_integrations/dashscope/
simple_prompt.rs

1use 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}