async_dashscope/operation/multi_modal_conversation/
param.rs1use derive_builder::Builder;
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4
5use crate::operation::common::Parameters;
6use crate::operation::request::RequestTrait;
7
8#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
9pub struct MultiModalConversationParam {
10 #[builder(setter(into))]
11 pub model: String,
12 pub input: Input,
13
14 #[builder(setter(into, strip_option))]
15 #[builder(default=None)]
16 pub stream: Option<bool>,
17
18 #[serde(skip_serializing_if = "Option::is_none")]
19 #[builder(setter(into, strip_option))]
20 #[builder(default=None)]
21 pub parameters: Option<Parameters>,
22}
23
24#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
25pub struct Input {
26 messages: Vec<Message>,
27}
28
29#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
30pub struct Message {
31 #[builder(setter(into))]
32 role: String,
33 #[serde(rename = "content")]
34 contents: Vec<Value>,
35}
36
37impl Message {
38 pub fn new(role: impl Into<String>, content: Value) -> Self {
42 Self {
43 role: role.into(),
44 contents: vec![content],
45 }
46 }
47}
48
49impl RequestTrait for MultiModalConversationParam {
50 fn model(&self) -> &str {
51 &self.model
52 }
53
54 fn parameters(&self) -> Option<&Parameters> {
55 self.parameters.as_ref()
56 }
57}