async_dashscope/operation/
generation.rs1use crate::{client::Client, error::DashScopeError, operation::validate::Validator};
2use crate::{error::Result, operation::validate::check_model_parameters};
3pub use output::*;
4pub use param::{
5 AssistantMessageBuilder, GenerationParam, GenerationParamBuilder, InputBuilder, MessageBuilder,
6 SystemMessageBuilder, ToolMessageBuilder, UserMessageBuilder,
7};
8
9mod output;
10mod param;
11
12const GENERATION_PATH: &str = "/services/aigc/text-generation/generation";
13
14pub struct Generation<'a> {
15 client: &'a Client,
16}
17
18impl<'a> Generation<'a> {
19 pub fn new(client: &'a Client) -> Self {
20 Self { client }
21 }
22
23 pub async fn call(&self, request: GenerationParam) -> Result<GenerationOutput> {
34 if request.stream == Some(true) {
36 return Err(DashScopeError::InvalidArgument(
37 "When stream is true, use Generation::call_stream".into(),
38 ));
39 }
40
41 let validators = check_model_parameters(&request.model);
43 for valid in validators {
44 valid.validate(&request)?;
45 }
46
47 self.client.post(GENERATION_PATH, request).await
49 }
50
51 pub async fn call_stream(
71 &self,
72 mut request: GenerationParam,
73 ) -> Result<GenerationOutputStream> {
74 if request.stream == Some(false) {
76 return Err(DashScopeError::InvalidArgument(
77 "When stream is false, use Generation::call".into(),
78 ));
79 }
80
81 request.stream = Some(true);
83
84 let validators = check_model_parameters(&request.model);
86 for valid in validators {
87 valid.validate(&request)?;
88 }
89
90 self.client.post_stream(GENERATION_PATH, request).await
92 }
93}