1use crate::models;
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
15pub struct AssistantOverrides {
16 #[serde(rename = "transcriber", skip_serializing_if = "Option::is_none")]
17 pub transcriber: Option<models::CreateAssistantDtoTranscriber>,
18 #[serde(rename = "model", skip_serializing_if = "Option::is_none")]
19 pub model: Option<models::CreateAssistantDtoModel>,
20 #[serde(rename = "voice", skip_serializing_if = "Option::is_none")]
21 pub voice: Option<models::CreateAssistantDtoVoice>,
22 #[serde(rename = "firstMessage", skip_serializing_if = "Option::is_none")]
24 pub first_message: Option<String>,
25 #[serde(rename = "firstMessageInterruptionsEnabled", skip_serializing_if = "Option::is_none")]
26 pub first_message_interruptions_enabled: Option<bool>,
27 #[serde(rename = "firstMessageMode", skip_serializing_if = "Option::is_none")]
29 pub first_message_mode: Option<FirstMessageMode>,
30 #[serde(rename = "voicemailDetection", skip_serializing_if = "Option::is_none")]
31 pub voicemail_detection: Option<models::CreateAssistantDtoVoicemailDetection>,
32 #[serde(rename = "clientMessages", skip_serializing_if = "Option::is_none")]
34 pub client_messages: Option<Vec<ClientMessages>>,
35 #[serde(rename = "serverMessages", skip_serializing_if = "Option::is_none")]
37 pub server_messages: Option<Vec<ServerMessages>>,
38 #[serde(rename = "silenceTimeoutSeconds", skip_serializing_if = "Option::is_none")]
40 pub silence_timeout_seconds: Option<f64>,
41 #[serde(rename = "maxDurationSeconds", skip_serializing_if = "Option::is_none")]
43 pub max_duration_seconds: Option<f64>,
44 #[serde(rename = "backgroundSound", skip_serializing_if = "Option::is_none")]
45 pub background_sound: Option<models::CreateAssistantDtoBackgroundSound>,
46 #[serde(rename = "backgroundDenoisingEnabled", skip_serializing_if = "Option::is_none")]
48 pub background_denoising_enabled: Option<bool>,
49 #[serde(rename = "modelOutputInMessagesEnabled", skip_serializing_if = "Option::is_none")]
51 pub model_output_in_messages_enabled: Option<bool>,
52 #[serde(rename = "transportConfigurations", skip_serializing_if = "Option::is_none")]
54 pub transport_configurations: Option<Vec<models::CreateAssistantDtoTransportConfigurationsInner>>,
55 #[serde(rename = "observabilityPlan", skip_serializing_if = "Option::is_none")]
57 pub observability_plan: Option<models::LangfuseObservabilityPlan>,
58 #[serde(rename = "credentials", skip_serializing_if = "Option::is_none")]
60 pub credentials: Option<Vec<models::CreateAssistantDtoCredentialsInner>>,
61 #[serde(rename = "variableValues", skip_serializing_if = "Option::is_none")]
63 pub variable_values: Option<serde_json::Value>,
64 #[serde(rename = "name", skip_serializing_if = "Option::is_none")]
66 pub name: Option<String>,
67 #[serde(rename = "voicemailMessage", skip_serializing_if = "Option::is_none")]
69 pub voicemail_message: Option<String>,
70 #[serde(rename = "endCallMessage", skip_serializing_if = "Option::is_none")]
72 pub end_call_message: Option<String>,
73 #[serde(rename = "endCallPhrases", skip_serializing_if = "Option::is_none")]
75 pub end_call_phrases: Option<Vec<String>>,
76 #[serde(rename = "compliancePlan", skip_serializing_if = "Option::is_none")]
77 pub compliance_plan: Option<models::CompliancePlan>,
78 #[serde(rename = "metadata", skip_serializing_if = "Option::is_none")]
80 pub metadata: Option<serde_json::Value>,
81 #[serde(rename = "analysisPlan", skip_serializing_if = "Option::is_none")]
83 pub analysis_plan: Option<models::AnalysisPlan>,
84 #[serde(rename = "artifactPlan", skip_serializing_if = "Option::is_none")]
86 pub artifact_plan: Option<models::ArtifactPlan>,
87 #[serde(rename = "messagePlan", skip_serializing_if = "Option::is_none")]
89 pub message_plan: Option<models::MessagePlan>,
90 #[serde(rename = "startSpeakingPlan", skip_serializing_if = "Option::is_none")]
92 pub start_speaking_plan: Option<models::StartSpeakingPlan>,
93 #[serde(rename = "stopSpeakingPlan", skip_serializing_if = "Option::is_none")]
95 pub stop_speaking_plan: Option<models::StopSpeakingPlan>,
96 #[serde(rename = "monitorPlan", skip_serializing_if = "Option::is_none")]
98 pub monitor_plan: Option<models::MonitorPlan>,
99 #[serde(rename = "credentialIds", skip_serializing_if = "Option::is_none")]
101 pub credential_ids: Option<Vec<String>>,
102 #[serde(rename = "server", skip_serializing_if = "Option::is_none")]
104 pub server: Option<models::Server>,
105 #[serde(rename = "hooks", skip_serializing_if = "Option::is_none")]
107 pub hooks: Option<Vec<models::AssistantHooks>>,
108 #[serde(rename = "keypadInputPlan", skip_serializing_if = "Option::is_none")]
109 pub keypad_input_plan: Option<models::KeypadInputPlan>,
110}
111
112impl AssistantOverrides {
113 pub fn new() -> AssistantOverrides {
114 AssistantOverrides {
115 transcriber: None,
116 model: None,
117 voice: None,
118 first_message: None,
119 first_message_interruptions_enabled: None,
120 first_message_mode: None,
121 voicemail_detection: None,
122 client_messages: None,
123 server_messages: None,
124 silence_timeout_seconds: None,
125 max_duration_seconds: None,
126 background_sound: None,
127 background_denoising_enabled: None,
128 model_output_in_messages_enabled: None,
129 transport_configurations: None,
130 observability_plan: None,
131 credentials: None,
132 variable_values: None,
133 name: None,
134 voicemail_message: None,
135 end_call_message: None,
136 end_call_phrases: None,
137 compliance_plan: None,
138 metadata: None,
139 analysis_plan: None,
140 artifact_plan: None,
141 message_plan: None,
142 start_speaking_plan: None,
143 stop_speaking_plan: None,
144 monitor_plan: None,
145 credential_ids: None,
146 server: None,
147 hooks: None,
148 keypad_input_plan: None,
149 }
150 }
151}
152#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
154pub enum FirstMessageMode {
155 #[serde(rename = "assistant-speaks-first")]
156 AssistantSpeaksFirst,
157 #[serde(rename = "assistant-speaks-first-with-model-generated-message")]
158 AssistantSpeaksFirstWithModelGeneratedMessage,
159 #[serde(rename = "assistant-waits-for-user")]
160 AssistantWaitsForUser,
161}
162
163impl Default for FirstMessageMode {
164 fn default() -> FirstMessageMode {
165 Self::AssistantSpeaksFirst
166 }
167}
168#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
170pub enum ClientMessages {
171 #[serde(rename = "conversation-update")]
172 ConversationUpdate,
173 #[serde(rename = "function-call")]
174 FunctionCall,
175 #[serde(rename = "function-call-result")]
176 FunctionCallResult,
177 #[serde(rename = "hang")]
178 Hang,
179 #[serde(rename = "language-changed")]
180 LanguageChanged,
181 #[serde(rename = "metadata")]
182 Metadata,
183 #[serde(rename = "model-output")]
184 ModelOutput,
185 #[serde(rename = "speech-update")]
186 SpeechUpdate,
187 #[serde(rename = "status-update")]
188 StatusUpdate,
189 #[serde(rename = "transcript")]
190 Transcript,
191 #[serde(rename = "tool-calls")]
192 ToolCalls,
193 #[serde(rename = "tool-calls-result")]
194 ToolCallsResult,
195 #[serde(rename = "transfer-update")]
196 TransferUpdate,
197 #[serde(rename = "user-interrupted")]
198 UserInterrupted,
199 #[serde(rename = "voice-input")]
200 VoiceInput,
201 #[serde(rename = "workflow.node.started")]
202 WorkflowPeriodNodePeriodStarted,
203}
204
205impl Default for ClientMessages {
206 fn default() -> ClientMessages {
207 Self::ConversationUpdate
208 }
209}
210#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
212pub enum ServerMessages {
213 #[serde(rename = "conversation-update")]
214 ConversationUpdate,
215 #[serde(rename = "end-of-call-report")]
216 EndOfCallReport,
217 #[serde(rename = "function-call")]
218 FunctionCall,
219 #[serde(rename = "hang")]
220 Hang,
221 #[serde(rename = "language-changed")]
222 LanguageChanged,
223 #[serde(rename = "language-change-detected")]
224 LanguageChangeDetected,
225 #[serde(rename = "model-output")]
226 ModelOutput,
227 #[serde(rename = "phone-call-control")]
228 PhoneCallControl,
229 #[serde(rename = "speech-update")]
230 SpeechUpdate,
231 #[serde(rename = "status-update")]
232 StatusUpdate,
233 #[serde(rename = "transcript")]
234 Transcript,
235 #[serde(rename = "transcript[transcriptType=\"final\"]")]
236 TranscriptLeftSquareBracketTranscriptTypeEqualDoubleQuoteFinalDoubleQuoteRightSquareBracket,
237 #[serde(rename = "tool-calls")]
238 ToolCalls,
239 #[serde(rename = "transfer-destination-request")]
240 TransferDestinationRequest,
241 #[serde(rename = "transfer-update")]
242 TransferUpdate,
243 #[serde(rename = "user-interrupted")]
244 UserInterrupted,
245 #[serde(rename = "voice-input")]
246 VoiceInput,
247}
248
249impl Default for ServerMessages {
250 fn default() -> ServerMessages {
251 Self::ConversationUpdate
252 }
253}
254