use std::collections::HashMap;
use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use crate::error::OpenAIError;
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct ChatSessionResource {
pub id: String,
#[serde(default = "default_session_object")]
pub object: String,
pub expires_at: u64,
pub client_secret: String,
pub workflow: ChatkitWorkflow,
pub user: String,
pub rate_limits: ChatSessionRateLimits,
pub max_requests_per_1_minute: u32,
pub status: ChatSessionStatus,
pub chatkit_configuration: ChatSessionChatkitConfiguration,
}
fn default_session_object() -> String {
"chatkit.session".to_string()
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct ChatkitWorkflow {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state_variables: Option<HashMap<String, serde_json::Value>>,
pub tracing: ChatkitWorkflowTracing,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct ChatkitWorkflowTracing {
pub enabled: bool,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct ChatSessionRateLimits {
pub max_requests_per_1_minute: u32,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum ChatSessionStatus {
Active,
Expired,
Cancelled,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct ChatSessionChatkitConfiguration {
pub automatic_thread_titling: ChatSessionAutomaticThreadTitling,
pub file_upload: ChatSessionFileUpload,
pub history: ChatSessionHistory,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct ChatSessionAutomaticThreadTitling {
pub enabled: bool,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct ChatSessionFileUpload {
pub enabled: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_file_size: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_files: Option<u32>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct ChatSessionHistory {
pub enabled: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub recent_threads: Option<u32>,
}
#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
#[builder(name = "CreateChatSessionRequestArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct CreateChatSessionBody {
pub workflow: WorkflowParam,
pub user: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_after: Option<ExpiresAfterParam>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rate_limits: Option<RateLimitsParam>,
#[serde(skip_serializing_if = "Option::is_none")]
pub chatkit_configuration: Option<ChatkitConfigurationParam>,
}
#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
#[builder(name = "WorkflowParamArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct WorkflowParam {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state_variables: Option<HashMap<String, serde_json::Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tracing: Option<WorkflowTracingParam>,
}
#[derive(Clone, Serialize, Default, Debug, Deserialize, Builder, PartialEq)]
#[builder(name = "WorkflowTracingParamArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct WorkflowTracingParam {
#[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
}
#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
#[builder(name = "ExpiresAfterParamArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct ExpiresAfterParam {
#[serde(default = "default_anchor")]
#[builder(default = "default_anchor()")]
pub anchor: String,
pub seconds: u32,
}
fn default_anchor() -> String {
"created_at".to_string()
}
#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
#[builder(name = "RateLimitsParamArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct RateLimitsParam {
#[serde(skip_serializing_if = "Option::is_none")]
pub max_requests_per_1_minute: Option<u32>,
}
#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
#[builder(name = "ChatkitConfigurationParamArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct ChatkitConfigurationParam {
#[serde(skip_serializing_if = "Option::is_none")]
pub automatic_thread_titling: Option<AutomaticThreadTitlingParam>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_upload: Option<FileUploadParam>,
#[serde(skip_serializing_if = "Option::is_none")]
pub history: Option<HistoryParam>,
}
#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
#[builder(name = "AutomaticThreadTitlingParamArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct AutomaticThreadTitlingParam {
#[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
}
#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
#[builder(name = "FileUploadParamArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct FileUploadParam {
#[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_file_size: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_files: Option<u32>,
}
#[derive(Clone, Serialize, Debug, Deserialize, Builder, PartialEq, Default)]
#[builder(name = "HistoryParamArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct HistoryParam {
#[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recent_threads: Option<u32>,
}