Skip to main content

just_deepseek/types/chat/
response.rs

1use serde::{Deserialize, Serialize};
2
3use super::{
4    ChatCompletionChunkToolCall, ChatCompletionLogprobs, ChatCompletionToolCall, FinishReason,
5    Usage,
6};
7
8/// Wire DTO for a non-streaming chat completion response.
9#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
10pub struct ChatCompletion {
11    pub id: String,
12    pub choices: Vec<ChatCompletionChoice>,
13    pub created: i64,
14    pub model: String,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub system_fingerprint: Option<String>,
17    pub object: String,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub usage: Option<Usage>,
20}
21
22#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
23pub struct ChatCompletionChoice {
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub finish_reason: Option<FinishReason>,
26    pub index: u32,
27    pub message: AssistantMessage,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub logprobs: Option<ChatCompletionLogprobs>,
30}
31
32#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
33pub struct AssistantMessage {
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub content: Option<String>,
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub reasoning_content: Option<String>,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub tool_calls: Option<Vec<ChatCompletionToolCall>>,
40    pub role: AssistantRole,
41}
42
43#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
44#[serde(rename_all = "lowercase")]
45pub enum AssistantRole {
46    Assistant,
47}
48
49#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
50pub struct ChatCompletionChunk {
51    pub id: String,
52    pub choices: Vec<ChatCompletionChunkChoice>,
53    pub created: i64,
54    pub model: String,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub system_fingerprint: Option<String>,
57    pub object: String,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub usage: Option<Usage>,
60}
61
62#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
63pub struct ChatCompletionChunkChoice {
64    pub delta: DeltaMessage,
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub finish_reason: Option<FinishReason>,
67    pub index: u32,
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub logprobs: Option<ChatCompletionLogprobs>,
70}
71
72#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
73pub struct DeltaMessage {
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub content: Option<String>,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub reasoning_content: Option<String>,
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub role: Option<AssistantRole>,
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub tool_calls: Option<Vec<ChatCompletionChunkToolCall>>,
82}