pub struct Generation<'a> { /* private fields */ }
Implementations§
Source§impl<'a> Generation<'a>
impl<'a> Generation<'a>
pub fn new(client: &'a Client) -> Self
Sourcepub async fn call(&self, request: GenerationParam) -> Result<GenerationOutput>
pub async fn call(&self, request: GenerationParam) -> Result<GenerationOutput>
异步调用生成服务
此函数用于当请求参数中的stream设置为false时,发送一次性生成请求 如果stream参数为true,则会返回错误,提示用户使用call_stream方法
§参数
request
: 包含生成参数的请求对象
§返回
返回生成输出的结果,如果请求配置了stream且为true,则返回错误
Examples found in repository?
examples/text-generation.rs (line 31)
10async fn main() -> Result<(), Box<dyn std::error::Error>> {
11 let request = GenerationParamBuilder::default()
12 .model("qwen-turbo".to_string())
13 .input(
14 InputBuilder::default()
15 .messages(vec![MessageBuilder::default()
16 .role("user")
17 .content("你是谁")
18 .build()
19 .unwrap()])
20 .build()?,
21 )
22 .parameters(
23 ParametersBuilder::default()
24 .result_format("message")
25 .build()?,
26 )
27 .build()?;
28
29 let client = Client::new();
30
31 let response = client.generation().call(request).await?;
32 dbg!(response);
33 Ok(())
34}
More examples
examples/qwen-mt.rs (line 36)
10async fn main() -> Result<(), Box<dyn std::error::Error>> {
11 let request = GenerationParamBuilder::default()
12 .model("qwen-mt-turbo".to_string())
13 .input(
14 InputBuilder::default()
15 .messages(vec![MessageBuilder::default()
16 .role("user")
17 .content("我看到这个视频后没有笑")
18 .build()
19 .unwrap()])
20 .build()?,
21 )
22 .parameters(
23 ParametersBuilder::default()
24 .translation_options(
25 TranslationOptionsBuilder::default()
26 .source_lang("Chinese")
27 .target_lang("English")
28 .build()?,
29 )
30 .build()?,
31 )
32 .build()?;
33
34 let client = Client::new();
35
36 let response = client.generation().call(request).await?;
37 dbg!(response);
38 Ok(())
39}
Sourcepub async fn call_stream(
&self,
request: GenerationParam,
) -> Result<GenerationOutputStream>
pub async fn call_stream( &self, request: GenerationParam, ) -> Result<GenerationOutputStream>
异步调用生成流函数
此函数用于处理文本生成的流式请求。流式请求意味着响应会随着时间的推移逐步返回, 而不是一次性返回所有内容。这对于需要实时处理生成内容的场景特别有用。
§参数
request
: 一个可变的GenerationParam
类型对象,包含了生成文本所需的参数。
§返回
返回一个 Result
类型,包含一个 GenerationOutputStream
对象,用于接收生成的文本流。
如果 request
中的 stream
字段为 Some(false)
,则返回一个 DashScopeError::InvalidArgument
错误,
提示用户应使用 Generation::call
函数而不是 call_stream
。
§错误处理
如果 request
参数中的 stream
属性为 Some(false)
,表示用户不希望使用流式处理,
函数将返回一个错误,提示用户应使用非流式处理的 call
方法。
§注意
该函数自动将 request
的 stream
属性设置为 Some(true)
,确保总是以流式处理方式执行生成任务。
Examples found in repository?
examples/text-generation-stream.rs (line 34)
11async fn main() -> Result<(), Box<dyn std::error::Error>> {
12 let request = GenerationParamBuilder::default()
13 .model("qwen-turbo".to_string())
14 .input(
15 InputBuilder::default()
16 .messages(vec![MessageBuilder::default()
17 .role("user")
18 .content("qwen 大模型系统是谁开发的?")
19 .build()
20 .unwrap()])
21 .build()?,
22 )
23 .stream(true)
24 .parameters(
25 ParametersBuilder::default()
26 .result_format("message")
27 .incremental_output(true)
28 .build()?,
29 )
30 .build()?;
31
32 let client = Client::new();
33
34 let mut stream = client.generation().call_stream(request).await?;
35 while let Some(response) = stream.next().await {
36 match response {
37 Ok(go) => go.output.choices.iter().for_each(|c| {
38 print!("{}", c.message.content);
39 }),
40 Err(e) => eprintln!("{}", e),
41 }
42 }
43 Ok(())
44}
More examples
examples/qwen-mt-stream.rs (line 39)
11async fn main() -> Result<(), Box<dyn std::error::Error>> {
12 let request = GenerationParamBuilder::default()
13 .model("qwen-mt-turbo".to_string())
14 .input(
15 InputBuilder::default()
16 .messages(vec![MessageBuilder::default()
17 .role("user")
18 .content("我看到这个视频后没有笑")
19 .build()
20 .unwrap()])
21 .build()?,
22 )
23 .stream(true)
24 .parameters(
25 ParametersBuilder::default()
26 // .incremental_output(true) # Qwen-MT模型暂时不支持增量式流式输出,所以此设置无效
27 .translation_options(
28 TranslationOptionsBuilder::default()
29 .source_lang("Chinese")
30 .target_lang("English")
31 .build()?,
32 )
33 .build()?,
34 )
35 .build()?;
36
37 let client = Client::new();
38
39 let mut stream = client.generation().call_stream(request).await?;
40 while let Some(response) = stream.next().await {
41 match response {
42 Ok(go) => go.output.choices.iter().for_each(|c| {
43 println!("{}", c.message.content);
44 }),
45 Err(e) => eprintln!("{}", e),
46 }
47 }
48 Ok(())
49}
Auto Trait Implementations§
impl<'a> Freeze for Generation<'a>
impl<'a> !RefUnwindSafe for Generation<'a>
impl<'a> Send for Generation<'a>
impl<'a> Sync for Generation<'a>
impl<'a> Unpin for Generation<'a>
impl<'a> !UnwindSafe for Generation<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more