async_dashscope/operation/generation/
param.rs

1use derive_builder::Builder;
2use serde::{Deserialize, Serialize};
3
4use crate::operation::common::{Parameters, StreamOptions};
5use crate::operation::request::RequestTrait;
6
7#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
8pub struct GenerationParam {
9    #[builder(setter(into, strip_option))]
10    pub model: String,
11
12    pub input: Input,
13
14    #[serde(skip_serializing_if = "Option::is_none")]
15    #[builder(setter(into, strip_option))]
16    #[builder(default=None)]
17    pub parameters: Option<Parameters>,
18
19    #[builder(setter(into, strip_option))]
20    #[builder(default=Some(false))]
21    pub stream: Option<bool>,
22
23    #[builder(setter(into, strip_option))]
24    #[builder(default=None)]
25    pub stream_options: Option<StreamOptions>,
26}
27
28#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
29pub struct Input {
30    pub messages: Vec<Message>,
31}
32
33#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
34pub struct Message {
35    #[builder(setter(into))]
36    pub role: String,
37    #[builder(setter(into))]
38    pub content: String,
39    #[builder(setter(into, strip_option))]
40    #[builder(default=Some(false))]
41    pub partial: Option<bool>,
42}
43
44impl Message {
45    /// Creates a new `Message`.
46    ///
47    /// A convenience method for creating a message without the builder pattern.
48    pub fn new(role: impl Into<String>, content: impl Into<String>) -> Self {
49        Self {
50            role: role.into(),
51            content: content.into(),
52            partial: Some(false),
53        }
54    }
55}
56
57impl RequestTrait for GenerationParam {
58    fn model(&self) -> &str {
59        &self.model
60    }
61
62    fn parameters(&self) -> Option<&Parameters> {
63        self.parameters.as_ref()
64    }
65}