Skip to main content

gproxy_protocol/protocol/openai/generate_content/
chat_stream.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::super::common::*;
6use super::chat_tail::{ChatChoiceLogprobs, CompletionUsage};
7
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
9#[non_exhaustive]
10pub struct ChatCompletionChunk {
11    pub id: String,
12    pub choices: Vec<ChatChunkChoice>,
13    pub created: 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, skip_serializing_if = "BTreeMap::is_empty")]
23    pub extra: Extra,
24}
25
26#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
27#[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, skip_serializing_if = "BTreeMap::is_empty")]
35    pub extra: Extra,
36}
37
38#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
39#[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, skip_serializing_if = "BTreeMap::is_empty")]
56    pub extra: Extra,
57}
58
59#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
60#[non_exhaustive]
61pub enum ChatDeltaRole {
62    #[serde(rename = "assistant")]
63    Assistant,
64}
65
66#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
67#[non_exhaustive]
68pub struct ChatToolCallDelta {
69    pub index: u32,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub id: Option<String>,
72    #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
73    pub type_: Option<ChatToolCallType>,
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub function: Option<FunctionCallDelta>,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub custom: Option<CustomToolCallDelta>,
78    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
79    pub extra: Extra,
80}
81
82#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
83#[non_exhaustive]
84pub struct FunctionCallDelta {
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub arguments: Option<String>,
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub name: Option<String>,
89    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
90    pub extra: Extra,
91}
92
93#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
94#[non_exhaustive]
95pub struct CustomToolCallDelta {
96    #[serde(skip_serializing_if = "Option::is_none")]
97    pub input: Option<String>,
98    #[serde(skip_serializing_if = "Option::is_none")]
99    pub name: Option<String>,
100    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
101    pub extra: Extra,
102}