async_dashscope/operation/
multi_modal_conversation.rs1use 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 pub async fn call(
34 &self,
35 request: MultiModalConversationParam,
36 ) -> Result<MultiModalConversationOutput> {
37 if request.stream == Some(true) {
39 return Err(DashScopeError::InvalidArgument(
40 "When stream is true, use MultiModalConversation::call_stream".into(),
41 ));
42 }
43
44 let validator = check_model_parameters(&request.model);
46 validator.validate(&request)?;
47
48 self.client
50 .post(MULTIMODAL_CONVERSATION_PATH, request)
51 .await
52 }
53
54 pub async fn call_stream(
68 &self,
69 mut request: MultiModalConversationParam,
70 ) -> Result<MultiModalConversationOutputStream> {
71 if request.stream == Some(false) {
73 return Err(DashScopeError::InvalidArgument(
74 "When stream is false, use MultiModalConversation::call".into(),
75 ));
76 }
77
78 request.stream = Some(true);
80
81 let validator = check_model_parameters(&request.model);
83 validator.validate(&request)?;
84
85 self.client
87 .post_stream(MULTIMODAL_CONVERSATION_PATH, request)
88 .await
89 }
90}