Skip to main content

gproxy_protocol/openai/generate_content/chat/
stream.rs

1use 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}