async_dashscope/operation/multi_modal_conversation/
param.rs

1use 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    /// Creates a new `Message` with a single content item.
39    ///
40    /// A convenience method for creating a message without the builder pattern.
41    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}