Skip to main content

just_deepseek/types/chat/
shared.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4/// Structured response-format request.
5#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
6pub struct ResponseFormat {
7    #[serde(rename = "type")]
8    pub kind: ResponseFormatType,
9}
10
11/// Response-format families supported by DeepSeek.
12#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
13#[serde(rename_all = "snake_case")]
14pub enum ResponseFormatType {
15    Text,
16    JsonObject,
17}
18
19/// Stop sequence configuration.
20#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
21#[serde(untagged)]
22pub enum StopSequence {
23    Single(String),
24    Multiple(Vec<String>),
25}
26
27/// Streaming-specific options.
28#[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/// Tool definition passed to the model.
35#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
36pub struct ToolDefinition {
37    #[serde(rename = "type")]
38    pub kind: ToolType,
39    pub function: FunctionDefinition,
40}
41
42/// Callable function schema exposed to the model.
43#[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/// Explicit named tool-choice request.
55#[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/// Named function used in a named tool-choice request.
63#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
64pub struct NamedToolChoiceFunction {
65    pub name: String,
66}
67
68/// Tool choice configuration.
69#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
70#[serde(untagged)]
71pub enum ToolChoice {
72    Mode(ToolChoiceMode),
73    Named(NamedToolChoice),
74}
75
76/// Common tool-choice modes.
77#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
78#[serde(rename_all = "lowercase")]
79pub enum ToolChoiceMode {
80    None,
81    Auto,
82    Required,
83}
84
85/// Tool families supported by the wire protocol.
86#[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}