just_deepseek/types/chat/
shared.rs1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
6pub struct ResponseFormat {
7 #[serde(rename = "type")]
8 pub kind: ResponseFormatType,
9}
10
11#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
13#[serde(rename_all = "snake_case")]
14pub enum ResponseFormatType {
15 Text,
16 JsonObject,
17}
18
19#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
21#[serde(untagged)]
22pub enum StopSequence {
23 Single(String),
24 Multiple(Vec<String>),
25}
26
27#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
29pub struct StreamOptions {
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub include_usage: Option<bool>,
32}
33
34#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
36pub struct ToolDefinition {
37 #[serde(rename = "type")]
38 pub kind: ToolType,
39 pub function: FunctionDefinition,
40}
41
42#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
44pub struct FunctionDefinition {
45 pub name: String,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub description: Option<String>,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub parameters: Option<Value>,
50 #[serde(skip_serializing_if = "Option::is_none")]
51 pub strict: Option<bool>,
52}
53
54#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
56pub struct NamedToolChoice {
57 #[serde(rename = "type")]
58 pub kind: ToolType,
59 pub function: NamedToolChoiceFunction,
60}
61
62#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
64pub struct NamedToolChoiceFunction {
65 pub name: String,
66}
67
68#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
70#[serde(untagged)]
71pub enum ToolChoice {
72 Mode(ToolChoiceMode),
73 Named(NamedToolChoice),
74}
75
76#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
78#[serde(rename_all = "lowercase")]
79pub enum ToolChoiceMode {
80 None,
81 Auto,
82 Required,
83}
84
85#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
87#[serde(rename_all = "lowercase")]
88pub enum ToolType {
89 Function,
90}
91
92#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
93pub struct ChatCompletionToolCall {
94 pub id: String,
95 #[serde(rename = "type")]
96 pub kind: ToolType,
97 pub function: FunctionCall,
98}
99
100#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
101pub struct ChatCompletionChunkToolCall {
102 #[serde(skip_serializing_if = "Option::is_none")]
103 pub index: Option<u32>,
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub id: Option<String>,
106 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
107 pub kind: Option<ToolType>,
108 #[serde(skip_serializing_if = "Option::is_none")]
109 pub function: Option<FunctionCallDelta>,
110}
111
112#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
113pub struct FunctionCall {
114 pub name: String,
115 pub arguments: String,
116}
117
118#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
119pub struct FunctionCallDelta {
120 #[serde(skip_serializing_if = "Option::is_none")]
121 pub name: Option<String>,
122 #[serde(skip_serializing_if = "Option::is_none")]
123 pub arguments: Option<String>,
124}
125
126#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
127#[serde(rename_all = "snake_case")]
128pub enum FinishReason {
129 Stop,
130 Length,
131 ContentFilter,
132 ToolCalls,
133 InsufficientSystemResource,
134}
135
136#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
137pub struct Usage {
138 pub completion_tokens: u32,
139 pub prompt_tokens: u32,
140 pub prompt_cache_hit_tokens: u32,
141 pub prompt_cache_miss_tokens: u32,
142 pub total_tokens: u32,
143 #[serde(skip_serializing_if = "Option::is_none")]
144 pub completion_tokens_details: Option<CompletionTokensDetails>,
145}
146
147#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
148pub struct CompletionTokensDetails {
149 #[serde(skip_serializing_if = "Option::is_none")]
150 pub reasoning_tokens: Option<u32>,
151}
152
153#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
154pub struct ChatCompletionLogprobs {
155 #[serde(skip_serializing_if = "Option::is_none")]
156 pub content: Option<Vec<TokenLogprob>>,
157 #[serde(skip_serializing_if = "Option::is_none")]
158 pub reasoning_content: Option<Vec<TokenLogprob>>,
159}
160
161#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
162pub struct TokenLogprob {
163 pub token: String,
164 pub logprob: f64,
165 #[serde(skip_serializing_if = "Option::is_none")]
166 pub bytes: Option<Vec<u8>>,
167 pub top_logprobs: Vec<TopLogprob>,
168}
169
170#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
171pub struct TopLogprob {
172 pub token: String,
173 pub logprob: f64,
174 #[serde(skip_serializing_if = "Option::is_none")]
175 pub bytes: Option<Vec<u8>>,
176}