1use crate::models;
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
15pub struct Assistant {
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 = "name", skip_serializing_if = "Option::is_none")]
63 pub name: Option<String>,
64 #[serde(rename = "voicemailMessage", skip_serializing_if = "Option::is_none")]
66 pub voicemail_message: Option<String>,
67 #[serde(rename = "endCallMessage", skip_serializing_if = "Option::is_none")]
69 pub end_call_message: Option<String>,
70 #[serde(rename = "endCallPhrases", skip_serializing_if = "Option::is_none")]
72 pub end_call_phrases: Option<Vec<String>>,
73 #[serde(rename = "compliancePlan", skip_serializing_if = "Option::is_none")]
74 pub compliance_plan: Option<models::CompliancePlan>,
75 #[serde(rename = "metadata", skip_serializing_if = "Option::is_none")]
77 pub metadata: Option<serde_json::Value>,
78 #[serde(rename = "analysisPlan", skip_serializing_if = "Option::is_none")]
80 pub analysis_plan: Option<models::AnalysisPlan>,
81 #[serde(rename = "artifactPlan", skip_serializing_if = "Option::is_none")]
83 pub artifact_plan: Option<models::ArtifactPlan>,
84 #[serde(rename = "messagePlan", skip_serializing_if = "Option::is_none")]
86 pub message_plan: Option<models::MessagePlan>,
87 #[serde(rename = "startSpeakingPlan", skip_serializing_if = "Option::is_none")]
89 pub start_speaking_plan: Option<models::StartSpeakingPlan>,
90 #[serde(rename = "stopSpeakingPlan", skip_serializing_if = "Option::is_none")]
92 pub stop_speaking_plan: Option<models::StopSpeakingPlan>,
93 #[serde(rename = "monitorPlan", skip_serializing_if = "Option::is_none")]
95 pub monitor_plan: Option<models::MonitorPlan>,
96 #[serde(rename = "credentialIds", skip_serializing_if = "Option::is_none")]
98 pub credential_ids: Option<Vec<String>>,
99 #[serde(rename = "server", skip_serializing_if = "Option::is_none")]
101 pub server: Option<models::Server>,
102 #[serde(rename = "hooks", skip_serializing_if = "Option::is_none")]
104 pub hooks: Option<Vec<models::AssistantHooks>>,
105 #[serde(rename = "keypadInputPlan", skip_serializing_if = "Option::is_none")]
106 pub keypad_input_plan: Option<models::KeypadInputPlan>,
107 #[serde(rename = "id")]
109 pub id: String,
110 #[serde(rename = "orgId")]
112 pub org_id: String,
113 #[serde(rename = "createdAt")]
115 pub created_at: String,
116 #[serde(rename = "updatedAt")]
118 pub updated_at: String,
119}
120
121impl Assistant {
122 pub fn new(id: String, org_id: String, created_at: String, updated_at: String) -> Assistant {
123 Assistant {
124 transcriber: None,
125 model: None,
126 voice: None,
127 first_message: None,
128 first_message_interruptions_enabled: None,
129 first_message_mode: None,
130 voicemail_detection: None,
131 client_messages: None,
132 server_messages: None,
133 silence_timeout_seconds: None,
134 max_duration_seconds: None,
135 background_sound: None,
136 background_denoising_enabled: None,
137 model_output_in_messages_enabled: None,
138 transport_configurations: None,
139 observability_plan: None,
140 credentials: None,
141 name: None,
142 voicemail_message: None,
143 end_call_message: None,
144 end_call_phrases: None,
145 compliance_plan: None,
146 metadata: None,
147 analysis_plan: None,
148 artifact_plan: None,
149 message_plan: None,
150 start_speaking_plan: None,
151 stop_speaking_plan: None,
152 monitor_plan: None,
153 credential_ids: None,
154 server: None,
155 hooks: None,
156 keypad_input_plan: None,
157 id,
158 org_id,
159 created_at,
160 updated_at,
161 }
162 }
163}
164#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
166pub enum FirstMessageMode {
167 #[serde(rename = "assistant-speaks-first")]
168 AssistantSpeaksFirst,
169 #[serde(rename = "assistant-speaks-first-with-model-generated-message")]
170 AssistantSpeaksFirstWithModelGeneratedMessage,
171 #[serde(rename = "assistant-waits-for-user")]
172 AssistantWaitsForUser,
173}
174
175impl Default for FirstMessageMode {
176 fn default() -> FirstMessageMode {
177 Self::AssistantSpeaksFirst
178 }
179}
180#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
182pub enum ClientMessages {
183 #[serde(rename = "conversation-update")]
184 ConversationUpdate,
185 #[serde(rename = "function-call")]
186 FunctionCall,
187 #[serde(rename = "function-call-result")]
188 FunctionCallResult,
189 #[serde(rename = "hang")]
190 Hang,
191 #[serde(rename = "language-changed")]
192 LanguageChanged,
193 #[serde(rename = "metadata")]
194 Metadata,
195 #[serde(rename = "model-output")]
196 ModelOutput,
197 #[serde(rename = "speech-update")]
198 SpeechUpdate,
199 #[serde(rename = "status-update")]
200 StatusUpdate,
201 #[serde(rename = "transcript")]
202 Transcript,
203 #[serde(rename = "tool-calls")]
204 ToolCalls,
205 #[serde(rename = "tool-calls-result")]
206 ToolCallsResult,
207 #[serde(rename = "transfer-update")]
208 TransferUpdate,
209 #[serde(rename = "user-interrupted")]
210 UserInterrupted,
211 #[serde(rename = "voice-input")]
212 VoiceInput,
213 #[serde(rename = "workflow.node.started")]
214 WorkflowPeriodNodePeriodStarted,
215}
216
217impl Default for ClientMessages {
218 fn default() -> ClientMessages {
219 Self::ConversationUpdate
220 }
221}
222#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
224pub enum ServerMessages {
225 #[serde(rename = "conversation-update")]
226 ConversationUpdate,
227 #[serde(rename = "end-of-call-report")]
228 EndOfCallReport,
229 #[serde(rename = "function-call")]
230 FunctionCall,
231 #[serde(rename = "hang")]
232 Hang,
233 #[serde(rename = "language-changed")]
234 LanguageChanged,
235 #[serde(rename = "language-change-detected")]
236 LanguageChangeDetected,
237 #[serde(rename = "model-output")]
238 ModelOutput,
239 #[serde(rename = "phone-call-control")]
240 PhoneCallControl,
241 #[serde(rename = "speech-update")]
242 SpeechUpdate,
243 #[serde(rename = "status-update")]
244 StatusUpdate,
245 #[serde(rename = "transcript")]
246 Transcript,
247 #[serde(rename = "transcript[transcriptType=\"final\"]")]
248 TranscriptLeftSquareBracketTranscriptTypeEqualDoubleQuoteFinalDoubleQuoteRightSquareBracket,
249 #[serde(rename = "tool-calls")]
250 ToolCalls,
251 #[serde(rename = "transfer-destination-request")]
252 TransferDestinationRequest,
253 #[serde(rename = "transfer-update")]
254 TransferUpdate,
255 #[serde(rename = "user-interrupted")]
256 UserInterrupted,
257 #[serde(rename = "voice-input")]
258 VoiceInput,
259}
260
261impl Default for ServerMessages {
262 fn default() -> ServerMessages {
263 Self::ConversationUpdate
264 }
265}
266