async_dashscope/operation/
multi_modal_conversation.rs

1use crate::error::Result;
2use crate::{error::DashScopeError, operation::validate::check_model_parameters, Client};
3pub use output::*;
4pub use param::{
5    InputBuilder, MessageBuilder, MultiModalConversationParam, MultiModalConversationParamBuilder,
6    MultiModalConversationParamBuilderError,
7};
8
9mod output;
10mod param;
11
12const MULTIMODAL_CONVERSATION_PATH: &str = "/services/aigc/multimodal-generation/generation";
13
14pub struct MultiModalConversation<'a> {
15    client: &'a Client,
16}
17
18impl<'a> MultiModalConversation<'a> {
19    pub fn new(client: &'a Client) -> Self {
20        Self { client }
21    }
22
23    /// 异步调用多模态对话功能。
24    ///
25    /// 此函数用于处理非流式多模态对话请求。如果请求参数中设置了流式处理,将返回错误。
26    ///
27    /// # 参数
28    /// * `request`: 包含多模态对话所需参数的请求对象。
29    ///
30    /// # 返回
31    /// * 成功时返回包含多模态对话输出结果的 `Result`。
32    /// * 如果请求参数中设置了 `stream` 为 `true`,将返回 `InvalidArgument` 错误。
33    pub async fn call(
34        &self,
35        request: MultiModalConversationParam,
36    ) -> Result<MultiModalConversationOutput> {
37        // 检查请求是否为流式处理,如果是,则返回错误。
38        if request.stream == Some(true) {
39            return Err(DashScopeError::InvalidArgument(
40                "When stream is true, use MultiModalConversation::call_stream".into(),
41            ));
42        }
43
44        // Validate parameters before making the request.
45        let validator = check_model_parameters(&request.model);
46        validator.validate(&request)?;
47
48        // 发起非流式多模态对话请求。
49        self.client
50            .post(MULTIMODAL_CONVERSATION_PATH, request)
51            .await
52    }
53
54    /// 异步调用流式多媒体对话功能
55    ///
56    /// 此函数用于处理流式多媒体对话请求。流式请求意味着响应会随着时间的推移逐步返回。
57    ///
58    /// # 参数
59    /// * `request`: 多媒体对话参数。
60    ///
61    /// # 返回
62    /// 返回一个流式输出结果,用于逐步处理和接收对话结果。
63    ///
64    /// # 错误
65    /// 如果 `request` 参数中的 `stream` 属性为 `Some(false)`,
66    /// 函数将返回一个错误,提示用户应使用非流式处理的 `call` 方法。
67    pub async fn call_stream(
68        &self,
69        mut request: MultiModalConversationParam,
70    ) -> Result<MultiModalConversationOutputStream> {
71        // 检查请求是否明确设置为非流式,如果是,则返回错误。
72        if request.stream == Some(false) {
73            return Err(DashScopeError::InvalidArgument(
74                "When stream is false, use MultiModalConversation::call".into(),
75            ));
76        }
77
78        // 确保请求参数配置为流式处理
79        request.stream = Some(true);
80
81        // Validate parameters before making the request.
82        let validator = check_model_parameters(&request.model);
83        validator.validate(&request)?;
84
85        // 发起流式请求并返回结果流
86        self.client
87            .post_stream(MULTIMODAL_CONVERSATION_PATH, request)
88            .await
89    }
90}