openai 0.20.0 → 0.21.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 (332) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/README.md +1 -1
  4. data/lib/openai/client.rb +4 -0
  5. data/lib/openai/internal/stream.rb +3 -2
  6. data/lib/openai/models/audio/speech_create_params.rb +6 -0
  7. data/lib/openai/models/chat/chat_completion_audio_param.rb +6 -0
  8. data/lib/openai/models/evals/run_cancel_response.rb +2 -2
  9. data/lib/openai/models/evals/run_create_params.rb +2 -2
  10. data/lib/openai/models/evals/run_create_response.rb +2 -2
  11. data/lib/openai/models/evals/run_list_response.rb +2 -2
  12. data/lib/openai/models/evals/run_retrieve_response.rb +2 -2
  13. data/lib/openai/models/realtime/client_secret_create_params.rb +93 -0
  14. data/lib/openai/models/realtime/client_secret_create_response.rb +300 -0
  15. data/lib/openai/models/realtime/conversation_created_event.rb +70 -0
  16. data/lib/openai/models/realtime/conversation_item.rb +44 -0
  17. data/lib/openai/models/realtime/conversation_item_added.rb +48 -0
  18. data/lib/openai/models/realtime/conversation_item_create_event.rb +57 -0
  19. data/lib/openai/models/realtime/conversation_item_created_event.rb +59 -0
  20. data/lib/openai/models/realtime/conversation_item_delete_event.rb +39 -0
  21. data/lib/openai/models/realtime/conversation_item_deleted_event.rb +38 -0
  22. data/lib/openai/models/realtime/conversation_item_done.rb +48 -0
  23. data/lib/openai/models/realtime/conversation_item_input_audio_transcription_completed_event.rb +189 -0
  24. data/lib/openai/models/realtime/conversation_item_input_audio_transcription_delta_event.rb +63 -0
  25. data/lib/openai/models/realtime/conversation_item_input_audio_transcription_failed_event.rb +96 -0
  26. data/lib/openai/models/realtime/conversation_item_input_audio_transcription_segment.rb +84 -0
  27. data/lib/openai/models/realtime/conversation_item_retrieve_event.rb +40 -0
  28. data/lib/openai/models/realtime/conversation_item_truncate_event.rb +68 -0
  29. data/lib/openai/models/realtime/conversation_item_truncated_event.rb +60 -0
  30. data/lib/openai/models/realtime/conversation_item_with_reference.rb +235 -0
  31. data/lib/openai/models/realtime/input_audio_buffer_append_event.rb +49 -0
  32. data/lib/openai/models/realtime/input_audio_buffer_clear_event.rb +29 -0
  33. data/lib/openai/models/realtime/input_audio_buffer_cleared_event.rb +29 -0
  34. data/lib/openai/models/realtime/input_audio_buffer_commit_event.rb +35 -0
  35. data/lib/openai/models/realtime/input_audio_buffer_committed_event.rb +51 -0
  36. data/lib/openai/models/realtime/input_audio_buffer_speech_started_event.rb +59 -0
  37. data/lib/openai/models/realtime/input_audio_buffer_speech_stopped_event.rb +51 -0
  38. data/lib/openai/models/realtime/input_audio_buffer_timeout_triggered.rb +52 -0
  39. data/lib/openai/models/realtime/log_prob_properties.rb +39 -0
  40. data/lib/openai/models/realtime/mcp_list_tools_completed.rb +36 -0
  41. data/lib/openai/models/realtime/mcp_list_tools_failed.rb +36 -0
  42. data/lib/openai/models/realtime/mcp_list_tools_in_progress.rb +36 -0
  43. data/lib/openai/models/realtime/output_audio_buffer_clear_event.rb +32 -0
  44. data/lib/openai/models/realtime/rate_limits_updated_event.rb +91 -0
  45. data/lib/openai/models/realtime/realtime_audio_config.rb +446 -0
  46. data/lib/openai/models/realtime/realtime_client_event.rb +123 -0
  47. data/lib/openai/models/realtime/realtime_client_secret_config.rb +64 -0
  48. data/lib/openai/models/realtime/realtime_conversation_item_assistant_message.rb +118 -0
  49. data/lib/openai/models/realtime/realtime_conversation_item_function_call.rb +94 -0
  50. data/lib/openai/models/realtime/realtime_conversation_item_function_call_output.rb +86 -0
  51. data/lib/openai/models/realtime/realtime_conversation_item_system_message.rb +118 -0
  52. data/lib/openai/models/realtime/realtime_conversation_item_user_message.rb +135 -0
  53. data/lib/openai/models/realtime/realtime_error.rb +55 -0
  54. data/lib/openai/models/realtime/realtime_error_event.rb +38 -0
  55. data/lib/openai/models/realtime/realtime_mcp_approval_request.rb +52 -0
  56. data/lib/openai/models/realtime/realtime_mcp_approval_response.rb +52 -0
  57. data/lib/openai/models/realtime/realtime_mcp_list_tools.rb +84 -0
  58. data/lib/openai/models/realtime/realtime_mcp_protocol_error.rb +29 -0
  59. data/lib/openai/models/realtime/realtime_mcp_tool_call.rb +94 -0
  60. data/lib/openai/models/realtime/realtime_mcp_tool_execution_error.rb +23 -0
  61. data/lib/openai/models/realtime/realtime_mcphttp_error.rb +29 -0
  62. data/lib/openai/models/realtime/realtime_response.rb +259 -0
  63. data/lib/openai/models/realtime/realtime_response_status.rb +103 -0
  64. data/lib/openai/models/realtime/realtime_response_usage.rb +61 -0
  65. data/lib/openai/models/realtime/realtime_response_usage_input_token_details.rb +36 -0
  66. data/lib/openai/models/realtime/realtime_response_usage_output_token_details.rb +28 -0
  67. data/lib/openai/models/realtime/realtime_server_event.rb +369 -0
  68. data/lib/openai/models/realtime/realtime_session.rb +696 -0
  69. data/lib/openai/models/realtime/realtime_session_create_request.rb +234 -0
  70. data/lib/openai/models/realtime/realtime_session_create_response.rb +579 -0
  71. data/lib/openai/models/realtime/realtime_tool_choice_config.rb +32 -0
  72. data/lib/openai/models/realtime/realtime_tools_config.rb +11 -0
  73. data/lib/openai/models/realtime/realtime_tools_config_union.rb +379 -0
  74. data/lib/openai/models/realtime/realtime_tracing_config.rb +61 -0
  75. data/lib/openai/models/realtime/realtime_transcription_session_create_request.rb +312 -0
  76. data/lib/openai/models/realtime/realtime_truncation.rb +67 -0
  77. data/lib/openai/models/realtime/response_audio_delta_event.rb +68 -0
  78. data/lib/openai/models/realtime/response_audio_done_event.rb +61 -0
  79. data/lib/openai/models/realtime/response_audio_transcript_delta_event.rb +68 -0
  80. data/lib/openai/models/realtime/response_audio_transcript_done_event.rb +70 -0
  81. data/lib/openai/models/realtime/response_cancel_event.rb +42 -0
  82. data/lib/openai/models/realtime/response_content_part_added_event.rb +120 -0
  83. data/lib/openai/models/realtime/response_content_part_done_event.rb +120 -0
  84. data/lib/openai/models/realtime/response_create_event.rb +391 -0
  85. data/lib/openai/models/realtime/response_created_event.rb +37 -0
  86. data/lib/openai/models/realtime/response_done_event.rb +38 -0
  87. data/lib/openai/models/realtime/response_function_call_arguments_delta_event.rb +72 -0
  88. data/lib/openai/models/realtime/response_function_call_arguments_done_event.rb +73 -0
  89. data/lib/openai/models/realtime/response_mcp_call_arguments_delta.rb +68 -0
  90. data/lib/openai/models/realtime/response_mcp_call_arguments_done.rb +60 -0
  91. data/lib/openai/models/realtime/response_mcp_call_completed.rb +44 -0
  92. data/lib/openai/models/realtime/response_mcp_call_failed.rb +44 -0
  93. data/lib/openai/models/realtime/response_mcp_call_in_progress.rb +44 -0
  94. data/lib/openai/models/realtime/response_output_item_added_event.rb +52 -0
  95. data/lib/openai/models/realtime/response_output_item_done_event.rb +53 -0
  96. data/lib/openai/models/realtime/response_text_delta_event.rb +68 -0
  97. data/lib/openai/models/realtime/response_text_done_event.rb +69 -0
  98. data/lib/openai/models/realtime/session_created_event.rb +38 -0
  99. data/lib/openai/models/realtime/session_update_event.rb +44 -0
  100. data/lib/openai/models/realtime/session_updated_event.rb +37 -0
  101. data/lib/openai/models/realtime/transcription_session_created.rb +278 -0
  102. data/lib/openai/models/realtime/transcription_session_update.rb +36 -0
  103. data/lib/openai/models/realtime/transcription_session_updated_event.rb +279 -0
  104. data/lib/openai/models/responses/response.rb +6 -3
  105. data/lib/openai/models/responses/response_create_params.rb +6 -3
  106. data/lib/openai/models/responses/tool.rb +3 -156
  107. data/lib/openai/models/responses/web_search_preview_tool.rb +124 -0
  108. data/lib/openai/models/responses/web_search_tool.rb +58 -21
  109. data/lib/openai/models/webhooks/realtime_call_incoming_webhook_event.rb +119 -0
  110. data/lib/openai/models/webhooks/unwrap_webhook_event.rb +4 -1
  111. data/lib/openai/models.rb +2 -0
  112. data/lib/openai/resources/realtime/client_secrets.rb +44 -0
  113. data/lib/openai/resources/realtime.rb +18 -0
  114. data/lib/openai/resources/responses.rb +2 -2
  115. data/lib/openai/resources/webhooks.rb +1 -1
  116. data/lib/openai/version.rb +1 -1
  117. data/lib/openai.rb +95 -0
  118. data/rbi/openai/client.rbi +3 -0
  119. data/rbi/openai/models/audio/speech_create_params.rbi +10 -0
  120. data/rbi/openai/models/chat/chat_completion_audio_param.rbi +10 -0
  121. data/rbi/openai/models/evals/run_cancel_response.rbi +4 -4
  122. data/rbi/openai/models/evals/run_create_params.rbi +8 -8
  123. data/rbi/openai/models/evals/run_create_response.rbi +4 -4
  124. data/rbi/openai/models/evals/run_list_response.rbi +4 -4
  125. data/rbi/openai/models/evals/run_retrieve_response.rbi +4 -4
  126. data/rbi/openai/models/realtime/client_secret_create_params.rbi +222 -0
  127. data/rbi/openai/models/realtime/client_secret_create_response.rbi +676 -0
  128. data/rbi/openai/models/realtime/conversation_created_event.rbi +164 -0
  129. data/rbi/openai/models/realtime/conversation_item.rbi +35 -0
  130. data/rbi/openai/models/realtime/conversation_item_added.rbi +105 -0
  131. data/rbi/openai/models/realtime/conversation_item_create_event.rbi +123 -0
  132. data/rbi/openai/models/realtime/conversation_item_created_event.rbi +117 -0
  133. data/rbi/openai/models/realtime/conversation_item_delete_event.rbi +57 -0
  134. data/rbi/openai/models/realtime/conversation_item_deleted_event.rbi +53 -0
  135. data/rbi/openai/models/realtime/conversation_item_done.rbi +105 -0
  136. data/rbi/openai/models/realtime/conversation_item_input_audio_transcription_completed_event.rbi +305 -0
  137. data/rbi/openai/models/realtime/conversation_item_input_audio_transcription_delta_event.rbi +93 -0
  138. data/rbi/openai/models/realtime/conversation_item_input_audio_transcription_failed_event.rbi +158 -0
  139. data/rbi/openai/models/realtime/conversation_item_input_audio_transcription_segment.rbi +107 -0
  140. data/rbi/openai/models/realtime/conversation_item_retrieve_event.rbi +58 -0
  141. data/rbi/openai/models/realtime/conversation_item_truncate_event.rbi +94 -0
  142. data/rbi/openai/models/realtime/conversation_item_truncated_event.rbi +80 -0
  143. data/rbi/openai/models/realtime/conversation_item_with_reference.rbi +549 -0
  144. data/rbi/openai/models/realtime/input_audio_buffer_append_event.rbi +65 -0
  145. data/rbi/openai/models/realtime/input_audio_buffer_clear_event.rbi +43 -0
  146. data/rbi/openai/models/realtime/input_audio_buffer_cleared_event.rbi +40 -0
  147. data/rbi/openai/models/realtime/input_audio_buffer_commit_event.rbi +49 -0
  148. data/rbi/openai/models/realtime/input_audio_buffer_committed_event.rbi +72 -0
  149. data/rbi/openai/models/realtime/input_audio_buffer_speech_started_event.rbi +82 -0
  150. data/rbi/openai/models/realtime/input_audio_buffer_speech_stopped_event.rbi +73 -0
  151. data/rbi/openai/models/realtime/input_audio_buffer_timeout_triggered.rbi +75 -0
  152. data/rbi/openai/models/realtime/log_prob_properties.rbi +55 -0
  153. data/rbi/openai/models/realtime/mcp_list_tools_completed.rbi +51 -0
  154. data/rbi/openai/models/realtime/mcp_list_tools_failed.rbi +51 -0
  155. data/rbi/openai/models/realtime/mcp_list_tools_in_progress.rbi +51 -0
  156. data/rbi/openai/models/realtime/output_audio_buffer_clear_event.rbi +46 -0
  157. data/rbi/openai/models/realtime/rate_limits_updated_event.rbi +187 -0
  158. data/rbi/openai/models/realtime/realtime_audio_config.rbi +1004 -0
  159. data/rbi/openai/models/realtime/realtime_client_event.rbi +38 -0
  160. data/rbi/openai/models/realtime/realtime_client_secret_config.rbi +147 -0
  161. data/rbi/openai/models/realtime/realtime_conversation_item_assistant_message.rbi +292 -0
  162. data/rbi/openai/models/realtime/realtime_conversation_item_function_call.rbi +199 -0
  163. data/rbi/openai/models/realtime/realtime_conversation_item_function_call_output.rbi +188 -0
  164. data/rbi/openai/models/realtime/realtime_conversation_item_system_message.rbi +292 -0
  165. data/rbi/openai/models/realtime/realtime_conversation_item_user_message.rbi +319 -0
  166. data/rbi/openai/models/realtime/realtime_error.rbi +72 -0
  167. data/rbi/openai/models/realtime/realtime_error_event.rbi +64 -0
  168. data/rbi/openai/models/realtime/realtime_mcp_approval_request.rbi +75 -0
  169. data/rbi/openai/models/realtime/realtime_mcp_approval_response.rbi +75 -0
  170. data/rbi/openai/models/realtime/realtime_mcp_list_tools.rbi +131 -0
  171. data/rbi/openai/models/realtime/realtime_mcp_protocol_error.rbi +40 -0
  172. data/rbi/openai/models/realtime/realtime_mcp_tool_call.rbi +145 -0
  173. data/rbi/openai/models/realtime/realtime_mcp_tool_execution_error.rbi +31 -0
  174. data/rbi/openai/models/realtime/realtime_mcphttp_error.rbi +40 -0
  175. data/rbi/openai/models/realtime/realtime_response.rbi +573 -0
  176. data/rbi/openai/models/realtime/realtime_response_status.rbi +233 -0
  177. data/rbi/openai/models/realtime/realtime_response_usage.rbi +121 -0
  178. data/rbi/openai/models/realtime/realtime_response_usage_input_token_details.rbi +68 -0
  179. data/rbi/openai/models/realtime/realtime_response_usage_output_token_details.rbi +51 -0
  180. data/rbi/openai/models/realtime/realtime_server_event.rbi +311 -0
  181. data/rbi/openai/models/realtime/realtime_session.rbi +1426 -0
  182. data/rbi/openai/models/realtime/realtime_session_create_request.rbi +560 -0
  183. data/rbi/openai/models/realtime/realtime_session_create_response.rbi +1249 -0
  184. data/rbi/openai/models/realtime/realtime_tool_choice_config.rbi +30 -0
  185. data/rbi/openai/models/realtime/realtime_tools_config.rbi +15 -0
  186. data/rbi/openai/models/realtime/realtime_tools_config_union.rbi +755 -0
  187. data/rbi/openai/models/realtime/realtime_tracing_config.rbi +95 -0
  188. data/rbi/openai/models/realtime/realtime_transcription_session_create_request.rbi +703 -0
  189. data/rbi/openai/models/realtime/realtime_truncation.rbi +117 -0
  190. data/rbi/openai/models/realtime/response_audio_delta_event.rbi +91 -0
  191. data/rbi/openai/models/realtime/response_audio_done_event.rbi +84 -0
  192. data/rbi/openai/models/realtime/response_audio_transcript_delta_event.rbi +91 -0
  193. data/rbi/openai/models/realtime/response_audio_transcript_done_event.rbi +93 -0
  194. data/rbi/openai/models/realtime/response_cancel_event.rbi +63 -0
  195. data/rbi/openai/models/realtime/response_content_part_added_event.rbi +219 -0
  196. data/rbi/openai/models/realtime/response_content_part_done_event.rbi +219 -0
  197. data/rbi/openai/models/realtime/response_create_event.rbi +863 -0
  198. data/rbi/openai/models/realtime/response_created_event.rbi +65 -0
  199. data/rbi/openai/models/realtime/response_done_event.rbi +66 -0
  200. data/rbi/openai/models/realtime/response_function_call_arguments_delta_event.rbi +91 -0
  201. data/rbi/openai/models/realtime/response_function_call_arguments_done_event.rbi +92 -0
  202. data/rbi/openai/models/realtime/response_mcp_call_arguments_delta.rbi +91 -0
  203. data/rbi/openai/models/realtime/response_mcp_call_arguments_done.rbi +83 -0
  204. data/rbi/openai/models/realtime/response_mcp_call_completed.rbi +67 -0
  205. data/rbi/openai/models/realtime/response_mcp_call_failed.rbi +67 -0
  206. data/rbi/openai/models/realtime/response_mcp_call_in_progress.rbi +67 -0
  207. data/rbi/openai/models/realtime/response_output_item_added_event.rbi +111 -0
  208. data/rbi/openai/models/realtime/response_output_item_done_event.rbi +112 -0
  209. data/rbi/openai/models/realtime/response_text_delta_event.rbi +91 -0
  210. data/rbi/openai/models/realtime/response_text_done_event.rbi +92 -0
  211. data/rbi/openai/models/realtime/session_created_event.rbi +64 -0
  212. data/rbi/openai/models/realtime/session_update_event.rbi +77 -0
  213. data/rbi/openai/models/realtime/session_updated_event.rbi +63 -0
  214. data/rbi/openai/models/realtime/transcription_session_created.rbi +653 -0
  215. data/rbi/openai/models/realtime/transcription_session_update.rbi +74 -0
  216. data/rbi/openai/models/realtime/transcription_session_updated_event.rbi +657 -0
  217. data/rbi/openai/models/responses/response.rbi +10 -4
  218. data/rbi/openai/models/responses/response_create_params.rbi +16 -10
  219. data/rbi/openai/models/responses/tool.rbi +2 -348
  220. data/rbi/openai/models/responses/web_search_preview_tool.rbi +245 -0
  221. data/rbi/openai/models/responses/web_search_tool.rbi +120 -23
  222. data/rbi/openai/models/webhooks/realtime_call_incoming_webhook_event.rbi +222 -0
  223. data/rbi/openai/models/webhooks/unwrap_webhook_event.rbi +1 -0
  224. data/rbi/openai/models.rbi +2 -0
  225. data/rbi/openai/resources/realtime/client_secrets.rbi +38 -0
  226. data/rbi/openai/resources/realtime.rbi +15 -0
  227. data/rbi/openai/resources/responses.rbi +12 -6
  228. data/rbi/openai/resources/webhooks.rbi +1 -0
  229. data/sig/openai/client.rbs +2 -0
  230. data/sig/openai/models/audio/speech_create_params.rbs +4 -0
  231. data/sig/openai/models/chat/chat_completion_audio_param.rbs +4 -0
  232. data/sig/openai/models/realtime/client_secret_create_params.rbs +89 -0
  233. data/sig/openai/models/realtime/client_secret_create_response.rbs +292 -0
  234. data/sig/openai/models/realtime/conversation_created_event.rbs +70 -0
  235. data/sig/openai/models/realtime/conversation_item.rbs +22 -0
  236. data/sig/openai/models/realtime/conversation_item_added.rbs +37 -0
  237. data/sig/openai/models/realtime/conversation_item_create_event.rbs +41 -0
  238. data/sig/openai/models/realtime/conversation_item_created_event.rbs +37 -0
  239. data/sig/openai/models/realtime/conversation_item_delete_event.rbs +30 -0
  240. data/sig/openai/models/realtime/conversation_item_deleted_event.rbs +32 -0
  241. data/sig/openai/models/realtime/conversation_item_done.rbs +37 -0
  242. data/sig/openai/models/realtime/conversation_item_input_audio_transcription_completed_event.rbs +136 -0
  243. data/sig/openai/models/realtime/conversation_item_input_audio_transcription_delta_event.rbs +51 -0
  244. data/sig/openai/models/realtime/conversation_item_input_audio_transcription_failed_event.rbs +77 -0
  245. data/sig/openai/models/realtime/conversation_item_input_audio_transcription_segment.rbs +62 -0
  246. data/sig/openai/models/realtime/conversation_item_retrieve_event.rbs +34 -0
  247. data/sig/openai/models/realtime/conversation_item_truncate_event.rbs +44 -0
  248. data/sig/openai/models/realtime/conversation_item_truncated_event.rbs +42 -0
  249. data/sig/openai/models/realtime/conversation_item_with_reference.rbs +207 -0
  250. data/sig/openai/models/realtime/input_audio_buffer_append_event.rbs +30 -0
  251. data/sig/openai/models/realtime/input_audio_buffer_clear_event.rbs +23 -0
  252. data/sig/openai/models/realtime/input_audio_buffer_cleared_event.rbs +24 -0
  253. data/sig/openai/models/realtime/input_audio_buffer_commit_event.rbs +23 -0
  254. data/sig/openai/models/realtime/input_audio_buffer_committed_event.rbs +37 -0
  255. data/sig/openai/models/realtime/input_audio_buffer_speech_started_event.rbs +37 -0
  256. data/sig/openai/models/realtime/input_audio_buffer_speech_stopped_event.rbs +37 -0
  257. data/sig/openai/models/realtime/input_audio_buffer_timeout_triggered.rbs +42 -0
  258. data/sig/openai/models/realtime/log_prob_properties.rbs +28 -0
  259. data/sig/openai/models/realtime/mcp_list_tools_completed.rbs +28 -0
  260. data/sig/openai/models/realtime/mcp_list_tools_failed.rbs +28 -0
  261. data/sig/openai/models/realtime/mcp_list_tools_in_progress.rbs +32 -0
  262. data/sig/openai/models/realtime/output_audio_buffer_clear_event.rbs +23 -0
  263. data/sig/openai/models/realtime/rate_limits_updated_event.rbs +85 -0
  264. data/sig/openai/models/realtime/realtime_audio_config.rbs +354 -0
  265. data/sig/openai/models/realtime/realtime_client_event.rbs +25 -0
  266. data/sig/openai/models/realtime/realtime_client_secret_config.rbs +60 -0
  267. data/sig/openai/models/realtime/realtime_conversation_item_assistant_message.rbs +117 -0
  268. data/sig/openai/models/realtime/realtime_conversation_item_function_call.rbs +86 -0
  269. data/sig/openai/models/realtime/realtime_conversation_item_function_call_output.rbs +79 -0
  270. data/sig/openai/models/realtime/realtime_conversation_item_system_message.rbs +117 -0
  271. data/sig/openai/models/realtime/realtime_conversation_item_user_message.rbs +132 -0
  272. data/sig/openai/models/realtime/realtime_error.rbs +42 -0
  273. data/sig/openai/models/realtime/realtime_error_event.rbs +32 -0
  274. data/sig/openai/models/realtime/realtime_mcp_approval_request.rbs +42 -0
  275. data/sig/openai/models/realtime/realtime_mcp_approval_response.rbs +42 -0
  276. data/sig/openai/models/realtime/realtime_mcp_list_tools.rbs +71 -0
  277. data/sig/openai/models/realtime/realtime_mcp_protocol_error.rbs +28 -0
  278. data/sig/openai/models/realtime/realtime_mcp_tool_call.rbs +68 -0
  279. data/sig/openai/models/realtime/realtime_mcp_tool_execution_error.rbs +18 -0
  280. data/sig/openai/models/realtime/realtime_mcphttp_error.rbs +24 -0
  281. data/sig/openai/models/realtime/realtime_response.rbs +210 -0
  282. data/sig/openai/models/realtime/realtime_response_status.rbs +90 -0
  283. data/sig/openai/models/realtime/realtime_response_usage.rbs +56 -0
  284. data/sig/openai/models/realtime/realtime_response_usage_input_token_details.rbs +34 -0
  285. data/sig/openai/models/realtime/realtime_response_usage_output_token_details.rbs +22 -0
  286. data/sig/openai/models/realtime/realtime_server_event.rbs +168 -0
  287. data/sig/openai/models/realtime/realtime_session.rbs +521 -0
  288. data/sig/openai/models/realtime/realtime_session_create_request.rbs +178 -0
  289. data/sig/openai/models/realtime/realtime_session_create_response.rbs +526 -0
  290. data/sig/openai/models/realtime/realtime_tool_choice_config.rbs +16 -0
  291. data/sig/openai/models/realtime/realtime_tools_config.rbs +10 -0
  292. data/sig/openai/models/realtime/realtime_tools_config_union.rbs +280 -0
  293. data/sig/openai/models/realtime/realtime_tracing_config.rbs +43 -0
  294. data/sig/openai/models/realtime/realtime_transcription_session_create_request.rbs +242 -0
  295. data/sig/openai/models/realtime/realtime_truncation.rbs +53 -0
  296. data/sig/openai/models/realtime/response_audio_delta_event.rbs +52 -0
  297. data/sig/openai/models/realtime/response_audio_done_event.rbs +47 -0
  298. data/sig/openai/models/realtime/response_audio_transcript_delta_event.rbs +52 -0
  299. data/sig/openai/models/realtime/response_audio_transcript_done_event.rbs +52 -0
  300. data/sig/openai/models/realtime/response_cancel_event.rbs +32 -0
  301. data/sig/openai/models/realtime/response_content_part_added_event.rbs +105 -0
  302. data/sig/openai/models/realtime/response_content_part_done_event.rbs +105 -0
  303. data/sig/openai/models/realtime/response_create_event.rbs +281 -0
  304. data/sig/openai/models/realtime/response_created_event.rbs +32 -0
  305. data/sig/openai/models/realtime/response_done_event.rbs +32 -0
  306. data/sig/openai/models/realtime/response_function_call_arguments_delta_event.rbs +52 -0
  307. data/sig/openai/models/realtime/response_function_call_arguments_done_event.rbs +52 -0
  308. data/sig/openai/models/realtime/response_mcp_call_arguments_delta.rbs +52 -0
  309. data/sig/openai/models/realtime/response_mcp_call_arguments_done.rbs +47 -0
  310. data/sig/openai/models/realtime/response_mcp_call_completed.rbs +37 -0
  311. data/sig/openai/models/realtime/response_mcp_call_failed.rbs +37 -0
  312. data/sig/openai/models/realtime/response_mcp_call_in_progress.rbs +37 -0
  313. data/sig/openai/models/realtime/response_output_item_added_event.rbs +42 -0
  314. data/sig/openai/models/realtime/response_output_item_done_event.rbs +42 -0
  315. data/sig/openai/models/realtime/response_text_delta_event.rbs +52 -0
  316. data/sig/openai/models/realtime/response_text_done_event.rbs +52 -0
  317. data/sig/openai/models/realtime/session_created_event.rbs +32 -0
  318. data/sig/openai/models/realtime/session_update_event.rbs +34 -0
  319. data/sig/openai/models/realtime/session_updated_event.rbs +32 -0
  320. data/sig/openai/models/realtime/transcription_session_created.rbs +282 -0
  321. data/sig/openai/models/realtime/transcription_session_update.rbs +34 -0
  322. data/sig/openai/models/realtime/transcription_session_updated_event.rbs +282 -0
  323. data/sig/openai/models/responses/tool.rbs +1 -121
  324. data/sig/openai/models/responses/web_search_preview_tool.rbs +96 -0
  325. data/sig/openai/models/responses/web_search_tool.rbs +39 -10
  326. data/sig/openai/models/webhooks/realtime_call_incoming_webhook_event.rbs +90 -0
  327. data/sig/openai/models/webhooks/unwrap_webhook_event.rbs +1 -0
  328. data/sig/openai/models.rbs +2 -0
  329. data/sig/openai/resources/realtime/client_secrets.rbs +15 -0
  330. data/sig/openai/resources/realtime.rbs +9 -0
  331. data/sig/openai/resources/webhooks.rbs +1 -0
  332. metadata +287 -2
@@ -0,0 +1,111 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Models
5
+ module Realtime
6
+ class ResponseOutputItemAddedEvent < OpenAI::Internal::Type::BaseModel
7
+ OrHash =
8
+ T.type_alias do
9
+ T.any(
10
+ OpenAI::Realtime::ResponseOutputItemAddedEvent,
11
+ OpenAI::Internal::AnyHash
12
+ )
13
+ end
14
+
15
+ # The unique ID of the server event.
16
+ sig { returns(String) }
17
+ attr_accessor :event_id
18
+
19
+ # A single item within a Realtime conversation.
20
+ sig do
21
+ returns(
22
+ T.any(
23
+ OpenAI::Realtime::RealtimeConversationItemSystemMessage,
24
+ OpenAI::Realtime::RealtimeConversationItemUserMessage,
25
+ OpenAI::Realtime::RealtimeConversationItemAssistantMessage,
26
+ OpenAI::Realtime::RealtimeConversationItemFunctionCall,
27
+ OpenAI::Realtime::RealtimeConversationItemFunctionCallOutput,
28
+ OpenAI::Realtime::RealtimeMcpApprovalResponse,
29
+ OpenAI::Realtime::RealtimeMcpListTools,
30
+ OpenAI::Realtime::RealtimeMcpToolCall,
31
+ OpenAI::Realtime::RealtimeMcpApprovalRequest
32
+ )
33
+ )
34
+ end
35
+ attr_accessor :item
36
+
37
+ # The index of the output item in the Response.
38
+ sig { returns(Integer) }
39
+ attr_accessor :output_index
40
+
41
+ # The ID of the Response to which the item belongs.
42
+ sig { returns(String) }
43
+ attr_accessor :response_id
44
+
45
+ # The event type, must be `response.output_item.added`.
46
+ sig { returns(Symbol) }
47
+ attr_accessor :type
48
+
49
+ # Returned when a new Item is created during Response generation.
50
+ sig do
51
+ params(
52
+ event_id: String,
53
+ item:
54
+ T.any(
55
+ OpenAI::Realtime::RealtimeConversationItemSystemMessage::OrHash,
56
+ OpenAI::Realtime::RealtimeConversationItemUserMessage::OrHash,
57
+ OpenAI::Realtime::RealtimeConversationItemAssistantMessage::OrHash,
58
+ OpenAI::Realtime::RealtimeConversationItemFunctionCall::OrHash,
59
+ OpenAI::Realtime::RealtimeConversationItemFunctionCallOutput::OrHash,
60
+ OpenAI::Realtime::RealtimeMcpApprovalResponse::OrHash,
61
+ OpenAI::Realtime::RealtimeMcpListTools::OrHash,
62
+ OpenAI::Realtime::RealtimeMcpToolCall::OrHash,
63
+ OpenAI::Realtime::RealtimeMcpApprovalRequest::OrHash
64
+ ),
65
+ output_index: Integer,
66
+ response_id: String,
67
+ type: Symbol
68
+ ).returns(T.attached_class)
69
+ end
70
+ def self.new(
71
+ # The unique ID of the server event.
72
+ event_id:,
73
+ # A single item within a Realtime conversation.
74
+ item:,
75
+ # The index of the output item in the Response.
76
+ output_index:,
77
+ # The ID of the Response to which the item belongs.
78
+ response_id:,
79
+ # The event type, must be `response.output_item.added`.
80
+ type: :"response.output_item.added"
81
+ )
82
+ end
83
+
84
+ sig do
85
+ override.returns(
86
+ {
87
+ event_id: String,
88
+ item:
89
+ T.any(
90
+ OpenAI::Realtime::RealtimeConversationItemSystemMessage,
91
+ OpenAI::Realtime::RealtimeConversationItemUserMessage,
92
+ OpenAI::Realtime::RealtimeConversationItemAssistantMessage,
93
+ OpenAI::Realtime::RealtimeConversationItemFunctionCall,
94
+ OpenAI::Realtime::RealtimeConversationItemFunctionCallOutput,
95
+ OpenAI::Realtime::RealtimeMcpApprovalResponse,
96
+ OpenAI::Realtime::RealtimeMcpListTools,
97
+ OpenAI::Realtime::RealtimeMcpToolCall,
98
+ OpenAI::Realtime::RealtimeMcpApprovalRequest
99
+ ),
100
+ output_index: Integer,
101
+ response_id: String,
102
+ type: Symbol
103
+ }
104
+ )
105
+ end
106
+ def to_hash
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,112 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Models
5
+ module Realtime
6
+ class ResponseOutputItemDoneEvent < OpenAI::Internal::Type::BaseModel
7
+ OrHash =
8
+ T.type_alias do
9
+ T.any(
10
+ OpenAI::Realtime::ResponseOutputItemDoneEvent,
11
+ OpenAI::Internal::AnyHash
12
+ )
13
+ end
14
+
15
+ # The unique ID of the server event.
16
+ sig { returns(String) }
17
+ attr_accessor :event_id
18
+
19
+ # A single item within a Realtime conversation.
20
+ sig do
21
+ returns(
22
+ T.any(
23
+ OpenAI::Realtime::RealtimeConversationItemSystemMessage,
24
+ OpenAI::Realtime::RealtimeConversationItemUserMessage,
25
+ OpenAI::Realtime::RealtimeConversationItemAssistantMessage,
26
+ OpenAI::Realtime::RealtimeConversationItemFunctionCall,
27
+ OpenAI::Realtime::RealtimeConversationItemFunctionCallOutput,
28
+ OpenAI::Realtime::RealtimeMcpApprovalResponse,
29
+ OpenAI::Realtime::RealtimeMcpListTools,
30
+ OpenAI::Realtime::RealtimeMcpToolCall,
31
+ OpenAI::Realtime::RealtimeMcpApprovalRequest
32
+ )
33
+ )
34
+ end
35
+ attr_accessor :item
36
+
37
+ # The index of the output item in the Response.
38
+ sig { returns(Integer) }
39
+ attr_accessor :output_index
40
+
41
+ # The ID of the Response to which the item belongs.
42
+ sig { returns(String) }
43
+ attr_accessor :response_id
44
+
45
+ # The event type, must be `response.output_item.done`.
46
+ sig { returns(Symbol) }
47
+ attr_accessor :type
48
+
49
+ # Returned when an Item is done streaming. Also emitted when a Response is
50
+ # interrupted, incomplete, or cancelled.
51
+ sig do
52
+ params(
53
+ event_id: String,
54
+ item:
55
+ T.any(
56
+ OpenAI::Realtime::RealtimeConversationItemSystemMessage::OrHash,
57
+ OpenAI::Realtime::RealtimeConversationItemUserMessage::OrHash,
58
+ OpenAI::Realtime::RealtimeConversationItemAssistantMessage::OrHash,
59
+ OpenAI::Realtime::RealtimeConversationItemFunctionCall::OrHash,
60
+ OpenAI::Realtime::RealtimeConversationItemFunctionCallOutput::OrHash,
61
+ OpenAI::Realtime::RealtimeMcpApprovalResponse::OrHash,
62
+ OpenAI::Realtime::RealtimeMcpListTools::OrHash,
63
+ OpenAI::Realtime::RealtimeMcpToolCall::OrHash,
64
+ OpenAI::Realtime::RealtimeMcpApprovalRequest::OrHash
65
+ ),
66
+ output_index: Integer,
67
+ response_id: String,
68
+ type: Symbol
69
+ ).returns(T.attached_class)
70
+ end
71
+ def self.new(
72
+ # The unique ID of the server event.
73
+ event_id:,
74
+ # A single item within a Realtime conversation.
75
+ item:,
76
+ # The index of the output item in the Response.
77
+ output_index:,
78
+ # The ID of the Response to which the item belongs.
79
+ response_id:,
80
+ # The event type, must be `response.output_item.done`.
81
+ type: :"response.output_item.done"
82
+ )
83
+ end
84
+
85
+ sig do
86
+ override.returns(
87
+ {
88
+ event_id: String,
89
+ item:
90
+ T.any(
91
+ OpenAI::Realtime::RealtimeConversationItemSystemMessage,
92
+ OpenAI::Realtime::RealtimeConversationItemUserMessage,
93
+ OpenAI::Realtime::RealtimeConversationItemAssistantMessage,
94
+ OpenAI::Realtime::RealtimeConversationItemFunctionCall,
95
+ OpenAI::Realtime::RealtimeConversationItemFunctionCallOutput,
96
+ OpenAI::Realtime::RealtimeMcpApprovalResponse,
97
+ OpenAI::Realtime::RealtimeMcpListTools,
98
+ OpenAI::Realtime::RealtimeMcpToolCall,
99
+ OpenAI::Realtime::RealtimeMcpApprovalRequest
100
+ ),
101
+ output_index: Integer,
102
+ response_id: String,
103
+ type: Symbol
104
+ }
105
+ )
106
+ end
107
+ def to_hash
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,91 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Models
5
+ module Realtime
6
+ class ResponseTextDeltaEvent < OpenAI::Internal::Type::BaseModel
7
+ OrHash =
8
+ T.type_alias do
9
+ T.any(
10
+ OpenAI::Realtime::ResponseTextDeltaEvent,
11
+ OpenAI::Internal::AnyHash
12
+ )
13
+ end
14
+
15
+ # The index of the content part in the item's content array.
16
+ sig { returns(Integer) }
17
+ attr_accessor :content_index
18
+
19
+ # The text delta.
20
+ sig { returns(String) }
21
+ attr_accessor :delta
22
+
23
+ # The unique ID of the server event.
24
+ sig { returns(String) }
25
+ attr_accessor :event_id
26
+
27
+ # The ID of the item.
28
+ sig { returns(String) }
29
+ attr_accessor :item_id
30
+
31
+ # The index of the output item in the response.
32
+ sig { returns(Integer) }
33
+ attr_accessor :output_index
34
+
35
+ # The ID of the response.
36
+ sig { returns(String) }
37
+ attr_accessor :response_id
38
+
39
+ # The event type, must be `response.output_text.delta`.
40
+ sig { returns(Symbol) }
41
+ attr_accessor :type
42
+
43
+ # Returned when the text value of an "output_text" content part is updated.
44
+ sig do
45
+ params(
46
+ content_index: Integer,
47
+ delta: String,
48
+ event_id: String,
49
+ item_id: String,
50
+ output_index: Integer,
51
+ response_id: String,
52
+ type: Symbol
53
+ ).returns(T.attached_class)
54
+ end
55
+ def self.new(
56
+ # The index of the content part in the item's content array.
57
+ content_index:,
58
+ # The text delta.
59
+ delta:,
60
+ # The unique ID of the server event.
61
+ event_id:,
62
+ # The ID of the item.
63
+ item_id:,
64
+ # The index of the output item in the response.
65
+ output_index:,
66
+ # The ID of the response.
67
+ response_id:,
68
+ # The event type, must be `response.output_text.delta`.
69
+ type: :"response.output_text.delta"
70
+ )
71
+ end
72
+
73
+ sig do
74
+ override.returns(
75
+ {
76
+ content_index: Integer,
77
+ delta: String,
78
+ event_id: String,
79
+ item_id: String,
80
+ output_index: Integer,
81
+ response_id: String,
82
+ type: Symbol
83
+ }
84
+ )
85
+ end
86
+ def to_hash
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,92 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Models
5
+ module Realtime
6
+ class ResponseTextDoneEvent < OpenAI::Internal::Type::BaseModel
7
+ OrHash =
8
+ T.type_alias do
9
+ T.any(
10
+ OpenAI::Realtime::ResponseTextDoneEvent,
11
+ OpenAI::Internal::AnyHash
12
+ )
13
+ end
14
+
15
+ # The index of the content part in the item's content array.
16
+ sig { returns(Integer) }
17
+ attr_accessor :content_index
18
+
19
+ # The unique ID of the server event.
20
+ sig { returns(String) }
21
+ attr_accessor :event_id
22
+
23
+ # The ID of the item.
24
+ sig { returns(String) }
25
+ attr_accessor :item_id
26
+
27
+ # The index of the output item in the response.
28
+ sig { returns(Integer) }
29
+ attr_accessor :output_index
30
+
31
+ # The ID of the response.
32
+ sig { returns(String) }
33
+ attr_accessor :response_id
34
+
35
+ # The final text content.
36
+ sig { returns(String) }
37
+ attr_accessor :text
38
+
39
+ # The event type, must be `response.output_text.done`.
40
+ sig { returns(Symbol) }
41
+ attr_accessor :type
42
+
43
+ # Returned when the text value of an "output_text" content part is done streaming.
44
+ # Also emitted when a Response is interrupted, incomplete, or cancelled.
45
+ sig do
46
+ params(
47
+ content_index: Integer,
48
+ event_id: String,
49
+ item_id: String,
50
+ output_index: Integer,
51
+ response_id: String,
52
+ text: String,
53
+ type: Symbol
54
+ ).returns(T.attached_class)
55
+ end
56
+ def self.new(
57
+ # The index of the content part in the item's content array.
58
+ content_index:,
59
+ # The unique ID of the server event.
60
+ event_id:,
61
+ # The ID of the item.
62
+ item_id:,
63
+ # The index of the output item in the response.
64
+ output_index:,
65
+ # The ID of the response.
66
+ response_id:,
67
+ # The final text content.
68
+ text:,
69
+ # The event type, must be `response.output_text.done`.
70
+ type: :"response.output_text.done"
71
+ )
72
+ end
73
+
74
+ sig do
75
+ override.returns(
76
+ {
77
+ content_index: Integer,
78
+ event_id: String,
79
+ item_id: String,
80
+ output_index: Integer,
81
+ response_id: String,
82
+ text: String,
83
+ type: Symbol
84
+ }
85
+ )
86
+ end
87
+ def to_hash
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,64 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Models
5
+ module Realtime
6
+ class SessionCreatedEvent < OpenAI::Internal::Type::BaseModel
7
+ OrHash =
8
+ T.type_alias do
9
+ T.any(
10
+ OpenAI::Realtime::SessionCreatedEvent,
11
+ OpenAI::Internal::AnyHash
12
+ )
13
+ end
14
+
15
+ # The unique ID of the server event.
16
+ sig { returns(String) }
17
+ attr_accessor :event_id
18
+
19
+ # Realtime session object.
20
+ sig { returns(OpenAI::Realtime::RealtimeSession) }
21
+ attr_reader :session
22
+
23
+ sig { params(session: OpenAI::Realtime::RealtimeSession::OrHash).void }
24
+ attr_writer :session
25
+
26
+ # The event type, must be `session.created`.
27
+ sig { returns(Symbol) }
28
+ attr_accessor :type
29
+
30
+ # Returned when a Session is created. Emitted automatically when a new connection
31
+ # is established as the first server event. This event will contain the default
32
+ # Session configuration.
33
+ sig do
34
+ params(
35
+ event_id: String,
36
+ session: OpenAI::Realtime::RealtimeSession::OrHash,
37
+ type: Symbol
38
+ ).returns(T.attached_class)
39
+ end
40
+ def self.new(
41
+ # The unique ID of the server event.
42
+ event_id:,
43
+ # Realtime session object.
44
+ session:,
45
+ # The event type, must be `session.created`.
46
+ type: :"session.created"
47
+ )
48
+ end
49
+
50
+ sig do
51
+ override.returns(
52
+ {
53
+ event_id: String,
54
+ session: OpenAI::Realtime::RealtimeSession,
55
+ type: Symbol
56
+ }
57
+ )
58
+ end
59
+ def to_hash
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,77 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Models
5
+ module Realtime
6
+ class SessionUpdateEvent < OpenAI::Internal::Type::BaseModel
7
+ OrHash =
8
+ T.type_alias do
9
+ T.any(
10
+ OpenAI::Realtime::SessionUpdateEvent,
11
+ OpenAI::Internal::AnyHash
12
+ )
13
+ end
14
+
15
+ # Realtime session object configuration.
16
+ sig { returns(OpenAI::Realtime::RealtimeSessionCreateRequest) }
17
+ attr_reader :session
18
+
19
+ sig do
20
+ params(
21
+ session: OpenAI::Realtime::RealtimeSessionCreateRequest::OrHash
22
+ ).void
23
+ end
24
+ attr_writer :session
25
+
26
+ # The event type, must be `session.update`.
27
+ sig { returns(Symbol) }
28
+ attr_accessor :type
29
+
30
+ # Optional client-generated ID used to identify this event.
31
+ sig { returns(T.nilable(String)) }
32
+ attr_reader :event_id
33
+
34
+ sig { params(event_id: String).void }
35
+ attr_writer :event_id
36
+
37
+ # Send this event to update the session’s default configuration. The client may
38
+ # send this event at any time to update any field, except for `voice`. However,
39
+ # note that once a session has been initialized with a particular `model`, it
40
+ # can’t be changed to another model using `session.update`.
41
+ #
42
+ # When the server receives a `session.update`, it will respond with a
43
+ # `session.updated` event showing the full, effective configuration. Only the
44
+ # fields that are present are updated. To clear a field like `instructions`, pass
45
+ # an empty string.
46
+ sig do
47
+ params(
48
+ session: OpenAI::Realtime::RealtimeSessionCreateRequest::OrHash,
49
+ event_id: String,
50
+ type: Symbol
51
+ ).returns(T.attached_class)
52
+ end
53
+ def self.new(
54
+ # Realtime session object configuration.
55
+ session:,
56
+ # Optional client-generated ID used to identify this event.
57
+ event_id: nil,
58
+ # The event type, must be `session.update`.
59
+ type: :"session.update"
60
+ )
61
+ end
62
+
63
+ sig do
64
+ override.returns(
65
+ {
66
+ session: OpenAI::Realtime::RealtimeSessionCreateRequest,
67
+ type: Symbol,
68
+ event_id: String
69
+ }
70
+ )
71
+ end
72
+ def to_hash
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,63 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Models
5
+ module Realtime
6
+ class SessionUpdatedEvent < OpenAI::Internal::Type::BaseModel
7
+ OrHash =
8
+ T.type_alias do
9
+ T.any(
10
+ OpenAI::Realtime::SessionUpdatedEvent,
11
+ OpenAI::Internal::AnyHash
12
+ )
13
+ end
14
+
15
+ # The unique ID of the server event.
16
+ sig { returns(String) }
17
+ attr_accessor :event_id
18
+
19
+ # Realtime session object.
20
+ sig { returns(OpenAI::Realtime::RealtimeSession) }
21
+ attr_reader :session
22
+
23
+ sig { params(session: OpenAI::Realtime::RealtimeSession::OrHash).void }
24
+ attr_writer :session
25
+
26
+ # The event type, must be `session.updated`.
27
+ sig { returns(Symbol) }
28
+ attr_accessor :type
29
+
30
+ # Returned when a session is updated with a `session.update` event, unless there
31
+ # is an error.
32
+ sig do
33
+ params(
34
+ event_id: String,
35
+ session: OpenAI::Realtime::RealtimeSession::OrHash,
36
+ type: Symbol
37
+ ).returns(T.attached_class)
38
+ end
39
+ def self.new(
40
+ # The unique ID of the server event.
41
+ event_id:,
42
+ # Realtime session object.
43
+ session:,
44
+ # The event type, must be `session.updated`.
45
+ type: :"session.updated"
46
+ )
47
+ end
48
+
49
+ sig do
50
+ override.returns(
51
+ {
52
+ event_id: String,
53
+ session: OpenAI::Realtime::RealtimeSession,
54
+ type: Symbol
55
+ }
56
+ )
57
+ end
58
+ def to_hash
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end