async_dashscope/operation/
multi_modal_conversation.rs1use crate::error::Result;
2use crate::{error::DashScopeError, Client};
3pub use output::*;
4pub use param::{
5 InputBuilder, MessageBuilder, MultiModalConversationParam, MultiModalConversationParamBuilder,
6 MultiModalConversationParamBuilderError,
7};
8
9use super::common::ParametersBuilder;
10mod output;
11mod param;
12
13pub struct MultiModalConversation<'a> {
14 client: &'a Client,
15}
16
17impl<'a> MultiModalConversation<'a> {
18 pub fn new(client: &'a Client) -> Self {
19 Self { client }
20 }
21
22 pub async fn call(
33 &self,
34 request: MultiModalConversationParam,
35 ) -> Result<MultiModalConversationOutput> {
36 if request.stream == Some(true) {
38 return Err(DashScopeError::InvalidArgument(
39 "When stream is true, use MultiModalGeneration::call_stream".into(),
40 ));
41 }
42
43 if request.parameters.is_some() {
45 if let Some(ref parameters) = request.parameters {
46 if parameters.incremental_output == Some(true) {
47 return Err(DashScopeError::InvalidArgument(
48 "When stream is true, use MultiModalGeneration::call_stream".into(),
49 ));
50 }
51 }
52 }
53
54 self.client
56 .post("/services/aigc/multimodal-generation/generation", request)
57 .await
58 }
59
60 pub async fn call_stream(
75 &self,
76 mut request: MultiModalConversationParam,
77 ) -> Result<MultiModalConversationOutputStream> {
78 if request.stream != Some(true) {
80 return Err(DashScopeError::InvalidArgument(
81 "When stream is false, use MultiModalGeneration::call".into(),
82 ));
83 }
84
85 if request.parameters.is_some() {
87 if let Some(ref parameters) = request.parameters {
88 if parameters.incremental_output == Some(false) {
90 return Err(DashScopeError::InvalidArgument(
91 "When stream is false, use MultiModalGeneration::call".into(),
92 ));
93 }
94 }
95 }
96
97 request.parameters = Some(
99 ParametersBuilder::default()
100 .incremental_output(true)
101 .build()?,
102 );
103
104 Ok(self
106 .client
107 .post_stream("/services/aigc/multimodal-generation/generation", request)
108 .await)
109 }
110}