async_dashscope/operation/generation/
param.rs1use 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 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}