1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4use crate::openai::common::{Metadata, Rest};
5
6use super::{ResponseCreateRequest, ResponseInput, ResponseItem};
7
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9#[serde(untagged)]
10#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
11pub enum ResponseWebSocketRequest {
12 ResponseCreate(Box<ResponseCreateWebSocketRequest>),
13 ResponseInject(ResponseInjectWebSocketRequest),
14 ResponseSteer(ResponseSteerWebSocketRequest),
15 Unknown(Value),
16}
17
18#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
19#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
20pub struct ResponseCreateWebSocketRequest {
21 #[serde(rename = "type")]
22 pub type_: ResponseCreateWebSocketRequestType,
23 #[serde(flatten)]
24 pub response: ResponseCreateRequest,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub generate: Option<bool>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub client_metadata: Option<Metadata>,
29 #[serde(default, flatten)]
30 pub rest: Rest,
31}
32
33#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
34#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
35pub enum ResponseCreateWebSocketRequestType {
36 #[serde(rename = "response.create")]
37 ResponseCreate,
38}
39
40#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
41#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
42pub struct ResponseInjectWebSocketRequest {
43 #[serde(rename = "type")]
44 pub type_: ResponseInjectWebSocketRequestType,
45 pub response_id: String,
46 pub input: Vec<ResponseItem>,
47 #[serde(default, flatten)]
48 pub rest: Rest,
49}
50
51#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
52#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
53pub enum ResponseInjectWebSocketRequestType {
54 #[serde(rename = "response.inject")]
55 ResponseInject,
56}
57
58#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
59#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
60pub struct ResponseSteerWebSocketRequest {
61 #[serde(rename = "type")]
62 pub type_: ResponseSteerWebSocketRequestType,
63 pub previous_response_id: String,
64 pub input: ResponseInput,
65}
66
67#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
68#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
69pub enum ResponseSteerWebSocketRequestType {
70 #[serde(rename = "response.steer")]
71 ResponseSteer,
72}
73
74#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
75#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
76pub struct ResponseInjectCreatedEvent {
77 pub response_id: String,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub sequence_number: Option<u64>,
80 #[serde(default, flatten)]
81 pub rest: Rest,
82}
83
84#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
85#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
86pub struct ResponseInjectFailedEvent {
87 pub response_id: String,
88 pub input: Vec<ResponseItem>,
89 pub error: ResponseInjectError,
90 #[serde(skip_serializing_if = "Option::is_none")]
91 pub sequence_number: Option<u64>,
92 #[serde(default, flatten)]
93 pub rest: Rest,
94}
95
96#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
97#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
98pub struct ResponseInjectError {
99 pub code: String,
100 pub message: String,
101 #[serde(default, flatten)]
102 pub rest: Rest,
103}
104
105#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
106#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
107pub struct ResponseSteerReference {
108 pub id: String,
109 pub previous_response_id: String,
110 #[serde(default, flatten)]
111 pub rest: Rest,
112}
113
114#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
115#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
116pub struct ResponseSteerAcceptedEvent {
117 pub steer: ResponseSteerReference,
118 #[serde(skip_serializing_if = "Option::is_none")]
119 pub sequence_number: Option<u64>,
120 #[serde(skip_serializing_if = "Option::is_none")]
121 pub stream_id: Option<String>,
122 #[serde(default, flatten)]
123 pub rest: Rest,
124}
125
126#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
127#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
128pub struct ResponseSteerPendingEvent {
129 pub steer: ResponseSteerReference,
130 pub reason: String,
131 pub required_input: Vec<Value>,
132 #[serde(skip_serializing_if = "Option::is_none")]
133 pub sequence_number: Option<u64>,
134 #[serde(skip_serializing_if = "Option::is_none")]
135 pub stream_id: Option<String>,
136 #[serde(default, flatten)]
137 pub rest: Rest,
138}
139
140#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
141#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
142pub struct ResponseSteerFailedEvent {
143 pub steer: ResponseSteerFailure,
144 pub error: ResponseSteerError,
145 #[serde(skip_serializing_if = "Option::is_none")]
146 pub sequence_number: Option<u64>,
147 #[serde(skip_serializing_if = "Option::is_none")]
148 pub stream_id: Option<String>,
149 #[serde(default, flatten)]
150 pub rest: Rest,
151}
152
153#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
154#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
155pub struct ResponseSteerFailure {
156 #[serde(skip_serializing_if = "Option::is_none")]
157 pub id: Option<String>,
158 pub previous_response_id: String,
159 pub input: ResponseInput,
160 #[serde(default, flatten)]
161 pub rest: Rest,
162}
163
164#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
165#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
166pub struct ResponseSteerError {
167 pub code: String,
168 pub message: String,
169 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
170 pub type_: Option<String>,
171 #[serde(default, flatten)]
172 pub rest: Rest,
173}