async_dashscope/operation/generation/
output.rs1use std::{pin::Pin, str};
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5use tokio_stream::Stream;
6
7use crate::{error::DashScopeError, operation::common::Usage};
8
9
10#[derive(Serialize, Deserialize, Debug, Clone)]
11pub struct Message {
12 #[serde(rename = "content")]
14 pub content: String,
15
16 #[serde(rename = "role")]
18 pub role: String,
19
20 #[serde(rename = "reasoning_content")]
22 pub reasoning_content: Option<String>,
23
24 pub function_call: Option<Value>,
26 #[serde(rename = "tool_calls")]
27 pub tool_calls: Option<Vec<ToolCall>>,
28}
29
30#[derive(Serialize, Deserialize, Debug, Clone)]
31pub struct ToolCall {
32 #[serde(rename = "id")]
33 pub id: String,
34
35 #[serde(rename = "type")]
36 pub type_: String,
37
38 #[serde(rename = "index")]
39 pub index: i32,
40
41 #[serde(rename = "function")]
42 pub function: Function,
43}
44
45#[derive(Serialize, Deserialize, Debug, Clone)]
46pub struct Function {
47 pub name: String,
48 pub arguments: Option<String>,
49}
50
51#[derive(Serialize, Deserialize, Debug, Clone)]
52pub struct Choices {
53 #[serde(rename = "finish_reason")]
59 pub finish_reason: Option<String>,
60
61 #[serde(rename = "message")]
63 pub message: Message,
64}
65#[derive(Serialize, Deserialize, Debug, Clone)]
66pub struct Output {
67 #[serde(rename = "choices")]
69 pub choices: Option<Vec<Choices>>,
70
71 #[serde(skip_serializing_if = "Option::is_none")]
73 pub text: Option<String>,
74
75 #[serde(skip_serializing_if = "Option::is_none")]
82 pub finish_reason: Option<String>,
83
84 #[serde(skip_serializing_if = "Option::is_none")]
86 pub search_info: Option<SearchInfo>,
87}
88
89#[derive(Serialize, Deserialize, Debug, Clone)]
90pub struct SearchInfo {
91 #[serde(rename = "search_results")]
92 pub search_results: Vec<SearchResult>,
93}
94
95#[derive(Serialize, Deserialize, Debug, Clone)]
96pub struct SearchResult {
97 pub site_name: String,
99 pub icon: Option<String>,
101
102 pub index: i32,
104
105 pub title: Option<String>,
107
108 pub url: String,
110}
111
112#[derive(Serialize, Deserialize, Debug, Clone)]
113pub struct GenerationOutput {
114 #[serde(rename = "output")]
116 pub output: Output,
117
118 #[serde(rename = "request_id")]
120 pub request_id: Option<String>,
121
122 #[serde(rename = "usage")]
124 pub usage: Option<Usage>,
125}
126
127pub type GenerationOutputStream =
128 Pin<Box<dyn Stream<Item = Result<GenerationOutput, DashScopeError>> + Send>>;