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