1+ use serde:: { Deserialize , Serialize } ;
2+ use serde_json:: Value ;
3+ use super :: { enums:: * , message:: ChatMessage , tool:: * } ;
4+
5+ #[ derive( Debug , Serialize , Deserialize , Default ) ]
6+ pub struct StreamOptions {
7+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
8+ pub include_usage : Option < bool > ,
9+ }
10+
11+ #[ derive( Debug , Serialize , Deserialize , Default ) ]
12+ pub struct ResponseFormat {
13+ pub r#type : ResponseFormatType ,
14+ }
15+
16+ /// 聊天补全请求
17+ #[ derive( Debug , Serialize , Deserialize , Default ) ]
18+ pub struct CreateChatCompletionRequest {
19+ pub model : String ,
20+ pub messages : Vec < ChatMessage > ,
21+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
22+ pub frequency_penalty : Option < f32 > ,
23+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
24+ pub presence_penalty : Option < f32 > ,
25+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
26+ pub temperature : Option < f32 > ,
27+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
28+ pub top_p : Option < f32 > ,
29+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
30+ pub stop : Option < Value > ,
31+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
32+ pub max_tokens : Option < u32 > ,
33+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
34+ pub stream : Option < bool > ,
35+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
36+ pub stream_options : Option < StreamOptions > ,
37+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
38+ pub tools : Option < Vec < Tool > > ,
39+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
40+ pub tool_choice : Option < ToolChoice > ,
41+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
42+ pub response_format : Option < ResponseFormat > ,
43+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
44+ pub logprobs : Option < bool > ,
45+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
46+ pub top_logprobs : Option < u8 > ,
47+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
48+ pub user : Option < String > ,
49+ }
50+
51+ /// 聊天补全响应
52+ #[ derive( Debug , Serialize , Deserialize ) ]
53+ pub struct ChatCompletionResponse {
54+ pub id : String ,
55+ pub object : String ,
56+ pub created : i64 ,
57+ pub model : String ,
58+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
59+ pub system_fingerprint : Option < String > ,
60+ pub choices : Vec < Choice > ,
61+ pub usage : Usage ,
62+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
63+ pub prompt_filter_results : Option < Vec < Value > > ,
64+ }
65+
66+ #[ derive( Debug , Serialize , Deserialize ) ]
67+ pub struct Choice {
68+ pub index : i32 ,
69+ pub message : ChatMessage ,
70+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
71+ pub finish_reason : Option < FinishReason > ,
72+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
73+ pub logprobs : Option < Logprobs > ,
74+ }
75+
76+ #[ derive( Debug , Serialize , Deserialize ) ]
77+ pub struct Logprobs {
78+ pub content : Option < Vec < LogprobContent > > ,
79+ }
80+
81+ #[ derive( Debug , Serialize , Deserialize ) ]
82+ pub struct LogprobContent {
83+ pub token : String ,
84+ pub logprob : f32 ,
85+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
86+ pub bytes : Option < Vec < u8 > > ,
87+ pub top_logprobs : Vec < TopLogprob > ,
88+ }
89+
90+ #[ derive( Debug , Serialize , Deserialize ) ]
91+ pub struct TopLogprob {
92+ pub token : String ,
93+ pub logprob : f32 ,
94+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
95+ pub bytes : Option < Vec < u8 > > ,
96+ }
97+
98+ #[ derive( Debug , Serialize , Deserialize ) ]
99+ pub struct Usage {
100+ pub prompt_tokens : u32 ,
101+ pub completion_tokens : u32 ,
102+ pub total_tokens : u32 ,
103+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
104+ pub prompt_tokens_details : Option < PromptTokensDetails > ,
105+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
106+ pub completion_tokens_details : Option < CompletionTokensDetails > ,
107+ }
108+
109+ #[ derive( Debug , Serialize , Deserialize ) ]
110+ pub struct PromptTokensDetails {
111+ pub cached_tokens : u32 ,
112+ }
113+
114+ #[ derive( Debug , Serialize , Deserialize ) ]
115+ pub struct CompletionTokensDetails {
116+ pub reasoning_tokens : u32 ,
117+ }
0 commit comments