revox 0.0.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +96 -0
  3. data/README.md +88 -22
  4. data/lib/revox/client.rb +19 -1
  5. data/lib/revox/internal/transport/base_client.rb +5 -0
  6. data/lib/revox/internal/type/base_model.rb +3 -3
  7. data/lib/revox/internal/util.rb +53 -7
  8. data/lib/revox/models/assistant_create_params.rb +1036 -11
  9. data/lib/revox/models/assistant_create_response.rb +1071 -11
  10. data/lib/revox/models/assistant_delete_params.rb +7 -1
  11. data/lib/revox/models/assistant_list_response.rb +1070 -11
  12. data/lib/revox/models/assistant_retrieve_params.rb +7 -1
  13. data/lib/revox/models/assistant_retrieve_response.rb +1066 -11
  14. data/lib/revox/models/assistant_update_params.rb +1043 -11
  15. data/lib/revox/models/assistant_update_response.rb +1097 -12
  16. data/lib/revox/models/call_create_params.rb +1063 -11
  17. data/lib/revox/models/call_create_response.rb +2507 -87
  18. data/lib/revox/models/call_retrieve_params.rb +7 -1
  19. data/lib/revox/models/call_retrieve_response.rb +2512 -87
  20. data/lib/revox/models/campaign_cancel_params.rb +20 -0
  21. data/lib/revox/models/campaign_cancel_response.rb +16 -0
  22. data/lib/revox/models/campaign_create_params.rb +239 -0
  23. data/lib/revox/models/campaign_create_response.rb +2030 -0
  24. data/lib/revox/models/campaign_delete_params.rb +20 -0
  25. data/lib/revox/models/campaign_delete_response.rb +16 -0
  26. data/lib/revox/models/campaign_export_rows_params.rb +20 -0
  27. data/lib/revox/models/campaign_export_rows_response.rb +22 -0
  28. data/lib/revox/models/campaign_get_rows_params.rb +20 -0
  29. data/lib/revox/models/campaign_get_rows_response.rb +3176 -0
  30. data/lib/revox/models/campaign_list_params.rb +14 -0
  31. data/lib/revox/models/campaign_list_response.rb +2024 -0
  32. data/lib/revox/models/campaign_retrieve_params.rb +20 -0
  33. data/lib/revox/models/campaign_retrieve_response.rb +2032 -0
  34. data/lib/revox/models/users/me_retrieve_response.rb +13 -1
  35. data/lib/revox/models/users/me_update_response.rb +13 -1
  36. data/lib/revox/models/voice_list_response.rb +55 -1
  37. data/lib/revox/models/voice_preview_params.rb +43 -3
  38. data/lib/revox/models/voice_retrieve_params.rb +7 -1
  39. data/lib/revox/models.rb +14 -2
  40. data/lib/revox/resources/assistants.rb +138 -6
  41. data/lib/revox/resources/call.rb +10 -27
  42. data/lib/revox/resources/campaigns.rb +176 -0
  43. data/lib/revox/resources/voices.rb +17 -7
  44. data/lib/revox/version.rb +1 -1
  45. data/lib/revox.rb +15 -2
  46. data/rbi/revox/client.rbi +3 -0
  47. data/rbi/revox/internal/util.rbi +28 -0
  48. data/rbi/revox/models/assistant_create_params.rbi +2135 -102
  49. data/rbi/revox/models/assistant_create_response.rbi +2454 -199
  50. data/rbi/revox/models/assistant_delete_params.rbi +11 -5
  51. data/rbi/revox/models/assistant_list_response.rbi +2448 -195
  52. data/rbi/revox/models/assistant_retrieve_params.rbi +11 -5
  53. data/rbi/revox/models/assistant_retrieve_response.rbi +2401 -210
  54. data/rbi/revox/models/assistant_update_params.rbi +2139 -100
  55. data/rbi/revox/models/assistant_update_response.rbi +2504 -198
  56. data/rbi/revox/models/call_create_params.rbi +2377 -222
  57. data/rbi/revox/models/call_create_response.rbi +5840 -594
  58. data/rbi/revox/models/call_retrieve_params.rbi +11 -5
  59. data/rbi/revox/models/call_retrieve_response.rbi +5872 -618
  60. data/rbi/revox/models/campaign_cancel_params.rbi +33 -0
  61. data/rbi/revox/models/campaign_cancel_response.rbi +23 -0
  62. data/rbi/revox/models/campaign_create_params.rbi +433 -0
  63. data/rbi/revox/models/campaign_create_response.rbi +4170 -0
  64. data/rbi/revox/models/campaign_delete_params.rbi +33 -0
  65. data/rbi/revox/models/campaign_delete_response.rbi +23 -0
  66. data/rbi/revox/models/campaign_export_rows_params.rbi +33 -0
  67. data/rbi/revox/models/campaign_export_rows_response.rbi +29 -0
  68. data/rbi/revox/models/campaign_get_rows_params.rbi +33 -0
  69. data/rbi/revox/models/campaign_get_rows_response.rbi +6706 -0
  70. data/rbi/revox/models/campaign_list_params.rbi +27 -0
  71. data/rbi/revox/models/campaign_list_response.rbi +4156 -0
  72. data/rbi/revox/models/campaign_retrieve_params.rbi +33 -0
  73. data/rbi/revox/models/campaign_retrieve_response.rbi +4175 -0
  74. data/rbi/revox/models/users/me_retrieve_response.rbi +13 -3
  75. data/rbi/revox/models/users/me_update_response.rbi +13 -3
  76. data/rbi/revox/models/voice_list_response.rbi +105 -3
  77. data/rbi/revox/models/voice_preview_params.rbi +60 -2
  78. data/rbi/revox/models/voice_retrieve_params.rbi +6 -1
  79. data/rbi/revox/models.rbi +14 -2
  80. data/rbi/revox/resources/assistants.rbi +301 -6
  81. data/rbi/revox/resources/call.rbi +10 -19
  82. data/rbi/revox/resources/campaigns.rbi +121 -0
  83. data/rbi/revox/resources/voices.rbi +15 -5
  84. data/sig/revox/client.rbs +2 -0
  85. data/sig/revox/internal/util.rbs +14 -0
  86. data/sig/revox/models/assistant_create_params.rbs +841 -4
  87. data/sig/revox/models/assistant_create_response.rbs +860 -3
  88. data/sig/revox/models/assistant_delete_params.rbs +8 -3
  89. data/sig/revox/models/assistant_list_response.rbs +860 -3
  90. data/sig/revox/models/assistant_retrieve_params.rbs +8 -3
  91. data/sig/revox/models/assistant_retrieve_response.rbs +859 -3
  92. data/sig/revox/models/assistant_update_params.rbs +846 -4
  93. data/sig/revox/models/assistant_update_response.rbs +886 -6
  94. data/sig/revox/models/call_create_params.rbs +844 -6
  95. data/sig/revox/models/call_create_response.rbs +2166 -79
  96. data/sig/revox/models/call_retrieve_params.rbs +9 -3
  97. data/sig/revox/models/call_retrieve_response.rbs +2166 -79
  98. data/sig/revox/models/campaign_cancel_params.rbs +20 -0
  99. data/sig/revox/models/campaign_cancel_response.rbs +13 -0
  100. data/sig/revox/models/campaign_create_params.rbs +203 -0
  101. data/sig/revox/models/campaign_create_response.rbs +1694 -0
  102. data/sig/revox/models/campaign_delete_params.rbs +20 -0
  103. data/sig/revox/models/campaign_delete_response.rbs +13 -0
  104. data/sig/revox/models/campaign_export_rows_params.rbs +20 -0
  105. data/sig/revox/models/campaign_export_rows_response.rbs +15 -0
  106. data/sig/revox/models/campaign_get_rows_params.rbs +20 -0
  107. data/sig/revox/models/campaign_get_rows_response.rbs +2688 -0
  108. data/sig/revox/models/campaign_list_params.rbs +14 -0
  109. data/sig/revox/models/campaign_list_response.rbs +1694 -0
  110. data/sig/revox/models/campaign_retrieve_params.rbs +20 -0
  111. data/sig/revox/models/campaign_retrieve_response.rbs +1694 -0
  112. data/sig/revox/models/users/me_retrieve_response.rbs +8 -3
  113. data/sig/revox/models/users/me_update_response.rbs +8 -3
  114. data/sig/revox/models/voice_list_response.rbs +45 -3
  115. data/sig/revox/models/voice_preview_params.rbs +35 -1
  116. data/sig/revox/models/voice_retrieve_params.rbs +5 -1
  117. data/sig/revox/models.rbs +14 -2
  118. data/sig/revox/resources/assistants.rbs +54 -0
  119. data/sig/revox/resources/call.rbs +0 -6
  120. data/sig/revox/resources/campaigns.rbs +49 -0
  121. data/sig/revox/resources/voices.rbs +3 -0
  122. metadata +47 -8
  123. data/lib/revox/models/call_list_params.rb +0 -29
  124. data/lib/revox/models/call_list_response.rb +0 -197
  125. data/rbi/revox/models/call_list_params.rbi +0 -47
  126. data/rbi/revox/models/call_list_response.rbi +0 -401
  127. data/sig/revox/models/call_list_params.rbs +0 -28
  128. data/sig/revox/models/call_list_response.rbs +0 -171
@@ -43,8 +43,25 @@ module Revox
43
43
  sig { returns(String) }
44
44
  attr_accessor :id
45
45
 
46
- # The background sound to play during the call. Useful to give the impression that
47
- # your AI agent is in an office.
46
+ # Which call outcomes trigger the after-call SMS. When empty or null, no
47
+ # after-call SMS is sent. Use "none" when outcome is null.
48
+ sig do
49
+ returns(
50
+ T.nilable(
51
+ T::Array[
52
+ Revox::Models::AssistantListResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
53
+ ]
54
+ )
55
+ )
56
+ end
57
+ attr_accessor :after_call_sms_outcomes
58
+
59
+ # Prompt / instructions for the after-call SMS. Supports {{variable}}
60
+ # placeholders. When null, no after-call SMS is sent.
61
+ sig { returns(T.nilable(String)) }
62
+ attr_accessor :after_call_sms_prompt
63
+
64
+ # Ambient background sound to play during the call. null disables it.
48
65
  sig do
49
66
  returns(
50
67
  T.nilable(
@@ -54,6 +71,10 @@ module Revox
54
71
  end
55
72
  attr_accessor :background_sound
56
73
 
74
+ # Volume of the ambient background sound (0 = silent, 1 = max).
75
+ sig { returns(Float) }
76
+ attr_accessor :background_sound_volume
77
+
57
78
  sig do
58
79
  returns(
59
80
  T.nilable(Revox::Models::AssistantListResponse::Assistant::Calendly)
@@ -92,9 +113,51 @@ module Revox
92
113
  end
93
114
  attr_writer :call_retry_config
94
115
 
116
+ # Optional Cartesia pronunciation dictionary ID linked to this assistant.
117
+ sig { returns(T.nilable(String)) }
118
+ attr_accessor :cartesia_dictionary_pronunciation_id
119
+
95
120
  sig { returns(T.anything) }
96
121
  attr_accessor :created_at
97
122
 
123
+ sig do
124
+ returns(
125
+ T.nilable(
126
+ T::Array[
127
+ Revox::Models::AssistantListResponse::Assistant::CustomTool
128
+ ]
129
+ )
130
+ )
131
+ end
132
+ attr_accessor :custom_tools
133
+
134
+ # Email address(es) to receive notifications when a call ends with a matching
135
+ # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
136
+ # bob@y.com").
137
+ sig { returns(T.nilable(String)) }
138
+ attr_accessor :email_notification_address
139
+
140
+ # The language used for the notification email content. One of "en" or "fr".
141
+ sig do
142
+ returns(
143
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationLanguage::TaggedSymbol
144
+ )
145
+ end
146
+ attr_accessor :email_notification_language
147
+
148
+ # Which call outcomes trigger an email notification. E.g. ["interested",
149
+ # "completed", "none"]. Use "none" when outcome is null.
150
+ sig do
151
+ returns(
152
+ T.nilable(
153
+ T::Array[
154
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
155
+ ]
156
+ )
157
+ )
158
+ end
159
+ attr_accessor :email_notification_outcomes
160
+
98
161
  sig { returns(T.nilable(String)) }
99
162
  attr_accessor :end_of_call_sentence
100
163
 
@@ -112,6 +175,22 @@ module Revox
112
175
  end
113
176
  attr_accessor :first_sentence_mode
114
177
 
178
+ # Override the default outbound phone number for calls placed with this assistant.
179
+ # When null, the organization's default phone number is used.
180
+ sig { returns(T.nilable(String)) }
181
+ attr_accessor :from_phone_number
182
+
183
+ # Warm or cold transfer when transfer_phone_number is set; null when transfer is
184
+ # not configured.
185
+ sig do
186
+ returns(
187
+ T.nilable(
188
+ Revox::Models::AssistantListResponse::Assistant::HumanTransferMode::TaggedSymbol
189
+ )
190
+ )
191
+ end
192
+ attr_accessor :human_transfer_mode
193
+
115
194
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
116
195
  # skip turns to navigate phone menus.
117
196
  sig { returns(T::Boolean) }
@@ -124,20 +203,95 @@ module Revox
124
203
  end
125
204
  attr_accessor :llm_model
126
205
 
206
+ # Public URL of the brand logo shown on the assistant's demo page. Null when
207
+ # unset.
208
+ sig { returns(T.nilable(String)) }
209
+ attr_accessor :logo_url
210
+
127
211
  # The maximum duration of the call in seconds. This is the maximum time the call
128
212
  # will be allowed to run.
129
213
  sig { returns(Float) }
130
214
  attr_accessor :max_call_duration_secs
131
215
 
216
+ # Optional message the agent will say, without being interruptible, when the call
217
+ # reaches its max duration. Kept short so it fits inside the farewell buffer. If
218
+ # null, the call ends silently.
219
+ sig { returns(T.nilable(String)) }
220
+ attr_accessor :max_duration_end_message
221
+
132
222
  sig { returns(String) }
133
223
  attr_accessor :name
134
224
 
135
225
  sig { returns(String) }
136
226
  attr_accessor :organization_id
137
227
 
228
+ sig do
229
+ returns(
230
+ T.nilable(Revox::Models::AssistantListResponse::Assistant::Position)
231
+ )
232
+ end
233
+ attr_reader :position
234
+
235
+ sig do
236
+ params(
237
+ position:
238
+ T.nilable(
239
+ Revox::Models::AssistantListResponse::Assistant::Position::OrHash
240
+ )
241
+ ).void
242
+ end
243
+ attr_writer :position
244
+
138
245
  sig { returns(String) }
139
246
  attr_accessor :prompt
140
247
 
248
+ sig do
249
+ returns(
250
+ T.nilable(
251
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow
252
+ )
253
+ )
254
+ end
255
+ attr_reader :prompt_flow
256
+
257
+ sig do
258
+ params(
259
+ prompt_flow:
260
+ T.nilable(
261
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::OrHash
262
+ )
263
+ ).void
264
+ end
265
+ attr_writer :prompt_flow
266
+
267
+ sig do
268
+ returns(
269
+ T.nilable(Revox::Models::AssistantListResponse::Assistant::Slack)
270
+ )
271
+ end
272
+ attr_reader :slack
273
+
274
+ sig do
275
+ params(
276
+ slack:
277
+ T.nilable(
278
+ Revox::Models::AssistantListResponse::Assistant::Slack::OrHash
279
+ )
280
+ ).void
281
+ end
282
+ attr_writer :slack
283
+
284
+ # Enable SMS tool during calls. When enabled, the agent can send SMS messages to
285
+ # the user on the call.
286
+ sig { returns(T::Boolean) }
287
+ attr_accessor :sms_enabled
288
+
289
+ # Hardcoded SMS template to send during calls. When set, this exact text is sent
290
+ # instead of letting the agent generate the message. Supports {{variable}}
291
+ # placeholders.
292
+ sig { returns(T.nilable(String)) }
293
+ attr_accessor :sms_template
294
+
141
295
  # The structured output config to use for the call. This is used to extract the
142
296
  # data from the call (like email, name, company name, etc.).
143
297
  sig do
@@ -151,10 +305,73 @@ module Revox
151
305
  end
152
306
  attr_accessor :structured_output_config
153
307
 
308
+ # Custom prompt for structured data extraction. If not provided, a default prompt
309
+ # is used. Available variables: {{transcript}}, {{call_direction}},
310
+ # {{user_phone_number}}, {{agent_phone_number}}.
311
+ sig { returns(T.nilable(String)) }
312
+ attr_accessor :structured_output_prompt
313
+
314
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
315
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
316
+ # replacing existing entries.
317
+ sig do
318
+ returns(
319
+ T.nilable(
320
+ Revox::Models::AssistantListResponse::Assistant::SttContext
321
+ )
322
+ )
323
+ end
324
+ attr_reader :stt_context
325
+
326
+ sig do
327
+ params(
328
+ stt_context:
329
+ T.nilable(
330
+ Revox::Models::AssistantListResponse::Assistant::SttContext::OrHash
331
+ )
332
+ ).void
333
+ end
334
+ attr_writer :stt_context
335
+
336
+ # Transcriber (speech-to-text) model used for the assistant.
337
+ sig do
338
+ returns(
339
+ Revox::Models::AssistantListResponse::Assistant::SttModel::TaggedSymbol
340
+ )
341
+ end
342
+ attr_accessor :stt_model
343
+
344
+ # Audio clip to play while the agent is processing a response. One of the built-in
345
+ # LiveKit audio clips; null disables it.
346
+ sig do
347
+ returns(
348
+ T.nilable(
349
+ Revox::Models::AssistantListResponse::Assistant::ThinkingSound::TaggedSymbol
350
+ )
351
+ )
352
+ end
353
+ attr_accessor :thinking_sound
354
+
355
+ # Probability [0..1] that the thinking sound plays on any given turn; otherwise
356
+ # the agent is silent while thinking.
357
+ sig { returns(Float) }
358
+ attr_accessor :thinking_sound_probability
359
+
360
+ # Volume of the thinking sound (0 = silent, 1 = max).
361
+ sig { returns(Float) }
362
+ attr_accessor :thinking_sound_volume
363
+
154
364
  # Phone number to transfer calls to when users request to speak to a human agent.
155
365
  sig { returns(T.nilable(String)) }
156
366
  attr_accessor :transfer_phone_number
157
367
 
368
+ sig do
369
+ returns(
370
+ Revox::Models::AssistantListResponse::Assistant::Type::TaggedSymbol
371
+ )
372
+ end
373
+ attr_accessor :type
374
+
158
375
  sig { returns(T.anything) }
159
376
  attr_accessor :updated_at
160
377
 
@@ -180,10 +397,57 @@ module Revox
180
397
  sig { returns(T.nilable(String)) }
181
398
  attr_accessor :voicemail_message
182
399
 
400
+ # Prompt / instructions for the voicemail SMS. Supports {{variable}} placeholders.
401
+ # When null, no SMS is sent on voicemail.
402
+ sig { returns(T.nilable(String)) }
403
+ attr_accessor :voicemail_sms_prompt
404
+
405
+ # Warm transfer only: instructions for the supervisor handoff summary; null when
406
+ # not configured or cold transfer.
407
+ sig { returns(T.nilable(String)) }
408
+ attr_accessor :warm_transfer_summary_instructions
409
+
183
410
  # The webhook URL to call when the call is completed.
184
411
  sig { returns(T.nilable(String)) }
185
412
  attr_accessor :webhook_url
186
413
 
414
+ sig do
415
+ returns(
416
+ T.nilable(Revox::Models::AssistantListResponse::Assistant::Zoho)
417
+ )
418
+ end
419
+ attr_reader :zoho
420
+
421
+ sig do
422
+ params(
423
+ zoho:
424
+ T.nilable(
425
+ Revox::Models::AssistantListResponse::Assistant::Zoho::OrHash
426
+ )
427
+ ).void
428
+ end
429
+ attr_writer :zoho
430
+
431
+ # The user who created the assistant.
432
+ sig do
433
+ returns(
434
+ T.nilable(
435
+ Revox::Models::AssistantListResponse::Assistant::CreatedBy
436
+ )
437
+ )
438
+ end
439
+ attr_reader :created_by
440
+
441
+ sig do
442
+ params(
443
+ created_by:
444
+ T.nilable(
445
+ Revox::Models::AssistantListResponse::Assistant::CreatedBy::OrHash
446
+ )
447
+ ).void
448
+ end
449
+ attr_writer :created_by
450
+
187
451
  sig do
188
452
  returns(
189
453
  T.nilable(
@@ -203,6 +467,12 @@ module Revox
203
467
  end
204
468
  attr_writer :faq_items
205
469
 
470
+ sig { returns(T.nilable(T::Boolean)) }
471
+ attr_reader :is_realestate_assistant
472
+
473
+ sig { params(is_realestate_assistant: T::Boolean).void }
474
+ attr_writer :is_realestate_assistant
475
+
206
476
  sig { returns(T.nilable(Float)) }
207
477
  attr_reader :pending_faq_count
208
478
 
@@ -212,10 +482,18 @@ module Revox
212
482
  sig do
213
483
  params(
214
484
  id: String,
485
+ after_call_sms_outcomes:
486
+ T.nilable(
487
+ T::Array[
488
+ Revox::Models::AssistantListResponse::Assistant::AfterCallSMSOutcome::OrSymbol
489
+ ]
490
+ ),
491
+ after_call_sms_prompt: T.nilable(String),
215
492
  background_sound:
216
493
  T.nilable(
217
494
  Revox::Models::AssistantListResponse::Assistant::BackgroundSound::OrSymbol
218
495
  ),
496
+ background_sound_volume: Float,
219
497
  calendly:
220
498
  T.nilable(
221
499
  Revox::Models::AssistantListResponse::Assistant::Calendly::OrHash
@@ -224,81 +502,217 @@ module Revox
224
502
  T.nilable(
225
503
  Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::OrHash
226
504
  ),
505
+ cartesia_dictionary_pronunciation_id: T.nilable(String),
227
506
  created_at: T.anything,
507
+ custom_tools:
508
+ T.nilable(
509
+ T::Array[
510
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::OrHash
511
+ ]
512
+ ),
513
+ email_notification_address: T.nilable(String),
514
+ email_notification_language:
515
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationLanguage::OrSymbol,
516
+ email_notification_outcomes:
517
+ T.nilable(
518
+ T::Array[
519
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationOutcome::OrSymbol
520
+ ]
521
+ ),
228
522
  end_of_call_sentence: T.nilable(String),
229
523
  first_sentence: T.nilable(String),
230
524
  first_sentence_delay_ms: Integer,
231
525
  first_sentence_mode:
232
526
  Revox::Models::AssistantListResponse::Assistant::FirstSentenceMode::OrSymbol,
527
+ from_phone_number: T.nilable(String),
528
+ human_transfer_mode:
529
+ T.nilable(
530
+ Revox::Models::AssistantListResponse::Assistant::HumanTransferMode::OrSymbol
531
+ ),
233
532
  ivr_navigation_enabled: T::Boolean,
234
533
  llm_model:
235
534
  T.any(
236
535
  Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::OrHash,
237
- Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember1::OrHash
536
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember1::OrHash,
537
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember2::OrHash,
538
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember3::OrHash
238
539
  ),
540
+ logo_url: T.nilable(String),
239
541
  max_call_duration_secs: Float,
542
+ max_duration_end_message: T.nilable(String),
240
543
  name: String,
241
544
  organization_id: String,
545
+ position:
546
+ T.nilable(
547
+ Revox::Models::AssistantListResponse::Assistant::Position::OrHash
548
+ ),
242
549
  prompt: String,
550
+ prompt_flow:
551
+ T.nilable(
552
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::OrHash
553
+ ),
554
+ slack:
555
+ T.nilable(
556
+ Revox::Models::AssistantListResponse::Assistant::Slack::OrHash
557
+ ),
558
+ sms_enabled: T::Boolean,
559
+ sms_template: T.nilable(String),
243
560
  structured_output_config:
244
561
  T.nilable(
245
562
  T::Array[
246
563
  Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::OrHash
247
564
  ]
248
565
  ),
566
+ structured_output_prompt: T.nilable(String),
567
+ stt_context:
568
+ T.nilable(
569
+ Revox::Models::AssistantListResponse::Assistant::SttContext::OrHash
570
+ ),
571
+ stt_model:
572
+ Revox::Models::AssistantListResponse::Assistant::SttModel::OrSymbol,
573
+ thinking_sound:
574
+ T.nilable(
575
+ Revox::Models::AssistantListResponse::Assistant::ThinkingSound::OrSymbol
576
+ ),
577
+ thinking_sound_probability: Float,
578
+ thinking_sound_volume: Float,
249
579
  transfer_phone_number: T.nilable(String),
580
+ type:
581
+ Revox::Models::AssistantListResponse::Assistant::Type::OrSymbol,
250
582
  updated_at: T.anything,
251
583
  voice:
252
584
  T.nilable(
253
585
  Revox::Models::AssistantListResponse::Assistant::Voice::OrHash
254
586
  ),
255
587
  voicemail_message: T.nilable(String),
588
+ voicemail_sms_prompt: T.nilable(String),
589
+ warm_transfer_summary_instructions: T.nilable(String),
256
590
  webhook_url: T.nilable(String),
591
+ zoho:
592
+ T.nilable(
593
+ Revox::Models::AssistantListResponse::Assistant::Zoho::OrHash
594
+ ),
595
+ created_by:
596
+ T.nilable(
597
+ Revox::Models::AssistantListResponse::Assistant::CreatedBy::OrHash
598
+ ),
257
599
  faq_items:
258
600
  T::Array[
259
601
  Revox::Models::AssistantListResponse::Assistant::FaqItem::OrHash
260
602
  ],
603
+ is_realestate_assistant: T::Boolean,
261
604
  pending_faq_count: Float
262
605
  ).returns(T.attached_class)
263
606
  end
264
607
  def self.new(
265
608
  id:,
266
- # The background sound to play during the call. Useful to give the impression that
267
- # your AI agent is in an office.
609
+ # Which call outcomes trigger the after-call SMS. When empty or null, no
610
+ # after-call SMS is sent. Use "none" when outcome is null.
611
+ after_call_sms_outcomes:,
612
+ # Prompt / instructions for the after-call SMS. Supports {{variable}}
613
+ # placeholders. When null, no after-call SMS is sent.
614
+ after_call_sms_prompt:,
615
+ # Ambient background sound to play during the call. null disables it.
268
616
  background_sound:,
617
+ # Volume of the ambient background sound (0 = silent, 1 = max).
618
+ background_sound_volume:,
269
619
  calendly:,
270
620
  # Configuration for call retry behavior including time windows, delays, and max
271
621
  # iterations. If not provided, defaults will be used.
272
622
  call_retry_config:,
623
+ # Optional Cartesia pronunciation dictionary ID linked to this assistant.
624
+ cartesia_dictionary_pronunciation_id:,
273
625
  created_at:,
626
+ custom_tools:,
627
+ # Email address(es) to receive notifications when a call ends with a matching
628
+ # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
629
+ # bob@y.com").
630
+ email_notification_address:,
631
+ # The language used for the notification email content. One of "en" or "fr".
632
+ email_notification_language:,
633
+ # Which call outcomes trigger an email notification. E.g. ["interested",
634
+ # "completed", "none"]. Use "none" when outcome is null.
635
+ email_notification_outcomes:,
274
636
  end_of_call_sentence:,
275
637
  first_sentence:,
276
638
  # Delay in milliseconds before speaking the first sentence. Default: 400.
277
639
  first_sentence_delay_ms:,
278
640
  first_sentence_mode:,
641
+ # Override the default outbound phone number for calls placed with this assistant.
642
+ # When null, the organization's default phone number is used.
643
+ from_phone_number:,
644
+ # Warm or cold transfer when transfer_phone_number is set; null when transfer is
645
+ # not configured.
646
+ human_transfer_mode:,
279
647
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
280
648
  # skip turns to navigate phone menus.
281
649
  ivr_navigation_enabled:,
282
650
  llm_model:,
651
+ # Public URL of the brand logo shown on the assistant's demo page. Null when
652
+ # unset.
653
+ logo_url:,
283
654
  # The maximum duration of the call in seconds. This is the maximum time the call
284
655
  # will be allowed to run.
285
656
  max_call_duration_secs:,
657
+ # Optional message the agent will say, without being interruptible, when the call
658
+ # reaches its max duration. Kept short so it fits inside the farewell buffer. If
659
+ # null, the call ends silently.
660
+ max_duration_end_message:,
286
661
  name:,
287
662
  organization_id:,
663
+ position:,
288
664
  prompt:,
665
+ prompt_flow:,
666
+ slack:,
667
+ # Enable SMS tool during calls. When enabled, the agent can send SMS messages to
668
+ # the user on the call.
669
+ sms_enabled:,
670
+ # Hardcoded SMS template to send during calls. When set, this exact text is sent
671
+ # instead of letting the agent generate the message. Supports {{variable}}
672
+ # placeholders.
673
+ sms_template:,
289
674
  # The structured output config to use for the call. This is used to extract the
290
675
  # data from the call (like email, name, company name, etc.).
291
676
  structured_output_config:,
677
+ # Custom prompt for structured data extraction. If not provided, a default prompt
678
+ # is used. Available variables: {{transcript}}, {{call_direction}},
679
+ # {{user_phone_number}}, {{agent_phone_number}}.
680
+ structured_output_prompt:,
681
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
682
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
683
+ # replacing existing entries.
684
+ stt_context:,
685
+ # Transcriber (speech-to-text) model used for the assistant.
686
+ stt_model:,
687
+ # Audio clip to play while the agent is processing a response. One of the built-in
688
+ # LiveKit audio clips; null disables it.
689
+ thinking_sound:,
690
+ # Probability [0..1] that the thinking sound plays on any given turn; otherwise
691
+ # the agent is silent while thinking.
692
+ thinking_sound_probability:,
693
+ # Volume of the thinking sound (0 = silent, 1 = max).
694
+ thinking_sound_volume:,
292
695
  # Phone number to transfer calls to when users request to speak to a human agent.
293
696
  transfer_phone_number:,
697
+ type:,
294
698
  updated_at:,
295
699
  voice:,
296
700
  # If set, when voicemail is detected the agent will speak this message then hang
297
701
  # up; if null, hang up immediately.
298
702
  voicemail_message:,
703
+ # Prompt / instructions for the voicemail SMS. Supports {{variable}} placeholders.
704
+ # When null, no SMS is sent on voicemail.
705
+ voicemail_sms_prompt:,
706
+ # Warm transfer only: instructions for the supervisor handoff summary; null when
707
+ # not configured or cold transfer.
708
+ warm_transfer_summary_instructions:,
299
709
  # The webhook URL to call when the call is completed.
300
710
  webhook_url:,
711
+ zoho:,
712
+ # The user who created the assistant.
713
+ created_by: nil,
301
714
  faq_items: nil,
715
+ is_realestate_assistant: nil,
302
716
  pending_faq_count: nil
303
717
  )
304
718
  end
@@ -307,10 +721,18 @@ module Revox
307
721
  override.returns(
308
722
  {
309
723
  id: String,
724
+ after_call_sms_outcomes:
725
+ T.nilable(
726
+ T::Array[
727
+ Revox::Models::AssistantListResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
728
+ ]
729
+ ),
730
+ after_call_sms_prompt: T.nilable(String),
310
731
  background_sound:
311
732
  T.nilable(
312
733
  Revox::Models::AssistantListResponse::Assistant::BackgroundSound::TaggedSymbol
313
734
  ),
735
+ background_sound_volume: Float,
314
736
  calendly:
315
737
  T.nilable(
316
738
  Revox::Models::AssistantListResponse::Assistant::Calendly
@@ -319,37 +741,100 @@ module Revox
319
741
  T.nilable(
320
742
  Revox::Models::AssistantListResponse::Assistant::CallRetryConfig
321
743
  ),
744
+ cartesia_dictionary_pronunciation_id: T.nilable(String),
322
745
  created_at: T.anything,
746
+ custom_tools:
747
+ T.nilable(
748
+ T::Array[
749
+ Revox::Models::AssistantListResponse::Assistant::CustomTool
750
+ ]
751
+ ),
752
+ email_notification_address: T.nilable(String),
753
+ email_notification_language:
754
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationLanguage::TaggedSymbol,
755
+ email_notification_outcomes:
756
+ T.nilable(
757
+ T::Array[
758
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
759
+ ]
760
+ ),
323
761
  end_of_call_sentence: T.nilable(String),
324
762
  first_sentence: T.nilable(String),
325
763
  first_sentence_delay_ms: Integer,
326
764
  first_sentence_mode:
327
765
  Revox::Models::AssistantListResponse::Assistant::FirstSentenceMode::TaggedSymbol,
766
+ from_phone_number: T.nilable(String),
767
+ human_transfer_mode:
768
+ T.nilable(
769
+ Revox::Models::AssistantListResponse::Assistant::HumanTransferMode::TaggedSymbol
770
+ ),
328
771
  ivr_navigation_enabled: T::Boolean,
329
772
  llm_model:
330
773
  Revox::Models::AssistantListResponse::Assistant::LlmModel::Variants,
774
+ logo_url: T.nilable(String),
331
775
  max_call_duration_secs: Float,
776
+ max_duration_end_message: T.nilable(String),
332
777
  name: String,
333
778
  organization_id: String,
779
+ position:
780
+ T.nilable(
781
+ Revox::Models::AssistantListResponse::Assistant::Position
782
+ ),
334
783
  prompt: String,
784
+ prompt_flow:
785
+ T.nilable(
786
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow
787
+ ),
788
+ slack:
789
+ T.nilable(
790
+ Revox::Models::AssistantListResponse::Assistant::Slack
791
+ ),
792
+ sms_enabled: T::Boolean,
793
+ sms_template: T.nilable(String),
335
794
  structured_output_config:
336
795
  T.nilable(
337
796
  T::Array[
338
797
  Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig
339
798
  ]
340
799
  ),
800
+ structured_output_prompt: T.nilable(String),
801
+ stt_context:
802
+ T.nilable(
803
+ Revox::Models::AssistantListResponse::Assistant::SttContext
804
+ ),
805
+ stt_model:
806
+ Revox::Models::AssistantListResponse::Assistant::SttModel::TaggedSymbol,
807
+ thinking_sound:
808
+ T.nilable(
809
+ Revox::Models::AssistantListResponse::Assistant::ThinkingSound::TaggedSymbol
810
+ ),
811
+ thinking_sound_probability: Float,
812
+ thinking_sound_volume: Float,
341
813
  transfer_phone_number: T.nilable(String),
814
+ type:
815
+ Revox::Models::AssistantListResponse::Assistant::Type::TaggedSymbol,
342
816
  updated_at: T.anything,
343
817
  voice:
344
818
  T.nilable(
345
819
  Revox::Models::AssistantListResponse::Assistant::Voice
346
820
  ),
347
821
  voicemail_message: T.nilable(String),
822
+ voicemail_sms_prompt: T.nilable(String),
823
+ warm_transfer_summary_instructions: T.nilable(String),
348
824
  webhook_url: T.nilable(String),
825
+ zoho:
826
+ T.nilable(
827
+ Revox::Models::AssistantListResponse::Assistant::Zoho
828
+ ),
829
+ created_by:
830
+ T.nilable(
831
+ Revox::Models::AssistantListResponse::Assistant::CreatedBy
832
+ ),
349
833
  faq_items:
350
834
  T::Array[
351
835
  Revox::Models::AssistantListResponse::Assistant::FaqItem
352
836
  ],
837
+ is_realestate_assistant: T::Boolean,
353
838
  pending_faq_count: Float
354
839
  }
355
840
  )
@@ -357,30 +842,63 @@ module Revox
357
842
  def to_hash
358
843
  end
359
844
 
360
- # The background sound to play during the call. Useful to give the impression that
361
- # your AI agent is in an office.
362
- module BackgroundSound
845
+ module AfterCallSMSOutcome
363
846
  extend Revox::Internal::Type::Enum
364
847
 
365
848
  TaggedSymbol =
366
849
  T.type_alias do
367
850
  T.all(
368
851
  Symbol,
369
- Revox::Models::AssistantListResponse::Assistant::BackgroundSound
852
+ Revox::Models::AssistantListResponse::Assistant::AfterCallSMSOutcome
370
853
  )
371
854
  end
372
855
  OrSymbol = T.type_alias { T.any(Symbol, String) }
373
856
 
374
- AUDIO_OFFICE_OGG =
857
+ NOT_INTERESTED =
375
858
  T.let(
376
- :"audio/office.ogg",
377
- Revox::Models::AssistantListResponse::Assistant::BackgroundSound::TaggedSymbol
859
+ :not_interested,
860
+ Revox::Models::AssistantListResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
861
+ )
862
+ INTERESTED =
863
+ T.let(
864
+ :interested,
865
+ Revox::Models::AssistantListResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
866
+ )
867
+ COMPLETED =
868
+ T.let(
869
+ :completed,
870
+ Revox::Models::AssistantListResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
871
+ )
872
+ REQUESTED_CALLBACK_LATER =
873
+ T.let(
874
+ :requested_callback_later,
875
+ Revox::Models::AssistantListResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
876
+ )
877
+ REQUESTED_CALLBACK_NEW_NUMBER =
878
+ T.let(
879
+ :requested_callback_new_number,
880
+ Revox::Models::AssistantListResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
881
+ )
882
+ DO_NOT_CONTACT =
883
+ T.let(
884
+ :do_not_contact,
885
+ Revox::Models::AssistantListResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
886
+ )
887
+ AI_AVERSE =
888
+ T.let(
889
+ :ai_averse,
890
+ Revox::Models::AssistantListResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
891
+ )
892
+ NONE =
893
+ T.let(
894
+ :none,
895
+ Revox::Models::AssistantListResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
378
896
  )
379
897
 
380
898
  sig do
381
899
  override.returns(
382
900
  T::Array[
383
- Revox::Models::AssistantListResponse::Assistant::BackgroundSound::TaggedSymbol
901
+ Revox::Models::AssistantListResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
384
902
  ]
385
903
  )
386
904
  end
@@ -388,12 +906,42 @@ module Revox
388
906
  end
389
907
  end
390
908
 
391
- class Calendly < Revox::Internal::Type::BaseModel
392
- OrHash =
909
+ # Ambient background sound to play during the call. null disables it.
910
+ module BackgroundSound
911
+ extend Revox::Internal::Type::Enum
912
+
913
+ TaggedSymbol =
393
914
  T.type_alias do
394
- T.any(
395
- Revox::Models::AssistantListResponse::Assistant::Calendly,
396
- Revox::Internal::AnyHash
915
+ T.all(
916
+ Symbol,
917
+ Revox::Models::AssistantListResponse::Assistant::BackgroundSound
918
+ )
919
+ end
920
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
921
+
922
+ AUDIO_OFFICE_OGG =
923
+ T.let(
924
+ :"audio/office.ogg",
925
+ Revox::Models::AssistantListResponse::Assistant::BackgroundSound::TaggedSymbol
926
+ )
927
+
928
+ sig do
929
+ override.returns(
930
+ T::Array[
931
+ Revox::Models::AssistantListResponse::Assistant::BackgroundSound::TaggedSymbol
932
+ ]
933
+ )
934
+ end
935
+ def self.values
936
+ end
937
+ end
938
+
939
+ class Calendly < Revox::Internal::Type::BaseModel
940
+ OrHash =
941
+ T.type_alias do
942
+ T.any(
943
+ Revox::Models::AssistantListResponse::Assistant::Calendly,
944
+ Revox::Internal::AnyHash
397
945
  )
398
946
  end
399
947
 
@@ -436,6 +984,24 @@ module Revox
436
984
  )
437
985
  end
438
986
 
987
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
988
+ # Monday through Friday.
989
+ sig do
990
+ returns(
991
+ T::Array[
992
+ Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
993
+ ]
994
+ )
995
+ end
996
+ attr_accessor :allowed_days
997
+
998
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
999
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
1000
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
1001
+ # Default: false.
1002
+ sig { returns(T::Boolean) }
1003
+ attr_accessor :call_twice_in_a_row
1004
+
439
1005
  sig do
440
1006
  returns(
441
1007
  T::Array[
@@ -459,6 +1025,11 @@ module Revox
459
1025
  # iterations. If not provided, defaults will be used.
460
1026
  sig do
461
1027
  params(
1028
+ allowed_days:
1029
+ T::Array[
1030
+ Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::AllowedDay::OrSymbol
1031
+ ],
1032
+ call_twice_in_a_row: T::Boolean,
462
1033
  calling_windows:
463
1034
  T::Array[
464
1035
  Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::CallingWindow::OrHash
@@ -468,6 +1039,14 @@ module Revox
468
1039
  ).returns(T.attached_class)
469
1040
  end
470
1041
  def self.new(
1042
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
1043
+ # Monday through Friday.
1044
+ allowed_days:,
1045
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
1046
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
1047
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
1048
+ # Default: false.
1049
+ call_twice_in_a_row:,
471
1050
  calling_windows:,
472
1051
  # Maximum number of call retry attempts. Default: 3.
473
1052
  max_retry_attempts:,
@@ -481,6 +1060,11 @@ module Revox
481
1060
  sig do
482
1061
  override.returns(
483
1062
  {
1063
+ allowed_days:
1064
+ T::Array[
1065
+ Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1066
+ ],
1067
+ call_twice_in_a_row: T::Boolean,
484
1068
  calling_windows:
485
1069
  T::Array[
486
1070
  Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::CallingWindow
@@ -493,6 +1077,65 @@ module Revox
493
1077
  def to_hash
494
1078
  end
495
1079
 
1080
+ module AllowedDay
1081
+ extend Revox::Internal::Type::Enum
1082
+
1083
+ TaggedSymbol =
1084
+ T.type_alias do
1085
+ T.all(
1086
+ Symbol,
1087
+ Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::AllowedDay
1088
+ )
1089
+ end
1090
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1091
+
1092
+ MONDAY =
1093
+ T.let(
1094
+ :monday,
1095
+ Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1096
+ )
1097
+ TUESDAY =
1098
+ T.let(
1099
+ :tuesday,
1100
+ Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1101
+ )
1102
+ WEDNESDAY =
1103
+ T.let(
1104
+ :wednesday,
1105
+ Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1106
+ )
1107
+ THURSDAY =
1108
+ T.let(
1109
+ :thursday,
1110
+ Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1111
+ )
1112
+ FRIDAY =
1113
+ T.let(
1114
+ :friday,
1115
+ Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1116
+ )
1117
+ SATURDAY =
1118
+ T.let(
1119
+ :saturday,
1120
+ Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1121
+ )
1122
+ SUNDAY =
1123
+ T.let(
1124
+ :sunday,
1125
+ Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1126
+ )
1127
+
1128
+ sig do
1129
+ override.returns(
1130
+ T::Array[
1131
+ Revox::Models::AssistantListResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1132
+ ]
1133
+ )
1134
+ end
1135
+ def self.values
1136
+ end
1137
+ end
1138
+
496
1139
  class CallingWindow < Revox::Internal::Type::BaseModel
497
1140
  OrHash =
498
1141
  T.type_alias do
@@ -553,124 +1196,287 @@ module Revox
553
1196
  end
554
1197
  end
555
1198
 
556
- module FirstSentenceMode
557
- extend Revox::Internal::Type::Enum
558
-
559
- TaggedSymbol =
1199
+ class CustomTool < Revox::Internal::Type::BaseModel
1200
+ OrHash =
560
1201
  T.type_alias do
561
- T.all(
562
- Symbol,
563
- Revox::Models::AssistantListResponse::Assistant::FirstSentenceMode
1202
+ T.any(
1203
+ Revox::Models::AssistantListResponse::Assistant::CustomTool,
1204
+ Revox::Internal::AnyHash
564
1205
  )
565
1206
  end
566
- OrSymbol = T.type_alias { T.any(Symbol, String) }
567
1207
 
568
- GENERATED =
569
- T.let(
570
- :generated,
571
- Revox::Models::AssistantListResponse::Assistant::FirstSentenceMode::TaggedSymbol
1208
+ # JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
1209
+ # "{{name}}") for dynamic values
1210
+ sig { returns(T.nilable(String)) }
1211
+ attr_accessor :body_template
1212
+
1213
+ # Human-readable description of what the tool does, used by the LLM to decide when
1214
+ # to call it
1215
+ sig { returns(String) }
1216
+ attr_accessor :description
1217
+
1218
+ # HTTP headers to include in the request. Values support {{variable}} placeholders
1219
+ sig do
1220
+ returns(
1221
+ T::Array[
1222
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::Header
1223
+ ]
572
1224
  )
573
- STATIC =
574
- T.let(
575
- :static,
576
- Revox::Models::AssistantListResponse::Assistant::FirstSentenceMode::TaggedSymbol
1225
+ end
1226
+ attr_accessor :headers
1227
+
1228
+ # Schema defining the parameters the LLM should extract from the conversation to
1229
+ # pass to this tool
1230
+ sig do
1231
+ returns(
1232
+ T::Array[
1233
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema
1234
+ ]
577
1235
  )
578
- NONE =
579
- T.let(
580
- :none,
581
- Revox::Models::AssistantListResponse::Assistant::FirstSentenceMode::TaggedSymbol
1236
+ end
1237
+ attr_accessor :input_schema
1238
+
1239
+ # HTTP method to use when calling the API endpoint
1240
+ sig do
1241
+ returns(
1242
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::Method::TaggedSymbol
582
1243
  )
1244
+ end
1245
+ attr_accessor :method_
583
1246
 
1247
+ # Unique tool name in lowercase_snake_case (e.g. check_inventory)
1248
+ sig { returns(String) }
1249
+ attr_accessor :name
1250
+
1251
+ # Query string parameters appended to the URL. Values support {{variable}}
1252
+ # placeholders
584
1253
  sig do
585
- override.returns(
1254
+ returns(
586
1255
  T::Array[
587
- Revox::Models::AssistantListResponse::Assistant::FirstSentenceMode::TaggedSymbol
1256
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::QueryParam
588
1257
  ]
589
1258
  )
590
1259
  end
591
- def self.values
1260
+ attr_accessor :query_params
1261
+
1262
+ # Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
1263
+ # values
1264
+ sig { returns(String) }
1265
+ attr_accessor :url
1266
+
1267
+ sig do
1268
+ params(
1269
+ body_template: T.nilable(String),
1270
+ description: String,
1271
+ headers:
1272
+ T::Array[
1273
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::Header::OrHash
1274
+ ],
1275
+ input_schema:
1276
+ T::Array[
1277
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema::OrHash
1278
+ ],
1279
+ method_:
1280
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::Method::OrSymbol,
1281
+ name: String,
1282
+ query_params:
1283
+ T::Array[
1284
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::QueryParam::OrHash
1285
+ ],
1286
+ url: String
1287
+ ).returns(T.attached_class)
1288
+ end
1289
+ def self.new(
1290
+ # JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
1291
+ # "{{name}}") for dynamic values
1292
+ body_template:,
1293
+ # Human-readable description of what the tool does, used by the LLM to decide when
1294
+ # to call it
1295
+ description:,
1296
+ # HTTP headers to include in the request. Values support {{variable}} placeholders
1297
+ headers:,
1298
+ # Schema defining the parameters the LLM should extract from the conversation to
1299
+ # pass to this tool
1300
+ input_schema:,
1301
+ # HTTP method to use when calling the API endpoint
1302
+ method_:,
1303
+ # Unique tool name in lowercase_snake_case (e.g. check_inventory)
1304
+ name:,
1305
+ # Query string parameters appended to the URL. Values support {{variable}}
1306
+ # placeholders
1307
+ query_params:,
1308
+ # Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
1309
+ # values
1310
+ url:
1311
+ )
592
1312
  end
593
- end
594
1313
 
595
- module LlmModel
596
- extend Revox::Internal::Type::Union
1314
+ sig do
1315
+ override.returns(
1316
+ {
1317
+ body_template: T.nilable(String),
1318
+ description: String,
1319
+ headers:
1320
+ T::Array[
1321
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::Header
1322
+ ],
1323
+ input_schema:
1324
+ T::Array[
1325
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema
1326
+ ],
1327
+ method_:
1328
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::Method::TaggedSymbol,
1329
+ name: String,
1330
+ query_params:
1331
+ T::Array[
1332
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::QueryParam
1333
+ ],
1334
+ url: String
1335
+ }
1336
+ )
1337
+ end
1338
+ def to_hash
1339
+ end
597
1340
 
598
- Variants =
599
- T.type_alias do
600
- T.any(
601
- Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0,
602
- Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember1
603
- )
1341
+ class Header < Revox::Internal::Type::BaseModel
1342
+ OrHash =
1343
+ T.type_alias do
1344
+ T.any(
1345
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::Header,
1346
+ Revox::Internal::AnyHash
1347
+ )
1348
+ end
1349
+
1350
+ sig { returns(String) }
1351
+ attr_accessor :key
1352
+
1353
+ sig { returns(String) }
1354
+ attr_accessor :value
1355
+
1356
+ sig { params(key: String, value: String).returns(T.attached_class) }
1357
+ def self.new(key:, value:)
604
1358
  end
605
1359
 
606
- class UnionMember0 < Revox::Internal::Type::BaseModel
1360
+ sig { override.returns({ key: String, value: String }) }
1361
+ def to_hash
1362
+ end
1363
+ end
1364
+
1365
+ class InputSchema < Revox::Internal::Type::BaseModel
607
1366
  OrHash =
608
1367
  T.type_alias do
609
1368
  T.any(
610
- Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0,
1369
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema,
611
1370
  Revox::Internal::AnyHash
612
1371
  )
613
1372
  end
614
1373
 
1374
+ sig { returns(String) }
1375
+ attr_accessor :name
1376
+
1377
+ sig { returns(T::Boolean) }
1378
+ attr_accessor :required
1379
+
615
1380
  sig do
616
1381
  returns(
617
- Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1382
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
618
1383
  )
619
1384
  end
620
- attr_accessor :name
621
-
622
- sig { returns(Symbol) }
623
1385
  attr_accessor :type
624
1386
 
1387
+ sig { returns(T.nilable(String)) }
1388
+ attr_reader :description
1389
+
1390
+ sig { params(description: String).void }
1391
+ attr_writer :description
1392
+
1393
+ sig { returns(T.nilable(T::Array[String])) }
1394
+ attr_reader :enum_options
1395
+
1396
+ sig { params(enum_options: T::Array[String]).void }
1397
+ attr_writer :enum_options
1398
+
625
1399
  sig do
626
1400
  params(
627
- name:
628
- Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::Name::OrSymbol,
629
- type: Symbol
1401
+ name: String,
1402
+ required: T::Boolean,
1403
+ type:
1404
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema::Type::OrSymbol,
1405
+ description: String,
1406
+ enum_options: T::Array[String]
630
1407
  ).returns(T.attached_class)
631
1408
  end
632
- def self.new(name:, type: :"dedicated-instance")
1409
+ def self.new(
1410
+ name:,
1411
+ required:,
1412
+ type:,
1413
+ description: nil,
1414
+ enum_options: nil
1415
+ )
633
1416
  end
634
1417
 
635
1418
  sig do
636
1419
  override.returns(
637
1420
  {
638
- name:
639
- Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol,
640
- type: Symbol
1421
+ name: String,
1422
+ required: T::Boolean,
1423
+ type:
1424
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol,
1425
+ description: String,
1426
+ enum_options: T::Array[String]
641
1427
  }
642
1428
  )
643
1429
  end
644
1430
  def to_hash
645
1431
  end
646
1432
 
647
- module Name
1433
+ module Type
648
1434
  extend Revox::Internal::Type::Enum
649
1435
 
650
1436
  TaggedSymbol =
651
1437
  T.type_alias do
652
1438
  T.all(
653
1439
  Symbol,
654
- Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::Name
1440
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema::Type
655
1441
  )
656
1442
  end
657
1443
  OrSymbol = T.type_alias { T.any(Symbol, String) }
658
1444
 
659
- GPT_4_1 =
1445
+ STRING =
660
1446
  T.let(
661
- :"gpt-4.1",
662
- Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1447
+ :string,
1448
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
663
1449
  )
664
- MINISTRAL_3_8B_INSTRUCT =
1450
+ NUMBER =
665
1451
  T.let(
666
- :"ministral-3-8b-instruct",
667
- Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1452
+ :number,
1453
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1454
+ )
1455
+ BOOLEAN =
1456
+ T.let(
1457
+ :boolean,
1458
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1459
+ )
1460
+ ENUM =
1461
+ T.let(
1462
+ :enum,
1463
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1464
+ )
1465
+ DATE =
1466
+ T.let(
1467
+ :date,
1468
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1469
+ )
1470
+ DATETIME =
1471
+ T.let(
1472
+ :datetime,
1473
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
668
1474
  )
669
1475
 
670
1476
  sig do
671
1477
  override.returns(
672
1478
  T::Array[
673
- Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1479
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
674
1480
  ]
675
1481
  )
676
1482
  end
@@ -679,183 +1485,1459 @@ module Revox
679
1485
  end
680
1486
  end
681
1487
 
682
- class UnionMember1 < Revox::Internal::Type::BaseModel
683
- OrHash =
1488
+ # HTTP method to use when calling the API endpoint
1489
+ module Method
1490
+ extend Revox::Internal::Type::Enum
1491
+
1492
+ TaggedSymbol =
684
1493
  T.type_alias do
685
- T.any(
686
- Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember1,
687
- Revox::Internal::AnyHash
1494
+ T.all(
1495
+ Symbol,
1496
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::Method
688
1497
  )
689
1498
  end
1499
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
690
1500
 
691
- # The model ID to use from OpenRouter. eg: openai/gpt-4.1
692
- sig { returns(String) }
693
- attr_accessor :openrouter_model_id
694
-
695
- # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
696
- sig { returns(String) }
697
- attr_accessor :openrouter_provider
1501
+ GET =
1502
+ T.let(
1503
+ :GET,
1504
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::Method::TaggedSymbol
1505
+ )
1506
+ POST =
1507
+ T.let(
1508
+ :POST,
1509
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::Method::TaggedSymbol
1510
+ )
1511
+ PUT =
1512
+ T.let(
1513
+ :PUT,
1514
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::Method::TaggedSymbol
1515
+ )
1516
+ PATCH =
1517
+ T.let(
1518
+ :PATCH,
1519
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::Method::TaggedSymbol
1520
+ )
1521
+ DELETE =
1522
+ T.let(
1523
+ :DELETE,
1524
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::Method::TaggedSymbol
1525
+ )
698
1526
 
699
- # Use a model from OpenRouter.
700
- sig { returns(Symbol) }
701
- attr_accessor :type
1527
+ sig do
1528
+ override.returns(
1529
+ T::Array[
1530
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::Method::TaggedSymbol
1531
+ ]
1532
+ )
1533
+ end
1534
+ def self.values
1535
+ end
1536
+ end
1537
+
1538
+ class QueryParam < Revox::Internal::Type::BaseModel
1539
+ OrHash =
1540
+ T.type_alias do
1541
+ T.any(
1542
+ Revox::Models::AssistantListResponse::Assistant::CustomTool::QueryParam,
1543
+ Revox::Internal::AnyHash
1544
+ )
1545
+ end
1546
+
1547
+ sig { returns(String) }
1548
+ attr_accessor :key
1549
+
1550
+ sig { returns(String) }
1551
+ attr_accessor :value
1552
+
1553
+ sig { params(key: String, value: String).returns(T.attached_class) }
1554
+ def self.new(key:, value:)
1555
+ end
1556
+
1557
+ sig { override.returns({ key: String, value: String }) }
1558
+ def to_hash
1559
+ end
1560
+ end
1561
+ end
1562
+
1563
+ # The language used for the notification email content. One of "en" or "fr".
1564
+ module EmailNotificationLanguage
1565
+ extend Revox::Internal::Type::Enum
1566
+
1567
+ TaggedSymbol =
1568
+ T.type_alias do
1569
+ T.all(
1570
+ Symbol,
1571
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationLanguage
1572
+ )
1573
+ end
1574
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1575
+
1576
+ EN =
1577
+ T.let(
1578
+ :en,
1579
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationLanguage::TaggedSymbol
1580
+ )
1581
+ FR =
1582
+ T.let(
1583
+ :fr,
1584
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationLanguage::TaggedSymbol
1585
+ )
1586
+
1587
+ sig do
1588
+ override.returns(
1589
+ T::Array[
1590
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationLanguage::TaggedSymbol
1591
+ ]
1592
+ )
1593
+ end
1594
+ def self.values
1595
+ end
1596
+ end
1597
+
1598
+ module EmailNotificationOutcome
1599
+ extend Revox::Internal::Type::Enum
1600
+
1601
+ TaggedSymbol =
1602
+ T.type_alias do
1603
+ T.all(
1604
+ Symbol,
1605
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationOutcome
1606
+ )
1607
+ end
1608
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1609
+
1610
+ NOT_INTERESTED =
1611
+ T.let(
1612
+ :not_interested,
1613
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1614
+ )
1615
+ INTERESTED =
1616
+ T.let(
1617
+ :interested,
1618
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1619
+ )
1620
+ COMPLETED =
1621
+ T.let(
1622
+ :completed,
1623
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1624
+ )
1625
+ REQUESTED_CALLBACK_LATER =
1626
+ T.let(
1627
+ :requested_callback_later,
1628
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1629
+ )
1630
+ REQUESTED_CALLBACK_NEW_NUMBER =
1631
+ T.let(
1632
+ :requested_callback_new_number,
1633
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1634
+ )
1635
+ DO_NOT_CONTACT =
1636
+ T.let(
1637
+ :do_not_contact,
1638
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1639
+ )
1640
+ AI_AVERSE =
1641
+ T.let(
1642
+ :ai_averse,
1643
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1644
+ )
1645
+ NONE =
1646
+ T.let(
1647
+ :none,
1648
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1649
+ )
1650
+
1651
+ sig do
1652
+ override.returns(
1653
+ T::Array[
1654
+ Revox::Models::AssistantListResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1655
+ ]
1656
+ )
1657
+ end
1658
+ def self.values
1659
+ end
1660
+ end
1661
+
1662
+ module FirstSentenceMode
1663
+ extend Revox::Internal::Type::Enum
1664
+
1665
+ TaggedSymbol =
1666
+ T.type_alias do
1667
+ T.all(
1668
+ Symbol,
1669
+ Revox::Models::AssistantListResponse::Assistant::FirstSentenceMode
1670
+ )
1671
+ end
1672
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1673
+
1674
+ GENERATED =
1675
+ T.let(
1676
+ :generated,
1677
+ Revox::Models::AssistantListResponse::Assistant::FirstSentenceMode::TaggedSymbol
1678
+ )
1679
+ STATIC =
1680
+ T.let(
1681
+ :static,
1682
+ Revox::Models::AssistantListResponse::Assistant::FirstSentenceMode::TaggedSymbol
1683
+ )
1684
+ NONE =
1685
+ T.let(
1686
+ :none,
1687
+ Revox::Models::AssistantListResponse::Assistant::FirstSentenceMode::TaggedSymbol
1688
+ )
1689
+
1690
+ sig do
1691
+ override.returns(
1692
+ T::Array[
1693
+ Revox::Models::AssistantListResponse::Assistant::FirstSentenceMode::TaggedSymbol
1694
+ ]
1695
+ )
1696
+ end
1697
+ def self.values
1698
+ end
1699
+ end
1700
+
1701
+ # Warm or cold transfer when transfer_phone_number is set; null when transfer is
1702
+ # not configured.
1703
+ module HumanTransferMode
1704
+ extend Revox::Internal::Type::Enum
1705
+
1706
+ TaggedSymbol =
1707
+ T.type_alias do
1708
+ T.all(
1709
+ Symbol,
1710
+ Revox::Models::AssistantListResponse::Assistant::HumanTransferMode
1711
+ )
1712
+ end
1713
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1714
+
1715
+ WARM =
1716
+ T.let(
1717
+ :warm,
1718
+ Revox::Models::AssistantListResponse::Assistant::HumanTransferMode::TaggedSymbol
1719
+ )
1720
+ COLD =
1721
+ T.let(
1722
+ :cold,
1723
+ Revox::Models::AssistantListResponse::Assistant::HumanTransferMode::TaggedSymbol
1724
+ )
1725
+
1726
+ sig do
1727
+ override.returns(
1728
+ T::Array[
1729
+ Revox::Models::AssistantListResponse::Assistant::HumanTransferMode::TaggedSymbol
1730
+ ]
1731
+ )
1732
+ end
1733
+ def self.values
1734
+ end
1735
+ end
1736
+
1737
+ module LlmModel
1738
+ extend Revox::Internal::Type::Union
1739
+
1740
+ Variants =
1741
+ T.type_alias do
1742
+ T.any(
1743
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0,
1744
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember1,
1745
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember2,
1746
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember3
1747
+ )
1748
+ end
1749
+
1750
+ class UnionMember0 < Revox::Internal::Type::BaseModel
1751
+ OrHash =
1752
+ T.type_alias do
1753
+ T.any(
1754
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0,
1755
+ Revox::Internal::AnyHash
1756
+ )
1757
+ end
1758
+
1759
+ sig do
1760
+ returns(
1761
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1762
+ )
1763
+ end
1764
+ attr_accessor :name
1765
+
1766
+ sig { returns(Symbol) }
1767
+ attr_accessor :type
702
1768
 
703
1769
  sig do
704
1770
  params(
705
- openrouter_model_id: String,
706
- openrouter_provider: String,
1771
+ name:
1772
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::Name::OrSymbol,
707
1773
  type: Symbol
708
1774
  ).returns(T.attached_class)
709
1775
  end
710
- def self.new(
711
- # The model ID to use from OpenRouter. eg: openai/gpt-4.1
712
- openrouter_model_id:,
713
- # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
714
- openrouter_provider:,
715
- # Use a model from OpenRouter.
716
- type: :openrouter
717
- )
1776
+ def self.new(name:, type: :"dedicated-instance")
718
1777
  end
719
1778
 
720
1779
  sig do
721
1780
  override.returns(
722
1781
  {
723
- openrouter_model_id: String,
724
- openrouter_provider: String,
1782
+ name:
1783
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol,
725
1784
  type: Symbol
726
1785
  }
727
1786
  )
728
1787
  end
729
1788
  def to_hash
730
1789
  end
1790
+
1791
+ module Name
1792
+ extend Revox::Internal::Type::Enum
1793
+
1794
+ TaggedSymbol =
1795
+ T.type_alias do
1796
+ T.all(
1797
+ Symbol,
1798
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::Name
1799
+ )
1800
+ end
1801
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1802
+
1803
+ GPT_4_1 =
1804
+ T.let(
1805
+ :"gpt-4.1",
1806
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1807
+ )
1808
+ MINISTRAL_3_8B_INSTRUCT =
1809
+ T.let(
1810
+ :"ministral-3-8b-instruct",
1811
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1812
+ )
1813
+
1814
+ sig do
1815
+ override.returns(
1816
+ T::Array[
1817
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1818
+ ]
1819
+ )
1820
+ end
1821
+ def self.values
1822
+ end
1823
+ end
731
1824
  end
732
1825
 
1826
+ class UnionMember1 < Revox::Internal::Type::BaseModel
1827
+ OrHash =
1828
+ T.type_alias do
1829
+ T.any(
1830
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember1,
1831
+ Revox::Internal::AnyHash
1832
+ )
1833
+ end
1834
+
1835
+ # The model ID to use from OpenRouter. eg: openai/gpt-4.1
1836
+ sig { returns(String) }
1837
+ attr_accessor :openrouter_model_id
1838
+
1839
+ # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
1840
+ sig { returns(String) }
1841
+ attr_accessor :openrouter_provider
1842
+
1843
+ # Use a model from OpenRouter.
1844
+ sig { returns(Symbol) }
1845
+ attr_accessor :type
1846
+
1847
+ sig do
1848
+ params(
1849
+ openrouter_model_id: String,
1850
+ openrouter_provider: String,
1851
+ type: Symbol
1852
+ ).returns(T.attached_class)
1853
+ end
1854
+ def self.new(
1855
+ # The model ID to use from OpenRouter. eg: openai/gpt-4.1
1856
+ openrouter_model_id:,
1857
+ # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
1858
+ openrouter_provider:,
1859
+ # Use a model from OpenRouter.
1860
+ type: :openrouter
1861
+ )
1862
+ end
1863
+
1864
+ sig do
1865
+ override.returns(
1866
+ {
1867
+ openrouter_model_id: String,
1868
+ openrouter_provider: String,
1869
+ type: Symbol
1870
+ }
1871
+ )
1872
+ end
1873
+ def to_hash
1874
+ end
1875
+ end
1876
+
1877
+ class UnionMember2 < Revox::Internal::Type::BaseModel
1878
+ OrHash =
1879
+ T.type_alias do
1880
+ T.any(
1881
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember2,
1882
+ Revox::Internal::AnyHash
1883
+ )
1884
+ end
1885
+
1886
+ # API key sent as Bearer token to the custom endpoint.
1887
+ sig { returns(String) }
1888
+ attr_accessor :api_key
1889
+
1890
+ # Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
1891
+ sig { returns(String) }
1892
+ attr_accessor :api_url
1893
+
1894
+ # Model name as expected by the provider, e.g. meta-llama/llama-3-70b
1895
+ sig { returns(String) }
1896
+ attr_accessor :model_name
1897
+
1898
+ # OpenAI-compatible chat completions API (bring your own endpoint and key).
1899
+ sig { returns(Symbol) }
1900
+ attr_accessor :type
1901
+
1902
+ sig do
1903
+ params(
1904
+ api_key: String,
1905
+ api_url: String,
1906
+ model_name: String,
1907
+ type: Symbol
1908
+ ).returns(T.attached_class)
1909
+ end
1910
+ def self.new(
1911
+ # API key sent as Bearer token to the custom endpoint.
1912
+ api_key:,
1913
+ # Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
1914
+ api_url:,
1915
+ # Model name as expected by the provider, e.g. meta-llama/llama-3-70b
1916
+ model_name:,
1917
+ # OpenAI-compatible chat completions API (bring your own endpoint and key).
1918
+ type: :custom
1919
+ )
1920
+ end
1921
+
1922
+ sig do
1923
+ override.returns(
1924
+ {
1925
+ api_key: String,
1926
+ api_url: String,
1927
+ model_name: String,
1928
+ type: Symbol
1929
+ }
1930
+ )
1931
+ end
1932
+ def to_hash
1933
+ end
1934
+ end
1935
+
1936
+ class UnionMember3 < Revox::Internal::Type::BaseModel
1937
+ OrHash =
1938
+ T.type_alias do
1939
+ T.any(
1940
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember3,
1941
+ Revox::Internal::AnyHash
1942
+ )
1943
+ end
1944
+
1945
+ # The provider to use from Realtime. eg: openai, google.
1946
+ sig do
1947
+ returns(
1948
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
1949
+ )
1950
+ end
1951
+ attr_accessor :provider
1952
+
1953
+ # The model ID to use from Realtime. eg: gpt-4.1
1954
+ sig { returns(String) }
1955
+ attr_accessor :realtime_model_id
1956
+
1957
+ # Use a model from Realtime.
1958
+ sig { returns(Symbol) }
1959
+ attr_accessor :type
1960
+
1961
+ # Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
1962
+ sig { returns(T.nilable(String)) }
1963
+ attr_reader :realtime_voice_id
1964
+
1965
+ sig { params(realtime_voice_id: String).void }
1966
+ attr_writer :realtime_voice_id
1967
+
1968
+ sig do
1969
+ params(
1970
+ provider:
1971
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember3::Provider::OrSymbol,
1972
+ realtime_model_id: String,
1973
+ realtime_voice_id: String,
1974
+ type: Symbol
1975
+ ).returns(T.attached_class)
1976
+ end
1977
+ def self.new(
1978
+ # The provider to use from Realtime. eg: openai, google.
1979
+ provider:,
1980
+ # The model ID to use from Realtime. eg: gpt-4.1
1981
+ realtime_model_id:,
1982
+ # Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
1983
+ realtime_voice_id: nil,
1984
+ # Use a model from Realtime.
1985
+ type: :realtime
1986
+ )
1987
+ end
1988
+
1989
+ sig do
1990
+ override.returns(
1991
+ {
1992
+ provider:
1993
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol,
1994
+ realtime_model_id: String,
1995
+ type: Symbol,
1996
+ realtime_voice_id: String
1997
+ }
1998
+ )
1999
+ end
2000
+ def to_hash
2001
+ end
2002
+
2003
+ # The provider to use from Realtime. eg: openai, google.
2004
+ module Provider
2005
+ extend Revox::Internal::Type::Enum
2006
+
2007
+ TaggedSymbol =
2008
+ T.type_alias do
2009
+ T.all(
2010
+ Symbol,
2011
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember3::Provider
2012
+ )
2013
+ end
2014
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2015
+
2016
+ OPENAI =
2017
+ T.let(
2018
+ :openai,
2019
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
2020
+ )
2021
+ GOOGLE =
2022
+ T.let(
2023
+ :google,
2024
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
2025
+ )
2026
+
2027
+ sig do
2028
+ override.returns(
2029
+ T::Array[
2030
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
2031
+ ]
2032
+ )
2033
+ end
2034
+ def self.values
2035
+ end
2036
+ end
2037
+ end
2038
+
2039
+ sig do
2040
+ override.returns(
2041
+ T::Array[
2042
+ Revox::Models::AssistantListResponse::Assistant::LlmModel::Variants
2043
+ ]
2044
+ )
2045
+ end
2046
+ def self.variants
2047
+ end
2048
+ end
2049
+
2050
+ class Position < Revox::Internal::Type::BaseModel
2051
+ OrHash =
2052
+ T.type_alias do
2053
+ T.any(
2054
+ Revox::Models::AssistantListResponse::Assistant::Position,
2055
+ Revox::Internal::AnyHash
2056
+ )
2057
+ end
2058
+
2059
+ sig { returns(Float) }
2060
+ attr_accessor :x
2061
+
2062
+ sig { returns(Float) }
2063
+ attr_accessor :y_
2064
+
2065
+ sig { params(x: Float, y_: Float).returns(T.attached_class) }
2066
+ def self.new(x:, y_:)
2067
+ end
2068
+
2069
+ sig { override.returns({ x: Float, y_: Float }) }
2070
+ def to_hash
2071
+ end
2072
+ end
2073
+
2074
+ class PromptFlow < Revox::Internal::Type::BaseModel
2075
+ OrHash =
2076
+ T.type_alias do
2077
+ T.any(
2078
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow,
2079
+ Revox::Internal::AnyHash
2080
+ )
2081
+ end
2082
+
2083
+ sig do
2084
+ returns(
2085
+ T::Array[
2086
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Edge
2087
+ ]
2088
+ )
2089
+ end
2090
+ attr_accessor :edges
2091
+
2092
+ sig do
2093
+ returns(
2094
+ T::Array[
2095
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Node
2096
+ ]
2097
+ )
2098
+ end
2099
+ attr_accessor :nodes
2100
+
2101
+ sig do
2102
+ params(
2103
+ edges:
2104
+ T::Array[
2105
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Edge::OrHash
2106
+ ],
2107
+ nodes:
2108
+ T::Array[
2109
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Node::OrHash
2110
+ ]
2111
+ ).returns(T.attached_class)
2112
+ end
2113
+ def self.new(edges:, nodes:)
2114
+ end
2115
+
2116
+ sig do
2117
+ override.returns(
2118
+ {
2119
+ edges:
2120
+ T::Array[
2121
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Edge
2122
+ ],
2123
+ nodes:
2124
+ T::Array[
2125
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Node
2126
+ ]
2127
+ }
2128
+ )
2129
+ end
2130
+ def to_hash
2131
+ end
2132
+
2133
+ class Edge < Revox::Internal::Type::BaseModel
2134
+ OrHash =
2135
+ T.type_alias do
2136
+ T.any(
2137
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Edge,
2138
+ Revox::Internal::AnyHash
2139
+ )
2140
+ end
2141
+
2142
+ sig { returns(String) }
2143
+ attr_accessor :id
2144
+
2145
+ sig { returns(String) }
2146
+ attr_accessor :source
2147
+
2148
+ sig { returns(String) }
2149
+ attr_accessor :target
2150
+
2151
+ sig do
2152
+ params(id: String, source: String, target: String).returns(
2153
+ T.attached_class
2154
+ )
2155
+ end
2156
+ def self.new(id:, source:, target:)
2157
+ end
2158
+
2159
+ sig do
2160
+ override.returns({ id: String, source: String, target: String })
2161
+ end
2162
+ def to_hash
2163
+ end
2164
+ end
2165
+
2166
+ class Node < Revox::Internal::Type::BaseModel
2167
+ OrHash =
2168
+ T.type_alias do
2169
+ T.any(
2170
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Node,
2171
+ Revox::Internal::AnyHash
2172
+ )
2173
+ end
2174
+
2175
+ sig { returns(String) }
2176
+ attr_accessor :id
2177
+
2178
+ sig do
2179
+ returns(
2180
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Node::Data
2181
+ )
2182
+ end
2183
+ attr_reader :data
2184
+
2185
+ sig do
2186
+ params(
2187
+ data:
2188
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Node::Data::OrHash
2189
+ ).void
2190
+ end
2191
+ attr_writer :data
2192
+
2193
+ sig do
2194
+ returns(
2195
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Node::Position
2196
+ )
2197
+ end
2198
+ attr_reader :position
2199
+
2200
+ sig do
2201
+ params(
2202
+ position:
2203
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Node::Position::OrHash
2204
+ ).void
2205
+ end
2206
+ attr_writer :position
2207
+
2208
+ sig { returns(Symbol) }
2209
+ attr_accessor :type
2210
+
2211
+ sig do
2212
+ params(
2213
+ id: String,
2214
+ data:
2215
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Node::Data::OrHash,
2216
+ position:
2217
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Node::Position::OrHash,
2218
+ type: Symbol
2219
+ ).returns(T.attached_class)
2220
+ end
2221
+ def self.new(id:, data:, position:, type: :promptBlock)
2222
+ end
2223
+
2224
+ sig do
2225
+ override.returns(
2226
+ {
2227
+ id: String,
2228
+ data:
2229
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Node::Data,
2230
+ position:
2231
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Node::Position,
2232
+ type: Symbol
2233
+ }
2234
+ )
2235
+ end
2236
+ def to_hash
2237
+ end
2238
+
2239
+ class Data < Revox::Internal::Type::BaseModel
2240
+ OrHash =
2241
+ T.type_alias do
2242
+ T.any(
2243
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Node::Data,
2244
+ Revox::Internal::AnyHash
2245
+ )
2246
+ end
2247
+
2248
+ sig { returns(String) }
2249
+ attr_accessor :body
2250
+
2251
+ sig { returns(String) }
2252
+ attr_accessor :title
2253
+
2254
+ sig do
2255
+ params(body: String, title: String).returns(T.attached_class)
2256
+ end
2257
+ def self.new(body:, title:)
2258
+ end
2259
+
2260
+ sig { override.returns({ body: String, title: String }) }
2261
+ def to_hash
2262
+ end
2263
+ end
2264
+
2265
+ class Position < Revox::Internal::Type::BaseModel
2266
+ OrHash =
2267
+ T.type_alias do
2268
+ T.any(
2269
+ Revox::Models::AssistantListResponse::Assistant::PromptFlow::Node::Position,
2270
+ Revox::Internal::AnyHash
2271
+ )
2272
+ end
2273
+
2274
+ sig { returns(Float) }
2275
+ attr_accessor :x
2276
+
2277
+ sig { returns(Float) }
2278
+ attr_accessor :y_
2279
+
2280
+ sig { params(x: Float, y_: Float).returns(T.attached_class) }
2281
+ def self.new(x:, y_:)
2282
+ end
2283
+
2284
+ sig { override.returns({ x: Float, y_: Float }) }
2285
+ def to_hash
2286
+ end
2287
+ end
2288
+ end
2289
+ end
2290
+
2291
+ class Slack < Revox::Internal::Type::BaseModel
2292
+ OrHash =
2293
+ T.type_alias do
2294
+ T.any(
2295
+ Revox::Models::AssistantListResponse::Assistant::Slack,
2296
+ Revox::Internal::AnyHash
2297
+ )
2298
+ end
2299
+
2300
+ # The Slack channel ID where the notification will be posted.
2301
+ sig { returns(String) }
2302
+ attr_accessor :channel_id
2303
+
2304
+ # The Nango connection ID linking the org's Slack workspace to Revox.
2305
+ sig { returns(String) }
2306
+ attr_accessor :connection_id
2307
+
2308
+ # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2309
+ # Use 'none' to notify when outcome is null.
2310
+ sig do
2311
+ returns(
2312
+ T::Array[
2313
+ Revox::Models::AssistantListResponse::Assistant::Slack::Outcome::TaggedSymbol
2314
+ ]
2315
+ )
2316
+ end
2317
+ attr_accessor :outcomes
2318
+
2319
+ # Human-readable Slack channel name, cached for display in the UI.
2320
+ sig { returns(T.nilable(String)) }
2321
+ attr_accessor :channel_name
2322
+
2323
+ # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2324
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2325
+ # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2326
+ # prompt_variables and structured_output keys. When null/empty a default template
2327
+ # is used.
2328
+ sig { returns(T.nilable(String)) }
2329
+ attr_accessor :template
2330
+
2331
+ sig do
2332
+ params(
2333
+ channel_id: String,
2334
+ connection_id: String,
2335
+ outcomes:
2336
+ T::Array[
2337
+ Revox::Models::AssistantListResponse::Assistant::Slack::Outcome::OrSymbol
2338
+ ],
2339
+ channel_name: T.nilable(String),
2340
+ template: T.nilable(String)
2341
+ ).returns(T.attached_class)
2342
+ end
2343
+ def self.new(
2344
+ # The Slack channel ID where the notification will be posted.
2345
+ channel_id:,
2346
+ # The Nango connection ID linking the org's Slack workspace to Revox.
2347
+ connection_id:,
2348
+ # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2349
+ # Use 'none' to notify when outcome is null.
2350
+ outcomes:,
2351
+ # Human-readable Slack channel name, cached for display in the UI.
2352
+ channel_name: nil,
2353
+ # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2354
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2355
+ # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2356
+ # prompt_variables and structured_output keys. When null/empty a default template
2357
+ # is used.
2358
+ template: nil
2359
+ )
2360
+ end
2361
+
2362
+ sig do
2363
+ override.returns(
2364
+ {
2365
+ channel_id: String,
2366
+ connection_id: String,
2367
+ outcomes:
2368
+ T::Array[
2369
+ Revox::Models::AssistantListResponse::Assistant::Slack::Outcome::TaggedSymbol
2370
+ ],
2371
+ channel_name: T.nilable(String),
2372
+ template: T.nilable(String)
2373
+ }
2374
+ )
2375
+ end
2376
+ def to_hash
2377
+ end
2378
+
2379
+ module Outcome
2380
+ extend Revox::Internal::Type::Enum
2381
+
2382
+ TaggedSymbol =
2383
+ T.type_alias do
2384
+ T.all(
2385
+ Symbol,
2386
+ Revox::Models::AssistantListResponse::Assistant::Slack::Outcome
2387
+ )
2388
+ end
2389
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2390
+
2391
+ NOT_INTERESTED =
2392
+ T.let(
2393
+ :not_interested,
2394
+ Revox::Models::AssistantListResponse::Assistant::Slack::Outcome::TaggedSymbol
2395
+ )
2396
+ INTERESTED =
2397
+ T.let(
2398
+ :interested,
2399
+ Revox::Models::AssistantListResponse::Assistant::Slack::Outcome::TaggedSymbol
2400
+ )
2401
+ COMPLETED =
2402
+ T.let(
2403
+ :completed,
2404
+ Revox::Models::AssistantListResponse::Assistant::Slack::Outcome::TaggedSymbol
2405
+ )
2406
+ REQUESTED_CALLBACK_LATER =
2407
+ T.let(
2408
+ :requested_callback_later,
2409
+ Revox::Models::AssistantListResponse::Assistant::Slack::Outcome::TaggedSymbol
2410
+ )
2411
+ REQUESTED_CALLBACK_NEW_NUMBER =
2412
+ T.let(
2413
+ :requested_callback_new_number,
2414
+ Revox::Models::AssistantListResponse::Assistant::Slack::Outcome::TaggedSymbol
2415
+ )
2416
+ DO_NOT_CONTACT =
2417
+ T.let(
2418
+ :do_not_contact,
2419
+ Revox::Models::AssistantListResponse::Assistant::Slack::Outcome::TaggedSymbol
2420
+ )
2421
+ AI_AVERSE =
2422
+ T.let(
2423
+ :ai_averse,
2424
+ Revox::Models::AssistantListResponse::Assistant::Slack::Outcome::TaggedSymbol
2425
+ )
2426
+ NONE =
2427
+ T.let(
2428
+ :none,
2429
+ Revox::Models::AssistantListResponse::Assistant::Slack::Outcome::TaggedSymbol
2430
+ )
2431
+
2432
+ sig do
2433
+ override.returns(
2434
+ T::Array[
2435
+ Revox::Models::AssistantListResponse::Assistant::Slack::Outcome::TaggedSymbol
2436
+ ]
2437
+ )
2438
+ end
2439
+ def self.values
2440
+ end
2441
+ end
2442
+ end
2443
+
2444
+ class StructuredOutputConfig < Revox::Internal::Type::BaseModel
2445
+ OrHash =
2446
+ T.type_alias do
2447
+ T.any(
2448
+ Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig,
2449
+ Revox::Internal::AnyHash
2450
+ )
2451
+ end
2452
+
2453
+ sig { returns(String) }
2454
+ attr_accessor :name
2455
+
2456
+ sig { returns(T::Boolean) }
2457
+ attr_accessor :required
2458
+
2459
+ sig do
2460
+ returns(
2461
+ Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2462
+ )
2463
+ end
2464
+ attr_accessor :type
2465
+
2466
+ sig { returns(T.nilable(String)) }
2467
+ attr_reader :description
2468
+
2469
+ sig { params(description: String).void }
2470
+ attr_writer :description
2471
+
2472
+ sig { returns(T.nilable(T::Array[String])) }
2473
+ attr_reader :enum_options
2474
+
2475
+ sig { params(enum_options: T::Array[String]).void }
2476
+ attr_writer :enum_options
2477
+
2478
+ sig do
2479
+ params(
2480
+ name: String,
2481
+ required: T::Boolean,
2482
+ type:
2483
+ Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::OrSymbol,
2484
+ description: String,
2485
+ enum_options: T::Array[String]
2486
+ ).returns(T.attached_class)
2487
+ end
2488
+ def self.new(
2489
+ name:,
2490
+ required:,
2491
+ type:,
2492
+ description: nil,
2493
+ enum_options: nil
2494
+ )
2495
+ end
2496
+
2497
+ sig do
2498
+ override.returns(
2499
+ {
2500
+ name: String,
2501
+ required: T::Boolean,
2502
+ type:
2503
+ Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol,
2504
+ description: String,
2505
+ enum_options: T::Array[String]
2506
+ }
2507
+ )
2508
+ end
2509
+ def to_hash
2510
+ end
2511
+
2512
+ module Type
2513
+ extend Revox::Internal::Type::Enum
2514
+
2515
+ TaggedSymbol =
2516
+ T.type_alias do
2517
+ T.all(
2518
+ Symbol,
2519
+ Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type
2520
+ )
2521
+ end
2522
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2523
+
2524
+ STRING =
2525
+ T.let(
2526
+ :string,
2527
+ Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2528
+ )
2529
+ NUMBER =
2530
+ T.let(
2531
+ :number,
2532
+ Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2533
+ )
2534
+ BOOLEAN =
2535
+ T.let(
2536
+ :boolean,
2537
+ Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2538
+ )
2539
+ ENUM =
2540
+ T.let(
2541
+ :enum,
2542
+ Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2543
+ )
2544
+ DATE =
2545
+ T.let(
2546
+ :date,
2547
+ Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2548
+ )
2549
+ DATETIME =
2550
+ T.let(
2551
+ :datetime,
2552
+ Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2553
+ )
2554
+
2555
+ sig do
2556
+ override.returns(
2557
+ T::Array[
2558
+ Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2559
+ ]
2560
+ )
2561
+ end
2562
+ def self.values
2563
+ end
2564
+ end
2565
+ end
2566
+
2567
+ class SttContext < Revox::Internal::Type::BaseModel
2568
+ OrHash =
2569
+ T.type_alias do
2570
+ T.any(
2571
+ Revox::Models::AssistantListResponse::Assistant::SttContext,
2572
+ Revox::Internal::AnyHash
2573
+ )
2574
+ end
2575
+
2576
+ sig do
2577
+ returns(
2578
+ T::Array[
2579
+ Revox::Models::AssistantListResponse::Assistant::SttContext::General
2580
+ ]
2581
+ )
2582
+ end
2583
+ attr_accessor :general
2584
+
2585
+ sig { returns(T::Array[String]) }
2586
+ attr_accessor :terms
2587
+
2588
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
2589
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
2590
+ # replacing existing entries.
2591
+ sig do
2592
+ params(
2593
+ general:
2594
+ T::Array[
2595
+ Revox::Models::AssistantListResponse::Assistant::SttContext::General::OrHash
2596
+ ],
2597
+ terms: T::Array[String]
2598
+ ).returns(T.attached_class)
2599
+ end
2600
+ def self.new(general:, terms:)
2601
+ end
2602
+
2603
+ sig do
2604
+ override.returns(
2605
+ {
2606
+ general:
2607
+ T::Array[
2608
+ Revox::Models::AssistantListResponse::Assistant::SttContext::General
2609
+ ],
2610
+ terms: T::Array[String]
2611
+ }
2612
+ )
2613
+ end
2614
+ def to_hash
2615
+ end
2616
+
2617
+ class General < Revox::Internal::Type::BaseModel
2618
+ OrHash =
2619
+ T.type_alias do
2620
+ T.any(
2621
+ Revox::Models::AssistantListResponse::Assistant::SttContext::General,
2622
+ Revox::Internal::AnyHash
2623
+ )
2624
+ end
2625
+
2626
+ sig { returns(String) }
2627
+ attr_accessor :key
2628
+
2629
+ sig { returns(String) }
2630
+ attr_accessor :value
2631
+
2632
+ sig { params(key: String, value: String).returns(T.attached_class) }
2633
+ def self.new(key:, value:)
2634
+ end
2635
+
2636
+ sig { override.returns({ key: String, value: String }) }
2637
+ def to_hash
2638
+ end
2639
+ end
2640
+ end
2641
+
2642
+ # Transcriber (speech-to-text) model used for the assistant.
2643
+ module SttModel
2644
+ extend Revox::Internal::Type::Enum
2645
+
2646
+ TaggedSymbol =
2647
+ T.type_alias do
2648
+ T.all(
2649
+ Symbol,
2650
+ Revox::Models::AssistantListResponse::Assistant::SttModel
2651
+ )
2652
+ end
2653
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2654
+
2655
+ STT_RT_V4 =
2656
+ T.let(
2657
+ :"stt-rt-v4",
2658
+ Revox::Models::AssistantListResponse::Assistant::SttModel::TaggedSymbol
2659
+ )
2660
+ STT_RT_V5 =
2661
+ T.let(
2662
+ :"stt-rt-v5",
2663
+ Revox::Models::AssistantListResponse::Assistant::SttModel::TaggedSymbol
2664
+ )
2665
+
2666
+ sig do
2667
+ override.returns(
2668
+ T::Array[
2669
+ Revox::Models::AssistantListResponse::Assistant::SttModel::TaggedSymbol
2670
+ ]
2671
+ )
2672
+ end
2673
+ def self.values
2674
+ end
2675
+ end
2676
+
2677
+ # Audio clip to play while the agent is processing a response. One of the built-in
2678
+ # LiveKit audio clips; null disables it.
2679
+ module ThinkingSound
2680
+ extend Revox::Internal::Type::Enum
2681
+
2682
+ TaggedSymbol =
2683
+ T.type_alias do
2684
+ T.all(
2685
+ Symbol,
2686
+ Revox::Models::AssistantListResponse::Assistant::ThinkingSound
2687
+ )
2688
+ end
2689
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2690
+
2691
+ CITY_AMBIENCE_OGG =
2692
+ T.let(
2693
+ :"city-ambience.ogg",
2694
+ Revox::Models::AssistantListResponse::Assistant::ThinkingSound::TaggedSymbol
2695
+ )
2696
+ FOREST_AMBIENCE_OGG =
2697
+ T.let(
2698
+ :"forest-ambience.ogg",
2699
+ Revox::Models::AssistantListResponse::Assistant::ThinkingSound::TaggedSymbol
2700
+ )
2701
+ OFFICE_AMBIENCE_OGG =
2702
+ T.let(
2703
+ :"office-ambience.ogg",
2704
+ Revox::Models::AssistantListResponse::Assistant::ThinkingSound::TaggedSymbol
2705
+ )
2706
+ CROWDED_ROOM_OGG =
2707
+ T.let(
2708
+ :"crowded-room.ogg",
2709
+ Revox::Models::AssistantListResponse::Assistant::ThinkingSound::TaggedSymbol
2710
+ )
2711
+ KEYBOARD_TYPING_OGG =
2712
+ T.let(
2713
+ :"keyboard-typing.ogg",
2714
+ Revox::Models::AssistantListResponse::Assistant::ThinkingSound::TaggedSymbol
2715
+ )
2716
+ KEYBOARD_TYPING2_OGG =
2717
+ T.let(
2718
+ :"keyboard-typing2.ogg",
2719
+ Revox::Models::AssistantListResponse::Assistant::ThinkingSound::TaggedSymbol
2720
+ )
2721
+ HOLD_MUSIC_OGG =
2722
+ T.let(
2723
+ :"hold_music.ogg",
2724
+ Revox::Models::AssistantListResponse::Assistant::ThinkingSound::TaggedSymbol
2725
+ )
2726
+
2727
+ sig do
2728
+ override.returns(
2729
+ T::Array[
2730
+ Revox::Models::AssistantListResponse::Assistant::ThinkingSound::TaggedSymbol
2731
+ ]
2732
+ )
2733
+ end
2734
+ def self.values
2735
+ end
2736
+ end
2737
+
2738
+ module Type
2739
+ extend Revox::Internal::Type::Enum
2740
+
2741
+ TaggedSymbol =
2742
+ T.type_alias do
2743
+ T.all(
2744
+ Symbol,
2745
+ Revox::Models::AssistantListResponse::Assistant::Type
2746
+ )
2747
+ end
2748
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2749
+
2750
+ STANDALONE =
2751
+ T.let(
2752
+ :standalone,
2753
+ Revox::Models::AssistantListResponse::Assistant::Type::TaggedSymbol
2754
+ )
2755
+ MULTI_STEP =
2756
+ T.let(
2757
+ :"multi-step",
2758
+ Revox::Models::AssistantListResponse::Assistant::Type::TaggedSymbol
2759
+ )
2760
+ SUB_ASSISTANT =
2761
+ T.let(
2762
+ :"sub-assistant",
2763
+ Revox::Models::AssistantListResponse::Assistant::Type::TaggedSymbol
2764
+ )
2765
+
733
2766
  sig do
734
2767
  override.returns(
735
2768
  T::Array[
736
- Revox::Models::AssistantListResponse::Assistant::LlmModel::Variants
2769
+ Revox::Models::AssistantListResponse::Assistant::Type::TaggedSymbol
737
2770
  ]
738
2771
  )
739
2772
  end
740
- def self.variants
2773
+ def self.values
741
2774
  end
742
2775
  end
743
2776
 
744
- class StructuredOutputConfig < Revox::Internal::Type::BaseModel
2777
+ class Voice < Revox::Internal::Type::BaseModel
745
2778
  OrHash =
746
2779
  T.type_alias do
747
2780
  T.any(
748
- Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig,
2781
+ Revox::Models::AssistantListResponse::Assistant::Voice,
749
2782
  Revox::Internal::AnyHash
750
2783
  )
751
2784
  end
752
2785
 
2786
+ # The ID of the voice.
753
2787
  sig { returns(String) }
754
- attr_accessor :name
2788
+ attr_accessor :id
755
2789
 
756
- sig { returns(T::Boolean) }
757
- attr_accessor :required
2790
+ # The provider of the voice.
2791
+ sig do
2792
+ returns(
2793
+ Revox::Models::AssistantListResponse::Assistant::Voice::Provider::TaggedSymbol
2794
+ )
2795
+ end
2796
+ attr_accessor :provider
758
2797
 
2798
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
2799
+ # for other providers.
759
2800
  sig do
760
2801
  returns(
761
- Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2802
+ T.nilable(
2803
+ Revox::Models::AssistantListResponse::Assistant::Voice::Model::TaggedSymbol
2804
+ )
762
2805
  )
763
2806
  end
764
- attr_accessor :type
2807
+ attr_reader :model
765
2808
 
766
- sig { returns(T.nilable(String)) }
767
- attr_reader :description
2809
+ sig do
2810
+ params(
2811
+ model:
2812
+ Revox::Models::AssistantListResponse::Assistant::Voice::Model::OrSymbol
2813
+ ).void
2814
+ end
2815
+ attr_writer :model
768
2816
 
769
- sig { params(description: String).void }
770
- attr_writer :description
2817
+ # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
2818
+ # 0.7–1.2. Default is 1.0.
2819
+ sig { returns(T.nilable(Float)) }
2820
+ attr_reader :speed
771
2821
 
772
- sig { returns(T.nilable(T::Array[String])) }
773
- attr_reader :enum_options
2822
+ sig { params(speed: Float).void }
2823
+ attr_writer :speed
774
2824
 
775
- sig { params(enum_options: T::Array[String]).void }
776
- attr_writer :enum_options
2825
+ # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
2826
+ # providers.
2827
+ sig { returns(T.nilable(Float)) }
2828
+ attr_reader :volume
2829
+
2830
+ sig { params(volume: Float).void }
2831
+ attr_writer :volume
777
2832
 
778
2833
  sig do
779
2834
  params(
780
- name: String,
781
- required: T::Boolean,
782
- type:
783
- Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::OrSymbol,
784
- description: String,
785
- enum_options: T::Array[String]
2835
+ id: String,
2836
+ provider:
2837
+ Revox::Models::AssistantListResponse::Assistant::Voice::Provider::OrSymbol,
2838
+ model:
2839
+ Revox::Models::AssistantListResponse::Assistant::Voice::Model::OrSymbol,
2840
+ speed: Float,
2841
+ volume: Float
786
2842
  ).returns(T.attached_class)
787
2843
  end
788
2844
  def self.new(
789
- name:,
790
- required:,
791
- type:,
792
- description: nil,
793
- enum_options: nil
2845
+ # The ID of the voice.
2846
+ id:,
2847
+ # The provider of the voice.
2848
+ provider:,
2849
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
2850
+ # for other providers.
2851
+ model: nil,
2852
+ # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
2853
+ # 0.7–1.2. Default is 1.0.
2854
+ speed: nil,
2855
+ # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
2856
+ # providers.
2857
+ volume: nil
794
2858
  )
795
2859
  end
796
2860
 
797
2861
  sig do
798
2862
  override.returns(
799
2863
  {
800
- name: String,
801
- required: T::Boolean,
802
- type:
803
- Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol,
804
- description: String,
805
- enum_options: T::Array[String]
2864
+ id: String,
2865
+ provider:
2866
+ Revox::Models::AssistantListResponse::Assistant::Voice::Provider::TaggedSymbol,
2867
+ model:
2868
+ Revox::Models::AssistantListResponse::Assistant::Voice::Model::TaggedSymbol,
2869
+ speed: Float,
2870
+ volume: Float
806
2871
  }
807
2872
  )
808
2873
  end
809
2874
  def to_hash
810
2875
  end
811
2876
 
812
- module Type
2877
+ # The provider of the voice.
2878
+ module Provider
813
2879
  extend Revox::Internal::Type::Enum
814
2880
 
815
2881
  TaggedSymbol =
816
2882
  T.type_alias do
817
2883
  T.all(
818
2884
  Symbol,
819
- Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type
2885
+ Revox::Models::AssistantListResponse::Assistant::Voice::Provider
820
2886
  )
821
2887
  end
822
2888
  OrSymbol = T.type_alias { T.any(Symbol, String) }
823
2889
 
824
- STRING =
825
- T.let(
826
- :string,
827
- Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
828
- )
829
- NUMBER =
2890
+ CARTESIA =
830
2891
  T.let(
831
- :number,
832
- Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2892
+ :cartesia,
2893
+ Revox::Models::AssistantListResponse::Assistant::Voice::Provider::TaggedSymbol
833
2894
  )
834
- BOOLEAN =
2895
+ ELEVENLABS =
835
2896
  T.let(
836
- :boolean,
837
- Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2897
+ :elevenlabs,
2898
+ Revox::Models::AssistantListResponse::Assistant::Voice::Provider::TaggedSymbol
838
2899
  )
839
- ENUM =
840
- T.let(
841
- :enum,
842
- Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2900
+
2901
+ sig do
2902
+ override.returns(
2903
+ T::Array[
2904
+ Revox::Models::AssistantListResponse::Assistant::Voice::Provider::TaggedSymbol
2905
+ ]
843
2906
  )
844
- DATE =
2907
+ end
2908
+ def self.values
2909
+ end
2910
+ end
2911
+
2912
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
2913
+ # for other providers.
2914
+ module Model
2915
+ extend Revox::Internal::Type::Enum
2916
+
2917
+ TaggedSymbol =
2918
+ T.type_alias do
2919
+ T.all(
2920
+ Symbol,
2921
+ Revox::Models::AssistantListResponse::Assistant::Voice::Model
2922
+ )
2923
+ end
2924
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2925
+
2926
+ SONIC_3 =
845
2927
  T.let(
846
- :date,
847
- Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2928
+ :"sonic-3",
2929
+ Revox::Models::AssistantListResponse::Assistant::Voice::Model::TaggedSymbol
848
2930
  )
849
- DATETIME =
2931
+ SONIC_3_5 =
850
2932
  T.let(
851
- :datetime,
852
- Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2933
+ :"sonic-3.5",
2934
+ Revox::Models::AssistantListResponse::Assistant::Voice::Model::TaggedSymbol
853
2935
  )
854
2936
 
855
2937
  sig do
856
2938
  override.returns(
857
2939
  T::Array[
858
- Revox::Models::AssistantListResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2940
+ Revox::Models::AssistantListResponse::Assistant::Voice::Model::TaggedSymbol
859
2941
  ]
860
2942
  )
861
2943
  end
@@ -864,95 +2946,212 @@ module Revox
864
2946
  end
865
2947
  end
866
2948
 
867
- class Voice < Revox::Internal::Type::BaseModel
2949
+ class Zoho < Revox::Internal::Type::BaseModel
868
2950
  OrHash =
869
2951
  T.type_alias do
870
2952
  T.any(
871
- Revox::Models::AssistantListResponse::Assistant::Voice,
2953
+ Revox::Models::AssistantListResponse::Assistant::Zoho,
872
2954
  Revox::Internal::AnyHash
873
2955
  )
874
2956
  end
875
2957
 
876
- # The ID of the voice.
2958
+ # The Nango connection ID linking the org's Zoho CRM account to Revox.
877
2959
  sig { returns(String) }
878
- attr_accessor :id
2960
+ attr_accessor :connection_id
879
2961
 
880
- # The provider of the voice.
2962
+ # Maps extracted call fields (structured_output / prompt variables) onto Zoho
2963
+ # field API names on the upserted record.
881
2964
  sig do
882
2965
  returns(
883
- Revox::Models::AssistantListResponse::Assistant::Voice::Provider::TaggedSymbol
2966
+ T::Array[
2967
+ Revox::Models::AssistantListResponse::Assistant::Zoho::FieldMapping
2968
+ ]
884
2969
  )
885
2970
  end
886
- attr_accessor :provider
2971
+ attr_accessor :field_mapping
887
2972
 
888
- # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
889
- # 0.7–1.2. Default is 1.0.
890
- sig { returns(T.nilable(Float)) }
891
- attr_reader :speed
2973
+ # When true, also log the call as a record in Zoho's Calls module (related to the
2974
+ # upserted prospect via Who_Id).
2975
+ sig { returns(T::Boolean) }
2976
+ attr_accessor :log_call_activity
892
2977
 
893
- sig { params(speed: Float).void }
894
- attr_writer :speed
2978
+ # Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
2979
+ sig { returns(String) }
2980
+ attr_accessor :module_
2981
+
2982
+ # Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
2983
+ # 'none' to push when outcome is null.
2984
+ sig do
2985
+ returns(
2986
+ T::Array[
2987
+ Revox::Models::AssistantListResponse::Assistant::Zoho::Outcome::TaggedSymbol
2988
+ ]
2989
+ )
2990
+ end
2991
+ attr_accessor :outcomes
2992
+
2993
+ # Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
2994
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
2995
+ # prompt_variables and structured_output keys. When null/empty a default note
2996
+ # (outcome + summary + auto-listed extracted fields) is used.
2997
+ sig { returns(T.nilable(String)) }
2998
+ attr_accessor :template
895
2999
 
896
3000
  sig do
897
3001
  params(
898
- id: String,
899
- provider:
900
- Revox::Models::AssistantListResponse::Assistant::Voice::Provider::OrSymbol,
901
- speed: Float
3002
+ connection_id: String,
3003
+ field_mapping:
3004
+ T::Array[
3005
+ Revox::Models::AssistantListResponse::Assistant::Zoho::FieldMapping::OrHash
3006
+ ],
3007
+ log_call_activity: T::Boolean,
3008
+ module_: String,
3009
+ outcomes:
3010
+ T::Array[
3011
+ Revox::Models::AssistantListResponse::Assistant::Zoho::Outcome::OrSymbol
3012
+ ],
3013
+ template: T.nilable(String)
902
3014
  ).returns(T.attached_class)
903
3015
  end
904
3016
  def self.new(
905
- # The ID of the voice.
906
- id:,
907
- # The provider of the voice.
908
- provider:,
909
- # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
910
- # 0.7–1.2. Default is 1.0.
911
- speed: nil
3017
+ # The Nango connection ID linking the org's Zoho CRM account to Revox.
3018
+ connection_id:,
3019
+ # Maps extracted call fields (structured_output / prompt variables) onto Zoho
3020
+ # field API names on the upserted record.
3021
+ field_mapping:,
3022
+ # When true, also log the call as a record in Zoho's Calls module (related to the
3023
+ # upserted prospect via Who_Id).
3024
+ log_call_activity:,
3025
+ # Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
3026
+ module_:,
3027
+ # Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
3028
+ # 'none' to push when outcome is null.
3029
+ outcomes:,
3030
+ # Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
3031
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
3032
+ # prompt_variables and structured_output keys. When null/empty a default note
3033
+ # (outcome + summary + auto-listed extracted fields) is used.
3034
+ template: nil
912
3035
  )
913
3036
  end
914
3037
 
915
3038
  sig do
916
3039
  override.returns(
917
3040
  {
918
- id: String,
919
- provider:
920
- Revox::Models::AssistantListResponse::Assistant::Voice::Provider::TaggedSymbol,
921
- speed: Float
3041
+ connection_id: String,
3042
+ field_mapping:
3043
+ T::Array[
3044
+ Revox::Models::AssistantListResponse::Assistant::Zoho::FieldMapping
3045
+ ],
3046
+ log_call_activity: T::Boolean,
3047
+ module_: String,
3048
+ outcomes:
3049
+ T::Array[
3050
+ Revox::Models::AssistantListResponse::Assistant::Zoho::Outcome::TaggedSymbol
3051
+ ],
3052
+ template: T.nilable(String)
922
3053
  }
923
3054
  )
924
3055
  end
925
3056
  def to_hash
926
3057
  end
927
3058
 
928
- # The provider of the voice.
929
- module Provider
3059
+ class FieldMapping < Revox::Internal::Type::BaseModel
3060
+ OrHash =
3061
+ T.type_alias do
3062
+ T.any(
3063
+ Revox::Models::AssistantListResponse::Assistant::Zoho::FieldMapping,
3064
+ Revox::Internal::AnyHash
3065
+ )
3066
+ end
3067
+
3068
+ # Source key to read from the call: a structured_output field name, falling back
3069
+ # to a prompt variable of the same name.
3070
+ sig { returns(String) }
3071
+ attr_accessor :source
3072
+
3073
+ # Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
3074
+ # or a custom 'Budget\_\_c').
3075
+ sig { returns(String) }
3076
+ attr_accessor :zoho_field
3077
+
3078
+ sig do
3079
+ params(source: String, zoho_field: String).returns(
3080
+ T.attached_class
3081
+ )
3082
+ end
3083
+ def self.new(
3084
+ # Source key to read from the call: a structured_output field name, falling back
3085
+ # to a prompt variable of the same name.
3086
+ source:,
3087
+ # Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
3088
+ # or a custom 'Budget\_\_c').
3089
+ zoho_field:
3090
+ )
3091
+ end
3092
+
3093
+ sig { override.returns({ source: String, zoho_field: String }) }
3094
+ def to_hash
3095
+ end
3096
+ end
3097
+
3098
+ module Outcome
930
3099
  extend Revox::Internal::Type::Enum
931
3100
 
932
3101
  TaggedSymbol =
933
3102
  T.type_alias do
934
3103
  T.all(
935
3104
  Symbol,
936
- Revox::Models::AssistantListResponse::Assistant::Voice::Provider
3105
+ Revox::Models::AssistantListResponse::Assistant::Zoho::Outcome
937
3106
  )
938
3107
  end
939
3108
  OrSymbol = T.type_alias { T.any(Symbol, String) }
940
3109
 
941
- CARTESIA =
3110
+ NOT_INTERESTED =
942
3111
  T.let(
943
- :cartesia,
944
- Revox::Models::AssistantListResponse::Assistant::Voice::Provider::TaggedSymbol
3112
+ :not_interested,
3113
+ Revox::Models::AssistantListResponse::Assistant::Zoho::Outcome::TaggedSymbol
945
3114
  )
946
- ELEVENLABS =
3115
+ INTERESTED =
947
3116
  T.let(
948
- :elevenlabs,
949
- Revox::Models::AssistantListResponse::Assistant::Voice::Provider::TaggedSymbol
3117
+ :interested,
3118
+ Revox::Models::AssistantListResponse::Assistant::Zoho::Outcome::TaggedSymbol
3119
+ )
3120
+ COMPLETED =
3121
+ T.let(
3122
+ :completed,
3123
+ Revox::Models::AssistantListResponse::Assistant::Zoho::Outcome::TaggedSymbol
3124
+ )
3125
+ REQUESTED_CALLBACK_LATER =
3126
+ T.let(
3127
+ :requested_callback_later,
3128
+ Revox::Models::AssistantListResponse::Assistant::Zoho::Outcome::TaggedSymbol
3129
+ )
3130
+ REQUESTED_CALLBACK_NEW_NUMBER =
3131
+ T.let(
3132
+ :requested_callback_new_number,
3133
+ Revox::Models::AssistantListResponse::Assistant::Zoho::Outcome::TaggedSymbol
3134
+ )
3135
+ DO_NOT_CONTACT =
3136
+ T.let(
3137
+ :do_not_contact,
3138
+ Revox::Models::AssistantListResponse::Assistant::Zoho::Outcome::TaggedSymbol
3139
+ )
3140
+ AI_AVERSE =
3141
+ T.let(
3142
+ :ai_averse,
3143
+ Revox::Models::AssistantListResponse::Assistant::Zoho::Outcome::TaggedSymbol
3144
+ )
3145
+ NONE =
3146
+ T.let(
3147
+ :none,
3148
+ Revox::Models::AssistantListResponse::Assistant::Zoho::Outcome::TaggedSymbol
950
3149
  )
951
3150
 
952
3151
  sig do
953
3152
  override.returns(
954
3153
  T::Array[
955
- Revox::Models::AssistantListResponse::Assistant::Voice::Provider::TaggedSymbol
3154
+ Revox::Models::AssistantListResponse::Assistant::Zoho::Outcome::TaggedSymbol
956
3155
  ]
957
3156
  )
958
3157
  end
@@ -961,6 +3160,60 @@ module Revox
961
3160
  end
962
3161
  end
963
3162
 
3163
+ class CreatedBy < Revox::Internal::Type::BaseModel
3164
+ OrHash =
3165
+ T.type_alias do
3166
+ T.any(
3167
+ Revox::Models::AssistantListResponse::Assistant::CreatedBy,
3168
+ Revox::Internal::AnyHash
3169
+ )
3170
+ end
3171
+
3172
+ # The database user id of the creator.
3173
+ sig { returns(String) }
3174
+ attr_accessor :id
3175
+
3176
+ sig { returns(String) }
3177
+ attr_accessor :email
3178
+
3179
+ sig { returns(T.nilable(String)) }
3180
+ attr_accessor :first_name
3181
+
3182
+ sig { returns(T.nilable(String)) }
3183
+ attr_accessor :last_name
3184
+
3185
+ # The user who created the assistant.
3186
+ sig do
3187
+ params(
3188
+ id: String,
3189
+ email: String,
3190
+ first_name: T.nilable(String),
3191
+ last_name: T.nilable(String)
3192
+ ).returns(T.attached_class)
3193
+ end
3194
+ def self.new(
3195
+ # The database user id of the creator.
3196
+ id:,
3197
+ email:,
3198
+ first_name:,
3199
+ last_name:
3200
+ )
3201
+ end
3202
+
3203
+ sig do
3204
+ override.returns(
3205
+ {
3206
+ id: String,
3207
+ email: String,
3208
+ first_name: T.nilable(String),
3209
+ last_name: T.nilable(String)
3210
+ }
3211
+ )
3212
+ end
3213
+ def to_hash
3214
+ end
3215
+ end
3216
+
964
3217
  class FaqItem < Revox::Internal::Type::BaseModel
965
3218
  OrHash =
966
3219
  T.type_alias do