gproxy_protocol/openai/generate_content/chat/
stream.rs1use serde::{Deserialize, Serialize};
2
3use crate::openai::common::*;
4
5use super::{ChatChoiceLogprobs, CompletionUsage};
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
8#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
9pub struct ChatCompletionChunk {
10 pub id: String,
11 pub choices: Vec<ChatChunkChoice>,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub created: Option<u64>,
14 pub model: OpenAiModelId,
15 pub object: ChatCompletionChunkObjectType,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub service_tier: Option<ServiceTier>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub system_fingerprint: Option<String>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub usage: Option<CompletionUsage>,
22 #[serde(default, flatten)]
23 pub rest: Rest,
24}
25
26#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
27#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
28pub struct ChatChunkChoice {
29 pub index: u32,
30 pub delta: ChatDelta,
31 pub finish_reason: Option<ChatFinishReason>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub logprobs: Option<ChatChoiceLogprobs>,
34 #[serde(default, flatten)]
35 pub rest: Rest,
36}
37
38#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
39#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
40pub struct ChatDelta {
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub role: Option<ChatDeltaRole>,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub content: Option<String>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub reasoning_content: Option<String>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub refusal: Option<String>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub tool_calls: Option<Vec<ChatToolCallDelta>>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub function_call: Option<FunctionCallDelta>,
53 #[serde(skip_serializing_if = "Option::is_none")]
54 pub obfuscation: Option<String>,
55 #[serde(default, flatten)]
56 pub rest: Rest,
57}
58
59#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
60pub enum ChatDeltaRole {
61 #[serde(rename = "assistant")]
62 Assistant,
63}
64
65#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
66#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
67pub struct ChatToolCallDelta {
68 pub index: u32,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 pub id: Option<String>,
71 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
72 pub type_: Option<ChatToolCallType>,
73 #[serde(skip_serializing_if = "Option::is_none")]
74 pub function: Option<FunctionCallDelta>,
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub custom: Option<CustomToolCallDelta>,
77 #[serde(default, flatten)]
78 pub rest: Rest,
79}
80
81#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
82#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
83pub struct FunctionCallDelta {
84 #[serde(skip_serializing_if = "Option::is_none")]
85 pub arguments: Option<String>,
86 #[serde(skip_serializing_if = "Option::is_none")]
87 pub name: Option<String>,
88 #[serde(default, flatten)]
89 pub rest: Rest,
90}
91
92#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
93#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
94pub struct CustomToolCallDelta {
95 #[serde(skip_serializing_if = "Option::is_none")]
96 pub input: Option<String>,
97 #[serde(skip_serializing_if = "Option::is_none")]
98 pub name: Option<String>,
99 #[serde(default, flatten)]
100 pub rest: Rest,
101}