deepseekClient_rs/chat/
response.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Serialize, Deserialize, Debug, Clone)]
4pub struct ChatResponse {
5 id: String,
7 pub choices: Vec<Choice>,
9 created: isize,
11 model: String,
13 system_fingerprint: String,
15 object: String,
17 usage: Option<Usage>,
19}
20
21impl ChatResponse {
22 pub fn content(&self) -> Vec<&str> {
23 self.choices.iter().map(|c| c.content()).collect()
24 }
25 pub fn role(&self) -> Vec<&str> {
26 self.choices.iter().map(|c| c.role()).collect()
27 }
28}
29
30#[derive(Serialize, Deserialize, Debug, Clone)]
31pub struct Choice {
32 finish_reason: String,
38 index: usize,
40 #[serde(rename = "message")]
42 response_content: ResponseMessage,
43 logprobs: Option<Logprobs>,
45}
46
47impl Choice {
48 pub fn content(&self) -> &str {
49 self.response_content.cotent()
50 }
51 pub fn role(&self) -> &str {
52 self.response_content.role()
53 }
54}
55
56#[derive(Serialize, Deserialize, Debug, Clone)]
57pub struct ResponseMessage {
58 #[serde(skip_serializing_if = "Option::is_none")]
60 content: Option<String>,
61 reasoning_content: Option<String>,
63 tool_calls: Option<Vec<ToolCall>>,
65 role: String,
67}
68
69impl ResponseMessage {
70 pub fn cotent(&self) -> &str {
71 self.content.as_deref().unwrap_or("没有回复content")
72 }
73
74 pub fn role(&self) -> &str {
75 self.role.as_str()
76 }
77}
78
79#[derive(Serialize, Deserialize, Debug, Clone)]
80pub struct ToolCall {
81 id: String,
83 #[serde(rename = "type")]
85 type_name: String,
86 #[serde(rename = "function")]
87 response_function: ResponseFunction,
88}
89
90#[derive(Serialize, Deserialize, Debug, Clone)]
91pub struct ResponseFunction {
92 name: String,
94 arguments: String,
97}
98
99#[derive(Serialize, Deserialize, Debug, Clone)]
100pub struct Logprobs {
101 content: LogprobsContent,
103}
104
105#[derive(Serialize, Deserialize, Debug, Clone)]
106pub struct LogprobsContent {
107 tokens: String,
109 logprob: isize,
111 bytes: Option<isize>,
113 top_logprobs: TopLogprobs,
116}
117
118#[derive(Serialize, Deserialize, Debug, Clone)]
119pub struct TopLogprobs {
120 token: String,
122 logprob: isize,
124 bytes: Option<isize>,
127}
128
129#[derive(Serialize, Deserialize, Debug, Clone)]
130pub struct Usage {
131 completion_tokens: isize,
133 prompt_tokens: isize,
135 prompt_cache_hit_tokens: isize,
137 prompt_cache_miss_tokens: isize,
139 total_tokens: usize,
141 prompt_tokens_details: PormptTokensDetails,
143}
144
145#[derive(Serialize, Deserialize, Debug, Clone)]
146pub struct PormptTokensDetails {
147 cached_tokens: isize,
149}