1use std::collections::HashMap;
2
3use derive_builder::Builder;
4use serde::{Deserialize, Serialize};
5
6use crate::error::OpenAIError;
7
8#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
10pub struct ChatSessionResource {
11 pub id: String,
13 #[serde(default = "default_session_object")]
15 pub object: String,
16 pub expires_at: i64,
18 pub client_secret: String,
20 pub workflow: ChatkitWorkflow,
22 pub user: String,
24 pub rate_limits: ChatSessionRateLimits,
26 pub max_requests_per_1_minute: i32,
28 pub status: ChatSessionStatus,
30 pub chatkit_configuration: ChatSessionChatkitConfiguration,
32}
33
34fn default_session_object() -> String {
35 "chatkit.session".to_string()
36}
37
38#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
40pub struct ChatkitWorkflow {
41 pub id: String,
43 #[serde(skip_serializing_if = "Option::is_none")]
45 pub version: Option<String>,
46 #[serde(skip_serializing_if = "Option::is_none")]
48 pub state_variables: Option<HashMap<String, serde_json::Value>>,
49 pub tracing: ChatkitWorkflowTracing,
51}
52
53#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
55pub struct ChatkitWorkflowTracing {
56 pub enabled: bool,
58}
59
60#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
62pub struct ChatSessionRateLimits {
63 pub max_requests_per_1_minute: i32,
65}
66
67#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
69#[serde(rename_all = "snake_case")]
70pub enum ChatSessionStatus {
71 Active,
72 Expired,
73 Cancelled,
74}
75
76#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
78pub struct ChatSessionChatkitConfiguration {
79 pub automatic_thread_titling: ChatSessionAutomaticThreadTitling,
81 pub file_upload: ChatSessionFileUpload,
83 pub history: ChatSessionHistory,
85}
86
87#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
89pub struct ChatSessionAutomaticThreadTitling {
90 pub enabled: bool,
92}
93
94#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
96pub struct ChatSessionFileUpload {
97 pub enabled: bool,
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub max_file_size: Option<i32>,
102 #[serde(skip_serializing_if = "Option::is_none")]
104 pub max_files: Option<i32>,
105}
106
107#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
109pub struct ChatSessionHistory {
110 pub enabled: bool,
112 #[serde(skip_serializing_if = "Option::is_none")]
114 pub recent_threads: Option<i32>,
115}
116
117#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
119#[builder(name = "CreateChatSessionRequestArgs")]
120#[builder(pattern = "mutable")]
121#[builder(setter(into, strip_option), default)]
122#[builder(derive(Debug))]
123#[builder(build_fn(error = "OpenAIError"))]
124pub struct CreateChatSessionBody {
125 pub workflow: WorkflowParam,
127 pub user: String,
129 #[serde(skip_serializing_if = "Option::is_none")]
131 pub expires_after: Option<ExpiresAfterParam>,
132 #[serde(skip_serializing_if = "Option::is_none")]
134 pub rate_limits: Option<RateLimitsParam>,
135 #[serde(skip_serializing_if = "Option::is_none")]
137 pub chatkit_configuration: Option<ChatkitConfigurationParam>,
138}
139
140#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
142#[builder(name = "WorkflowParamArgs")]
143#[builder(pattern = "mutable")]
144#[builder(setter(into, strip_option), default)]
145#[builder(derive(Debug))]
146#[builder(build_fn(error = "OpenAIError"))]
147pub struct WorkflowParam {
148 pub id: String,
150 #[serde(skip_serializing_if = "Option::is_none")]
152 pub version: Option<String>,
153 #[serde(skip_serializing_if = "Option::is_none")]
155 pub state_variables: Option<HashMap<String, serde_json::Value>>,
156 #[serde(skip_serializing_if = "Option::is_none")]
158 pub tracing: Option<WorkflowTracingParam>,
159}
160
161#[derive(Clone, Serialize, Default, Debug, Deserialize, Builder, PartialEq)]
163#[builder(name = "WorkflowTracingParamArgs")]
164#[builder(pattern = "mutable")]
165#[builder(setter(into, strip_option), default)]
166#[builder(derive(Debug))]
167#[builder(build_fn(error = "OpenAIError"))]
168pub struct WorkflowTracingParam {
169 #[serde(skip_serializing_if = "Option::is_none")]
171 pub enabled: Option<bool>,
172}
173
174#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
176#[builder(name = "ExpiresAfterParamArgs")]
177#[builder(pattern = "mutable")]
178#[builder(setter(into, strip_option), default)]
179#[builder(derive(Debug))]
180#[builder(build_fn(error = "OpenAIError"))]
181pub struct ExpiresAfterParam {
182 #[serde(default = "default_anchor")]
184 #[builder(default = "default_anchor()")]
185 pub anchor: String,
186 pub seconds: i32,
188}
189
190fn default_anchor() -> String {
191 "created_at".to_string()
192}
193
194#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
196#[builder(name = "RateLimitsParamArgs")]
197#[builder(pattern = "mutable")]
198#[builder(setter(into, strip_option), default)]
199#[builder(derive(Debug))]
200#[builder(build_fn(error = "OpenAIError"))]
201pub struct RateLimitsParam {
202 #[serde(skip_serializing_if = "Option::is_none")]
204 pub max_requests_per_1_minute: Option<i32>,
205}
206
207#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
209#[builder(name = "ChatkitConfigurationParamArgs")]
210#[builder(pattern = "mutable")]
211#[builder(setter(into, strip_option), default)]
212#[builder(derive(Debug))]
213#[builder(build_fn(error = "OpenAIError"))]
214pub struct ChatkitConfigurationParam {
215 #[serde(skip_serializing_if = "Option::is_none")]
217 pub automatic_thread_titling: Option<AutomaticThreadTitlingParam>,
218 #[serde(skip_serializing_if = "Option::is_none")]
220 pub file_upload: Option<FileUploadParam>,
221 #[serde(skip_serializing_if = "Option::is_none")]
223 pub history: Option<HistoryParam>,
224}
225
226#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
228#[builder(name = "AutomaticThreadTitlingParamArgs")]
229#[builder(pattern = "mutable")]
230#[builder(setter(into, strip_option), default)]
231#[builder(derive(Debug))]
232#[builder(build_fn(error = "OpenAIError"))]
233pub struct AutomaticThreadTitlingParam {
234 #[serde(skip_serializing_if = "Option::is_none")]
236 pub enabled: Option<bool>,
237}
238
239#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
241#[builder(name = "FileUploadParamArgs")]
242#[builder(pattern = "mutable")]
243#[builder(setter(into, strip_option), default)]
244#[builder(derive(Debug))]
245#[builder(build_fn(error = "OpenAIError"))]
246pub struct FileUploadParam {
247 #[serde(skip_serializing_if = "Option::is_none")]
249 pub enabled: Option<bool>,
250 #[serde(skip_serializing_if = "Option::is_none")]
252 pub max_file_size: Option<i32>,
253 #[serde(skip_serializing_if = "Option::is_none")]
255 pub max_files: Option<i32>,
256}
257
258#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
260#[builder(name = "HistoryParamArgs")]
261#[builder(pattern = "mutable")]
262#[builder(setter(into, strip_option), default)]
263#[builder(derive(Debug))]
264#[builder(build_fn(error = "OpenAIError"))]
265pub struct HistoryParam {
266 #[serde(skip_serializing_if = "Option::is_none")]
268 pub enabled: Option<bool>,
269 #[serde(skip_serializing_if = "Option::is_none")]
271 pub recent_threads: Option<i32>,
272}