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<Box<models::CreateAssistantDtoTranscriber>>,
18 #[serde(rename = "model", skip_serializing_if = "Option::is_none")]
19 pub model: Option<Box<models::CreateAssistantDtoModel>>,
20 #[serde(rename = "voice", skip_serializing_if = "Option::is_none")]
21 pub voice: Option<Box<models::CreateAssistantDtoVoice>>,
22 #[serde(rename = "firstMessage", skip_serializing_if = "Option::is_none")]
24 pub first_message: Option<String>,
25 #[serde(rename = "firstMessageMode", skip_serializing_if = "Option::is_none")]
27 pub first_message_mode: Option<FirstMessageMode>,
28 #[serde(rename = "voicemailDetection", skip_serializing_if = "Option::is_none")]
29 pub voicemail_detection: Option<Box<models::CreateAssistantDtoVoicemailDetection>>,
30 #[serde(rename = "clientMessages", skip_serializing_if = "Option::is_none")]
32 pub client_messages: Option<Vec<ClientMessages>>,
33 #[serde(rename = "serverMessages", skip_serializing_if = "Option::is_none")]
35 pub server_messages: Option<Vec<ServerMessages>>,
36 #[serde(rename = "silenceTimeoutSeconds", skip_serializing_if = "Option::is_none")]
38 pub silence_timeout_seconds: Option<f64>,
39 #[serde(rename = "maxDurationSeconds", skip_serializing_if = "Option::is_none")]
41 pub max_duration_seconds: Option<f64>,
42 #[serde(rename = "backgroundSound", skip_serializing_if = "Option::is_none")]
44 pub background_sound: Option<BackgroundSound>,
45 #[serde(rename = "backgroundDenoisingEnabled", skip_serializing_if = "Option::is_none")]
47 pub background_denoising_enabled: Option<bool>,
48 #[serde(rename = "modelOutputInMessagesEnabled", skip_serializing_if = "Option::is_none")]
50 pub model_output_in_messages_enabled: Option<bool>,
51 #[serde(rename = "transportConfigurations", skip_serializing_if = "Option::is_none")]
53 pub transport_configurations: Option<Vec<models::CreateAssistantDtoTransportConfigurationsInner>>,
54 #[serde(rename = "observabilityPlan", skip_serializing_if = "Option::is_none")]
56 pub observability_plan: Option<Box<models::LangfuseObservabilityPlan>>,
57 #[serde(rename = "credentials", skip_serializing_if = "Option::is_none")]
59 pub credentials: Option<Vec<models::CreateAssistantDtoCredentialsInner>>,
60 #[serde(rename = "name", skip_serializing_if = "Option::is_none")]
62 pub name: Option<String>,
63 #[serde(rename = "voicemailMessage", skip_serializing_if = "Option::is_none")]
65 pub voicemail_message: Option<String>,
66 #[serde(rename = "endCallMessage", skip_serializing_if = "Option::is_none")]
68 pub end_call_message: Option<String>,
69 #[serde(rename = "endCallPhrases", skip_serializing_if = "Option::is_none")]
71 pub end_call_phrases: Option<Vec<String>>,
72 #[serde(rename = "compliancePlan", skip_serializing_if = "Option::is_none")]
73 pub compliance_plan: Option<Box<models::CompliancePlan>>,
74 #[serde(rename = "metadata", skip_serializing_if = "Option::is_none")]
76 pub metadata: Option<serde_json::Value>,
77 #[serde(rename = "analysisPlan", skip_serializing_if = "Option::is_none")]
79 pub analysis_plan: Option<Box<models::AnalysisPlan>>,
80 #[serde(rename = "artifactPlan", skip_serializing_if = "Option::is_none")]
82 pub artifact_plan: Option<Box<models::ArtifactPlan>>,
83 #[serde(rename = "messagePlan", skip_serializing_if = "Option::is_none")]
85 pub message_plan: Option<Box<models::MessagePlan>>,
86 #[serde(rename = "startSpeakingPlan", skip_serializing_if = "Option::is_none")]
88 pub start_speaking_plan: Option<Box<models::StartSpeakingPlan>>,
89 #[serde(rename = "stopSpeakingPlan", skip_serializing_if = "Option::is_none")]
91 pub stop_speaking_plan: Option<Box<models::StopSpeakingPlan>>,
92 #[serde(rename = "monitorPlan", skip_serializing_if = "Option::is_none")]
94 pub monitor_plan: Option<Box<models::MonitorPlan>>,
95 #[serde(rename = "credentialIds", skip_serializing_if = "Option::is_none")]
97 pub credential_ids: Option<Vec<String>>,
98 #[serde(rename = "server", skip_serializing_if = "Option::is_none")]
100 pub server: Option<Box<models::Server>>,
101 #[serde(rename = "hooks", skip_serializing_if = "Option::is_none")]
103 pub hooks: Option<Vec<models::AssistantHooks>>,
104 #[serde(rename = "keypadInputPlan", skip_serializing_if = "Option::is_none")]
105 pub keypad_input_plan: Option<Box<models::KeypadInputPlan>>,
106 #[serde(rename = "id")]
108 pub id: String,
109 #[serde(rename = "orgId")]
111 pub org_id: String,
112 #[serde(rename = "createdAt")]
114 pub created_at: String,
115 #[serde(rename = "updatedAt")]
117 pub updated_at: String,
118}
119
120impl Assistant {
121 pub fn new(id: String, org_id: String, created_at: String, updated_at: String) -> Assistant {
122 Assistant {
123 transcriber: None,
124 model: None,
125 voice: None,
126 first_message: None,
127 first_message_mode: None,
128 voicemail_detection: None,
129 client_messages: None,
130 server_messages: None,
131 silence_timeout_seconds: None,
132 max_duration_seconds: None,
133 background_sound: None,
134 background_denoising_enabled: None,
135 model_output_in_messages_enabled: None,
136 transport_configurations: None,
137 observability_plan: None,
138 credentials: None,
139 name: None,
140 voicemail_message: None,
141 end_call_message: None,
142 end_call_phrases: None,
143 compliance_plan: None,
144 metadata: None,
145 analysis_plan: None,
146 artifact_plan: None,
147 message_plan: None,
148 start_speaking_plan: None,
149 stop_speaking_plan: None,
150 monitor_plan: None,
151 credential_ids: None,
152 server: None,
153 hooks: None,
154 keypad_input_plan: None,
155 id,
156 org_id,
157 created_at,
158 updated_at,
159 }
160 }
161}
162#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
164pub enum FirstMessageMode {
165 #[serde(rename = "assistant-speaks-first")]
166 AssistantSpeaksFirst,
167 #[serde(rename = "assistant-speaks-first-with-model-generated-message")]
168 AssistantSpeaksFirstWithModelGeneratedMessage,
169 #[serde(rename = "assistant-waits-for-user")]
170 AssistantWaitsForUser,
171}
172
173impl Default for FirstMessageMode {
174 fn default() -> FirstMessageMode {
175 Self::AssistantSpeaksFirst
176 }
177}
178#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
180pub enum ClientMessages {
181 #[serde(rename = "conversation-update")]
182 ConversationUpdate,
183 #[serde(rename = "function-call")]
184 FunctionCall,
185 #[serde(rename = "function-call-result")]
186 FunctionCallResult,
187 #[serde(rename = "hang")]
188 Hang,
189 #[serde(rename = "language-changed")]
190 LanguageChanged,
191 #[serde(rename = "metadata")]
192 Metadata,
193 #[serde(rename = "model-output")]
194 ModelOutput,
195 #[serde(rename = "speech-update")]
196 SpeechUpdate,
197 #[serde(rename = "status-update")]
198 StatusUpdate,
199 #[serde(rename = "transcript")]
200 Transcript,
201 #[serde(rename = "tool-calls")]
202 ToolCalls,
203 #[serde(rename = "tool-calls-result")]
204 ToolCallsResult,
205 #[serde(rename = "transfer-update")]
206 TransferUpdate,
207 #[serde(rename = "user-interrupted")]
208 UserInterrupted,
209 #[serde(rename = "voice-input")]
210 VoiceInput,
211}
212
213impl Default for ClientMessages {
214 fn default() -> ClientMessages {
215 Self::ConversationUpdate
216 }
217}
218#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
220pub enum ServerMessages {
221 #[serde(rename = "conversation-update")]
222 ConversationUpdate,
223 #[serde(rename = "end-of-call-report")]
224 EndOfCallReport,
225 #[serde(rename = "function-call")]
226 FunctionCall,
227 #[serde(rename = "hang")]
228 Hang,
229 #[serde(rename = "language-changed")]
230 LanguageChanged,
231 #[serde(rename = "language-change-detected")]
232 LanguageChangeDetected,
233 #[serde(rename = "model-output")]
234 ModelOutput,
235 #[serde(rename = "phone-call-control")]
236 PhoneCallControl,
237 #[serde(rename = "speech-update")]
238 SpeechUpdate,
239 #[serde(rename = "status-update")]
240 StatusUpdate,
241 #[serde(rename = "transcript")]
242 Transcript,
243 #[serde(rename = "transcript[transcriptType=\"final\"]")]
244 TranscriptLeftSquareBracketTranscriptTypeEqualDoubleQuoteFinalDoubleQuoteRightSquareBracket,
245 #[serde(rename = "tool-calls")]
246 ToolCalls,
247 #[serde(rename = "transfer-destination-request")]
248 TransferDestinationRequest,
249 #[serde(rename = "transfer-update")]
250 TransferUpdate,
251 #[serde(rename = "user-interrupted")]
252 UserInterrupted,
253 #[serde(rename = "voice-input")]
254 VoiceInput,
255}
256
257impl Default for ServerMessages {
258 fn default() -> ServerMessages {
259 Self::ConversationUpdate
260 }
261}
262#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
264pub enum BackgroundSound {
265 #[serde(rename = "off")]
266 Off,
267 #[serde(rename = "office")]
268 Office,
269}
270
271impl Default for BackgroundSound {
272 fn default() -> BackgroundSound {
273 Self::Off
274 }
275}
276