openai 0.103.0 → 0.105.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +98 -0
- data/README.md +23 -1
- data/lib/openai/client.rb +3 -386
- data/lib/openai/helpers/admin/organization/projects/api_keys.rb +42 -0
- data/lib/openai/helpers/agents/session_stream_resource.rb +60 -0
- data/lib/openai/helpers/beta/agents/artifacts.rb +18 -0
- data/lib/openai/helpers/beta/agents/files.rb +41 -0
- data/lib/openai/helpers/client_runtime.rb +391 -0
- data/lib/openai/helpers/files.rb +47 -0
- data/lib/openai/helpers/live/websocket.rb +8 -57
- data/lib/openai/helpers/models/chat/parsed.rb +32 -0
- data/lib/openai/helpers/models/responses/parsed.rb +30 -0
- data/lib/openai/helpers/models/responses/response.rb +32 -0
- data/lib/openai/helpers/models/webhooks/webhook_endpoint_with_secret.rb +20 -0
- data/lib/openai/helpers/realtime/client_extension.rb +1 -2
- data/lib/openai/helpers/realtime/connection_manager.rb +1 -1
- data/lib/openai/helpers/realtime/translation.rb +7 -50
- data/lib/openai/helpers/responses_websocket/client_extension.rb +1 -2
- data/lib/openai/helpers/streaming/chat_completion_resource.rb +36 -0
- data/lib/openai/helpers/streaming/response_stream.rb +1 -16
- data/lib/openai/helpers/streaming/response_stream_resource.rb +78 -0
- data/lib/openai/helpers/vector_stores/file_batches.rb +188 -0
- data/lib/openai/helpers/vector_stores/files.rb +198 -0
- data/lib/openai/helpers/websocket/client_request.rb +31 -6
- data/lib/openai/helpers/websocket/connection.rb +58 -0
- data/lib/openai/helpers/websocket/connection_manager.rb +4 -2
- data/lib/openai/helpers/websocket/protocol.rb +2 -1
- data/lib/openai/helpers/websocket/resource.rb +54 -0
- data/lib/openai/helpers/websocket/typed_connection.rb +95 -0
- data/lib/openai/helpers/websocket.rb +4 -0
- data/lib/openai/models/admin/organization/audit_log_list_response.rb +5 -3
- data/lib/openai/models/admin/organization/external_storage_configuration.rb +5 -3
- data/lib/openai/models/admin/organization/external_storage_create_params.rb +33 -3
- data/lib/openai/models/admin/organization/oci_external_storage_provider.rb +37 -0
- data/lib/openai/models/admin/organization/project_residency.rb +3 -0
- data/lib/openai/models/admin/organization/projects/api_key_update_params.rb +64 -0
- data/lib/openai/models/admin/organization/projects/api_key_update_scopes_params.rb +34 -0
- data/lib/openai/models/admin/organization/usage_decisions_params.rb +177 -0
- data/lib/openai/models/admin/organization/usage_decisions_response.rb +351 -0
- data/lib/openai/models/audio/speech_create_params.rb +6 -3
- data/lib/openai/models/audio/translation_create_response.rb +0 -1
- data/lib/openai/models/audio/voice.rb +17 -2
- data/lib/openai/models/audio/voice_create_params.rb +100 -3
- data/lib/openai/models/beta/agent_create_params.rb +4 -2
- data/lib/openai/models/beta/agent_list_params.rb +4 -4
- data/lib/openai/models/beta/agent_session.rb +37 -1
- data/lib/openai/models/beta/agent_update_params.rb +4 -2
- data/lib/openai/models/beta/agents/environment_list_params.rb +7 -7
- data/lib/openai/models/beta/agents/session_create_params.rb +39 -3
- data/lib/openai/models/beta/agents/session_list_params.rb +7 -10
- data/lib/openai/models/beta/agents/session_update_params.rb +33 -1
- data/lib/openai/models/beta/agents/sessions/artifact_list_params.rb +11 -11
- data/lib/openai/models/beta/agents/vault_list_params.rb +23 -13
- data/lib/openai/models/beta/agents/vault_status_filter.rb +1 -3
- data/lib/openai/models/beta/agents/vault_update_params.rb +47 -0
- data/lib/openai/models/beta/agents/vaults/credential_list_params.rb +23 -13
- data/lib/openai/models/beta/beta_response.rb +23 -2
- data/lib/openai/models/beta/beta_response_error.rb +19 -1
- data/lib/openai/models/beta/beta_response_input_item.rb +107 -1
- data/lib/openai/models/beta/beta_response_item.rb +107 -1
- data/lib/openai/models/beta/beta_response_output_item.rb +107 -1
- data/lib/openai/models/beta/beta_responses_client_event.rb +23 -2
- data/lib/openai/models/beta/response_compact_params.rb +21 -0
- data/lib/openai/models/beta/response_create_params.rb +23 -2
- data/lib/openai/models/beta/session_turn_error.rb +3 -0
- data/lib/openai/models/chat/chat_completion_audio_param.rb +3 -3
- data/lib/openai/models/chat/chat_completion_message.rb +0 -8
- data/lib/openai/models/chat/chat_completion_message_function_tool_call.rb +0 -8
- data/lib/openai/models/chat/completion_create_params.rb +5 -12
- data/lib/openai/models/chat_model.rb +21 -0
- data/lib/openai/models/conversations/conversation_item.rb +107 -1
- data/lib/openai/models/decision.rb +17 -2
- data/lib/openai/models/decision_create_params.rb +29 -12
- data/lib/openai/models/decision_input_image.rb +4 -3
- data/lib/openai/models/decision_input_message.rb +4 -4
- data/lib/openai/models/decision_input_part.rb +3 -2
- data/lib/openai/models/image_edit_completed_event.rb +15 -3
- data/lib/openai/models/image_edit_params.rb +28 -5
- data/lib/openai/models/image_edit_partial_image_event.rb +1 -2
- data/lib/openai/models/image_gen_completed_event.rb +15 -3
- data/lib/openai/models/image_gen_partial_image_event.rb +1 -2
- data/lib/openai/models/image_generate_params.rb +28 -5
- data/lib/openai/models/images_response.rb +15 -3
- data/lib/openai/models/live/built_in_voice.rb +1 -0
- data/lib/openai/models/live/client_event.rb +14 -2
- data/lib/openai/models/live/decision_create_event.rb +26 -0
- data/lib/openai/models/live/decision_event.rb +117 -0
- data/lib/openai/models/live/decision_item_create_event.rb +194 -0
- data/lib/openai/models/live/decision_item_created_event.rb +202 -0
- data/lib/openai/models/live/decision_item_delete_event.rb +38 -0
- data/lib/openai/models/live/decision_item_deleted_event.rb +46 -0
- data/lib/openai/models/live/decision_trigger.rb +244 -0
- data/lib/openai/models/live/decisions_delegation_config.rb +201 -0
- data/lib/openai/models/live/decisions_delegation_update_config.rb +208 -0
- data/lib/openai/models/live/delegation_created_event.rb +10 -10
- data/lib/openai/models/live/fork_client_event.rb +14 -2
- data/lib/openai/models/live/fork_server_event.rb +17 -2
- data/lib/openai/models/live/media_session_config.rb +47 -11
- data/lib/openai/models/live/output_audio_fixture_play_event.rb +48 -0
- data/lib/openai/models/live/output_audio_fixture_played_event.rb +42 -0
- data/lib/openai/models/live/output_audio_fixture_playing_event.rb +41 -0
- data/lib/openai/models/live/server_event.rb +17 -2
- data/lib/openai/models/live/session_accept_params.rb +47 -11
- data/lib/openai/models/live/session_config.rb +47 -11
- data/lib/openai/models/live/session_resource.rb +47 -11
- data/lib/openai/models/live/session_update_config.rb +38 -6
- data/lib/openai/models/live/session_update_event.rb +8 -8
- data/lib/openai/models/live/sideband_client_event.rb +57 -0
- data/lib/openai/models/live/sideband_server_event.rb +78 -0
- data/lib/openai/models/realtime/realtime_audio_config_output.rb +6 -3
- data/lib/openai/models/realtime/realtime_response_create_audio_output.rb +6 -3
- data/lib/openai/models/realtime/realtime_response_status.rb +10 -1
- data/lib/openai/models/response_format_json_schema.rb +1 -1
- data/lib/openai/models/responses/function_tool.rb +8 -6
- data/lib/openai/models/responses/response.rb +2 -23
- data/lib/openai/models/responses/response_compact_params.rb +21 -0
- data/lib/openai/models/responses/response_create_params.rb +3 -6
- data/lib/openai/models/responses/response_error.rb +19 -1
- data/lib/openai/models/responses/response_format_text_config.rb +0 -4
- data/lib/openai/models/responses/response_function_tool_call.rb +0 -8
- data/lib/openai/models/responses/response_input_item.rb +107 -1
- data/lib/openai/models/responses/response_item.rb +107 -1
- data/lib/openai/models/responses/response_output_item.rb +107 -1
- data/lib/openai/models/responses/response_output_text.rb +0 -8
- data/lib/openai/models/responses/responses_client_event.rb +2 -2
- data/lib/openai/models/safety/safety_alert.rb +12 -1
- data/lib/openai/models/video_create_error.rb +19 -1
- data/lib/openai/models/webhooks/unwrap_webhook_event.rb +4 -4
- data/lib/openai/models/webhooks/webhook_endpoint_with_secret.rb +0 -9
- data/lib/openai/resources/admin/organization/external_storage.rb +1 -1
- data/lib/openai/resources/admin/organization/projects/api_keys.rb +61 -0
- data/lib/openai/resources/admin/organization/usage.rb +67 -0
- data/lib/openai/resources/audio/speech.rb +2 -1
- data/lib/openai/resources/audio/voices.rb +10 -10
- data/lib/openai/resources/beta/agents/environments/files.rb +3 -31
- data/lib/openai/resources/beta/agents/environments.rb +3 -3
- data/lib/openai/resources/beta/agents/sessions/artifacts.rb +5 -11
- data/lib/openai/resources/beta/agents/sessions.rb +20 -56
- data/lib/openai/resources/beta/agents/vaults/credentials.rb +10 -6
- data/lib/openai/resources/beta/agents/vaults.rb +45 -6
- data/lib/openai/resources/beta/agents.rb +6 -4
- data/lib/openai/resources/beta/responses.rb +2 -2
- data/lib/openai/resources/chat/completions.rb +11 -37
- data/lib/openai/resources/decisions.rb +9 -15
- data/lib/openai/resources/files.rb +0 -39
- data/lib/openai/resources/images.rb +50 -12
- data/lib/openai/resources/live/forks.rb +19 -0
- data/lib/openai/resources/live/sideband.rb +19 -0
- data/lib/openai/resources/live.rb +19 -0
- data/lib/openai/resources/realtime/translations.rb +19 -0
- data/lib/openai/resources/realtime.rb +19 -0
- data/lib/openai/resources/responses.rb +44 -95
- data/lib/openai/resources/vector_stores/file_batches.rb +0 -178
- data/lib/openai/resources/vector_stores/files.rb +0 -188
- data/lib/openai/resources/webhooks.rb +13 -29
- data/lib/openai/version.rb +1 -1
- data/lib/openai.rb +31 -0
- data/rbi/openai/client.rbi +0 -103
- data/rbi/openai/helpers/admin/organization/projects/api_keys.rbi +25 -0
- data/rbi/openai/helpers/beta/agents/artifacts.rbi +25 -0
- data/rbi/openai/helpers/beta/agents/files.rbi +48 -0
- data/rbi/openai/helpers/client_runtime.rbi +108 -0
- data/rbi/openai/helpers/files.rbi +25 -0
- data/rbi/openai/helpers/models/chat/parsed.rbi +21 -0
- data/rbi/openai/helpers/models/responses/parsed.rbi +19 -0
- data/rbi/openai/helpers/models/responses/response.rbi +15 -0
- data/rbi/openai/helpers/streaming/response_stream.rbi +301 -0
- data/rbi/openai/helpers/vector_stores/file_batches.rbi +102 -0
- data/rbi/openai/helpers/vector_stores/files.rbi +122 -0
- data/rbi/openai/helpers/websocket.rbi +82 -0
- data/rbi/openai/models/admin/organization/audit_log_list_response.rbi +6 -3
- data/rbi/openai/models/admin/organization/external_storage_configuration.rbi +4 -2
- data/rbi/openai/models/admin/organization/external_storage_create_params.rbi +63 -4
- data/rbi/openai/models/admin/organization/oci_external_storage_provider.rbi +71 -0
- data/rbi/openai/models/admin/organization/project_residency.rbi +12 -0
- data/rbi/openai/models/admin/organization/projects/api_key_update_params.rbi +110 -0
- data/rbi/openai/models/admin/organization/projects/api_key_update_scopes_params.rbi +72 -0
- data/rbi/openai/models/admin/organization/usage_decisions_params.rbi +229 -0
- data/rbi/openai/models/admin/organization/usage_decisions_response.rbi +479 -0
- data/rbi/openai/models/audio/speech_create_params.rbi +6 -3
- data/rbi/openai/models/audio/voice.rbi +21 -2
- data/rbi/openai/models/audio/voice_create_params.rbi +149 -4
- data/rbi/openai/models/beta/agent_create_params.rbi +4 -2
- data/rbi/openai/models/beta/agent_list_params.rbi +8 -5
- data/rbi/openai/models/beta/agent_session.rbi +64 -1
- data/rbi/openai/models/beta/agent_update_params.rbi +4 -2
- data/rbi/openai/models/beta/agents/environment_list_params.rbi +7 -7
- data/rbi/openai/models/beta/agents/session_create_params.rbi +62 -2
- data/rbi/openai/models/beta/agents/session_list_params.rbi +11 -11
- data/rbi/openai/models/beta/agents/session_update_params.rbi +56 -0
- data/rbi/openai/models/beta/agents/sessions/artifact_list_params.rbi +19 -13
- data/rbi/openai/models/beta/agents/vault_list_params.rbi +30 -13
- data/rbi/openai/models/beta/agents/vault_status_filter.rbi +1 -3
- data/rbi/openai/models/beta/agents/vault_update_params.rbi +87 -0
- data/rbi/openai/models/beta/agents/vaults/credential_list_params.rbi +30 -13
- data/rbi/openai/models/beta/beta_response.rbi +2 -2
- data/rbi/openai/models/beta/beta_response_error.rbi +24 -3
- data/rbi/openai/models/beta/beta_response_input_item.rbi +191 -0
- data/rbi/openai/models/beta/beta_response_item.rbi +189 -0
- data/rbi/openai/models/beta/beta_response_output_item.rbi +191 -0
- data/rbi/openai/models/beta/beta_responses_client_event.rbi +2 -2
- data/rbi/openai/models/beta/response_create_params.rbi +2 -2
- data/rbi/openai/models/beta/session_turn_error.rbi +3 -0
- data/rbi/openai/models/chat/chat_completion_audio_param.rbi +3 -3
- data/rbi/openai/models/chat/chat_completion_message.rbi +0 -4
- data/rbi/openai/models/chat/chat_completion_message_function_tool_call.rbi +0 -4
- data/rbi/openai/models/chat/completion_create_params.rbi +63 -78
- data/rbi/openai/models/conversations/conversation_item.rbi +191 -0
- data/rbi/openai/models/decision.rbi +14 -1
- data/rbi/openai/models/decision_create_params.rbi +23 -12
- data/rbi/openai/models/decision_input_image.rbi +4 -3
- data/rbi/openai/models/decision_input_message.rbi +4 -4
- data/rbi/openai/models/decision_input_part.rbi +2 -1
- data/rbi/openai/models/image_edit_completed_event.rbi +16 -1
- data/rbi/openai/models/image_edit_params.rbi +26 -4
- data/rbi/openai/models/image_edit_partial_image_event.rbi +1 -0
- data/rbi/openai/models/image_gen_completed_event.rbi +16 -1
- data/rbi/openai/models/image_gen_partial_image_event.rbi +1 -0
- data/rbi/openai/models/image_generate_params.rbi +26 -4
- data/rbi/openai/models/images_response.rbi +15 -0
- data/rbi/openai/models/live/built_in_voice.rbi +1 -0
- data/rbi/openai/models/live/client_event.rbi +4 -0
- data/rbi/openai/models/live/decision_create_event.rbi +55 -0
- data/rbi/openai/models/live/decision_event.rbi +185 -0
- data/rbi/openai/models/live/decision_item_create_event.rbi +338 -0
- data/rbi/openai/models/live/decision_item_created_event.rbi +354 -0
- data/rbi/openai/models/live/decision_item_delete_event.rbi +66 -0
- data/rbi/openai/models/live/decision_item_deleted_event.rbi +77 -0
- data/rbi/openai/models/live/decision_trigger.rbi +465 -0
- data/rbi/openai/models/live/decisions_delegation_config.rbi +393 -0
- data/rbi/openai/models/live/decisions_delegation_update_config.rbi +412 -0
- data/rbi/openai/models/live/delegation_created_event.rbi +8 -10
- data/rbi/openai/models/live/fork_client_event.rbi +4 -0
- data/rbi/openai/models/live/fork_server_event.rbi +5 -0
- data/rbi/openai/models/live/media_session_config.rbi +95 -14
- data/rbi/openai/models/live/output_audio_fixture_play_event.rbi +76 -0
- data/rbi/openai/models/live/output_audio_fixture_played_event.rbi +73 -0
- data/rbi/openai/models/live/output_audio_fixture_playing_event.rbi +72 -0
- data/rbi/openai/models/live/server_event.rbi +5 -0
- data/rbi/openai/models/live/session_accept_params.rbi +88 -12
- data/rbi/openai/models/live/session_config.rbi +100 -14
- data/rbi/openai/models/live/session_resource.rbi +81 -10
- data/rbi/openai/models/live/session_update_config.rbi +86 -9
- data/rbi/openai/models/live/session_update_event.rbi +8 -8
- data/rbi/openai/models/live/sideband_client_event.rbi +40 -0
- data/rbi/openai/models/live/sideband_server_event.rbi +47 -0
- data/rbi/openai/models/realtime/realtime_audio_config_output.rbi +6 -3
- data/rbi/openai/models/realtime/realtime_response_create_audio_output.rbi +6 -3
- data/rbi/openai/models/realtime/realtime_response_status.rbi +13 -1
- data/rbi/openai/models/realtime/realtime_translation_input_audio_buffer_append_event.rbi +1 -1
- data/rbi/openai/models/realtime/realtime_translation_output_audio_delta_event.rbi +3 -3
- data/rbi/openai/models/realtime/realtime_translation_session_close_event.rbi +1 -1
- data/rbi/openai/models/realtime/realtime_translation_session_update_event.rbi +5 -1
- data/rbi/openai/models/responses/response.rbi +2 -7
- data/rbi/openai/models/responses/response_create_params.rbi +5 -9
- data/rbi/openai/models/responses/response_error.rbi +24 -3
- data/rbi/openai/models/responses/response_function_tool_call.rbi +0 -4
- data/rbi/openai/models/responses/response_function_web_search.rbi +21 -17
- data/rbi/openai/models/responses/response_input_item.rbi +191 -0
- data/rbi/openai/models/responses/response_item.rbi +189 -0
- data/rbi/openai/models/responses/response_output_item.rbi +191 -0
- data/rbi/openai/models/responses/response_output_text.rbi +0 -4
- data/rbi/openai/models/responses/responses_client_event.rbi +2 -2
- data/rbi/openai/models/safety/safety_alert.rbi +13 -1
- data/rbi/openai/models/video_create_error.rbi +24 -3
- data/rbi/openai/models/webhooks/unwrap_webhook_event.rbi +1 -1
- data/rbi/openai/resources/admin/organization/external_storage.rbi +2 -1
- data/rbi/openai/resources/admin/organization/projects/api_keys.rbi +48 -0
- data/rbi/openai/resources/admin/organization/usage.rbi +56 -0
- data/rbi/openai/resources/audio/speech.rbi +2 -1
- data/rbi/openai/resources/audio/voices.rbi +13 -10
- data/rbi/openai/resources/beta/agents/environments/files.rbi +3 -33
- data/rbi/openai/resources/beta/agents/environments.rbi +3 -3
- data/rbi/openai/resources/beta/agents/sessions/artifacts.rbi +5 -13
- data/rbi/openai/resources/beta/agents/sessions.rbi +15 -4
- data/rbi/openai/resources/beta/agents/vaults/credentials.rbi +9 -5
- data/rbi/openai/resources/beta/agents/vaults.rbi +34 -5
- data/rbi/openai/resources/beta/agents.rbi +6 -4
- data/rbi/openai/resources/beta/responses.rbi +2 -2
- data/rbi/openai/resources/chat/completions.rbi +26 -29
- data/rbi/openai/resources/decisions.rbi +9 -15
- data/rbi/openai/resources/files.rbi +0 -18
- data/rbi/openai/resources/images.rbi +44 -8
- data/rbi/openai/resources/live/forks.rbi +17 -0
- data/rbi/openai/resources/live/sideband.rbi +17 -0
- data/rbi/openai/resources/live.rbi +17 -0
- data/rbi/openai/resources/realtime/translations.rbi +17 -0
- data/rbi/openai/resources/realtime.rbi +17 -0
- data/rbi/openai/resources/responses.rbi +41 -333
- data/rbi/openai/resources/vector_stores/file_batches.rbi +0 -93
- data/rbi/openai/resources/vector_stores/files.rbi +0 -113
- data/rbi/openai/resources/webhooks.rbi +1 -1
- data/sig/openai/client.rbs +0 -50
- data/sig/openai/helpers/admin/organization/projects/api_keys.rbs +18 -0
- data/sig/openai/helpers/beta/agents/artifacts.rbs +17 -0
- data/sig/openai/helpers/beta/agents/files.rbs +30 -0
- data/sig/openai/helpers/client_runtime.rbs +53 -0
- data/sig/openai/helpers/files.rbs +12 -0
- data/sig/openai/helpers/models/responses/response.rbs +9 -0
- data/sig/openai/helpers/streaming/response_stream.rbs +37 -0
- data/sig/openai/helpers/vector_stores/file_batches.rbs +38 -0
- data/sig/openai/helpers/vector_stores/files.rbs +43 -0
- data/sig/openai/helpers/websocket.rbs +40 -0
- data/sig/openai/models/admin/organization/audit_log_list_response.rbs +1 -0
- data/sig/openai/models/admin/organization/external_storage_configuration.rbs +1 -0
- data/sig/openai/models/admin/organization/external_storage_create_params.rbs +33 -0
- data/sig/openai/models/admin/organization/oci_external_storage_provider.rbs +34 -0
- data/sig/openai/models/admin/organization/project_residency.rbs +6 -0
- data/sig/openai/models/admin/organization/projects/api_key_update_params.rbs +77 -0
- data/sig/openai/models/admin/organization/projects/api_key_update_scopes_params.rbs +38 -0
- data/sig/openai/models/admin/organization/usage_decisions_params.rbs +170 -0
- data/sig/openai/models/admin/organization/usage_decisions_response.rbs +319 -0
- data/sig/openai/models/audio/speech_create_params.rbs +4 -2
- data/sig/openai/models/audio/voice.rbs +21 -3
- data/sig/openai/models/audio/voice_create_params.rbs +90 -1
- data/sig/openai/models/beta/agent_create_params.rbs +4 -2
- data/sig/openai/models/beta/agent_list_params.rbs +9 -6
- data/sig/openai/models/beta/agent_session.rbs +36 -2
- data/sig/openai/models/beta/agent_update_params.rbs +4 -2
- data/sig/openai/models/beta/agents/environment_list_params.rbs +9 -9
- data/sig/openai/models/beta/agents/session_create_params.rbs +29 -2
- data/sig/openai/models/beta/agents/session_list_params.rbs +12 -12
- data/sig/openai/models/beta/agents/session_update_params.rbs +23 -0
- data/sig/openai/models/beta/agents/sessions/artifact_list_params.rbs +21 -15
- data/sig/openai/models/beta/agents/vault_list_params.rbs +32 -14
- data/sig/openai/models/beta/agents/vault_update_params.rbs +54 -0
- data/sig/openai/models/beta/agents/vaults/credential_list_params.rbs +32 -14
- data/sig/openai/models/beta/beta_response.rbs +2 -2
- data/sig/openai/models/beta/beta_response_error.rbs +19 -3
- data/sig/openai/models/beta/beta_response_input_item.rbs +110 -0
- data/sig/openai/models/beta/beta_response_item.rbs +110 -0
- data/sig/openai/models/beta/beta_response_output_item.rbs +110 -0
- data/sig/openai/models/beta/beta_responses_client_event.rbs +2 -2
- data/sig/openai/models/beta/response_create_params.rbs +2 -2
- data/sig/openai/models/beta/session_turn_error.rbs +4 -0
- data/sig/openai/models/chat/chat_completion_audio_param.rbs +2 -2
- data/sig/openai/models/chat/completion_create_params.rbs +2 -2
- data/sig/openai/models/conversations/conversation_item.rbs +110 -0
- data/sig/openai/models/decision.rbs +13 -0
- data/sig/openai/models/decision_create_params.rbs +19 -8
- data/sig/openai/models/decision_input_image.rbs +2 -2
- data/sig/openai/models/decision_input_message.rbs +2 -2
- data/sig/openai/models/image_edit_completed_event.rbs +14 -2
- data/sig/openai/models/image_edit_params.rbs +27 -6
- data/sig/openai/models/image_gen_completed_event.rbs +14 -2
- data/sig/openai/models/image_generate_params.rbs +27 -6
- data/sig/openai/models/images_response.rbs +12 -0
- data/sig/openai/models/live/built_in_voice.rbs +2 -0
- data/sig/openai/models/live/client_event.rbs +4 -0
- data/sig/openai/models/live/decision_create_event.rbs +18 -0
- data/sig/openai/models/live/decision_event.rbs +102 -0
- data/sig/openai/models/live/decision_item_create_event.rbs +183 -0
- data/sig/openai/models/live/decision_item_created_event.rbs +195 -0
- data/sig/openai/models/live/decision_item_delete_event.rbs +33 -0
- data/sig/openai/models/live/decision_item_deleted_event.rbs +49 -0
- data/sig/openai/models/live/decision_trigger.rbs +234 -0
- data/sig/openai/models/live/decisions_delegation_config.rbs +195 -0
- data/sig/openai/models/live/decisions_delegation_update_config.rbs +202 -0
- data/sig/openai/models/live/delegation_created_event.rbs +6 -7
- data/sig/openai/models/live/fork_client_event.rbs +4 -0
- data/sig/openai/models/live/fork_server_event.rbs +5 -0
- data/sig/openai/models/live/media_session_config.rbs +58 -11
- data/sig/openai/models/live/output_audio_fixture_play_event.rbs +42 -0
- data/sig/openai/models/live/output_audio_fixture_played_event.rbs +44 -0
- data/sig/openai/models/live/output_audio_fixture_playing_event.rbs +44 -0
- data/sig/openai/models/live/server_event.rbs +5 -0
- data/sig/openai/models/live/session_accept_params.rbs +57 -10
- data/sig/openai/models/live/session_config.rbs +58 -11
- data/sig/openai/models/live/session_resource.rbs +57 -10
- data/sig/openai/models/live/session_update_config.rbs +54 -3
- data/sig/openai/models/live/session_update_event.rbs +6 -6
- data/sig/openai/models/live/sideband_client_event.rbs +26 -0
- data/sig/openai/models/live/sideband_server_event.rbs +33 -0
- data/sig/openai/models/realtime/realtime_audio_config_output.rbs +6 -3
- data/sig/openai/models/realtime/realtime_response_create_audio_output.rbs +6 -3
- data/sig/openai/models/realtime/realtime_response_status.rbs +15 -3
- data/sig/openai/models/responses/response.rbs +2 -4
- data/sig/openai/models/responses/response_create_params.rbs +2 -2
- data/sig/openai/models/responses/response_error.rbs +19 -3
- data/sig/openai/models/responses/response_input_item.rbs +110 -0
- data/sig/openai/models/responses/response_item.rbs +110 -0
- data/sig/openai/models/responses/response_output_item.rbs +110 -0
- data/sig/openai/models/responses/responses_client_event.rbs +2 -2
- data/sig/openai/models/safety/safety_alert.rbs +12 -2
- data/sig/openai/models/video_create_error.rbs +19 -3
- data/sig/openai/models/webhooks/unwrap_webhook_event.rbs +1 -1
- data/sig/openai/resources/admin/organization/projects/api_keys.rbs +8 -0
- data/sig/openai/resources/admin/organization/usage.rbs +15 -0
- data/sig/openai/resources/beta/agents/environments/files.rbs +0 -17
- data/sig/openai/resources/beta/agents/sessions/artifacts.rbs +2 -6
- data/sig/openai/resources/beta/agents/sessions.rbs +4 -1
- data/sig/openai/resources/beta/agents/vaults/credentials.rbs +2 -1
- data/sig/openai/resources/beta/agents/vaults.rbs +9 -1
- data/sig/openai/resources/beta/agents.rbs +1 -1
- data/sig/openai/resources/files.rbs +0 -7
- data/sig/openai/resources/images.rbs +4 -0
- data/sig/openai/resources/live/forks.rbs +8 -0
- data/sig/openai/resources/live/sideband.rbs +8 -0
- data/sig/openai/resources/live.rbs +7 -0
- data/sig/openai/resources/realtime/translations.rbs +7 -0
- data/sig/openai/resources/realtime.rbs +7 -0
- data/sig/openai/resources/responses.rbs +7 -31
- data/sig/openai/resources/vector_stores/file_batches.rbs +0 -31
- data/sig/openai/resources/vector_stores/files.rbs +0 -36
- data/sig/openai/resources/webhooks.rbs +1 -1
- metadata +89 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../../../models/chat/chat_completion_message"
|
|
4
|
+
require_relative "../../../models/chat/chat_completion_message_function_tool_call"
|
|
5
|
+
|
|
6
|
+
module OpenAI
|
|
7
|
+
module Models
|
|
8
|
+
module Chat
|
|
9
|
+
class ChatCompletionMessage
|
|
10
|
+
response_only do
|
|
11
|
+
# @!attribute parsed
|
|
12
|
+
# The parsed contents of the message, if JSON schema is specified.
|
|
13
|
+
#
|
|
14
|
+
# @return [Object, nil]
|
|
15
|
+
optional :parsed, OpenAI::StructuredOutput::ParsedJson
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class ChatCompletionMessageFunctionToolCall
|
|
20
|
+
class Function
|
|
21
|
+
response_only do
|
|
22
|
+
# @!attribute parsed
|
|
23
|
+
# The parsed contents of the arguments.
|
|
24
|
+
#
|
|
25
|
+
# @return [Object, nil]
|
|
26
|
+
required :parsed, OpenAI::StructuredOutput::ParsedJson
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../../../models/responses/response_output_text"
|
|
4
|
+
require_relative "../../../models/responses/response_function_tool_call"
|
|
5
|
+
|
|
6
|
+
module OpenAI
|
|
7
|
+
module Models
|
|
8
|
+
module Responses
|
|
9
|
+
class ResponseOutputText
|
|
10
|
+
response_only do
|
|
11
|
+
# @!attribute parsed
|
|
12
|
+
# The parsed contents of the output, if JSON schema is specified.
|
|
13
|
+
#
|
|
14
|
+
# @return [Object, nil]
|
|
15
|
+
optional :parsed, OpenAI::StructuredOutput::ParsedJson
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class ResponseFunctionToolCall
|
|
20
|
+
response_only do
|
|
21
|
+
# @!attribute parsed
|
|
22
|
+
# The parsed contents of the arguments.
|
|
23
|
+
#
|
|
24
|
+
# @return [Object, nil]
|
|
25
|
+
required :parsed, OpenAI::StructuredOutput::ParsedJson
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../../../models/responses/response"
|
|
4
|
+
|
|
5
|
+
module OpenAI
|
|
6
|
+
module Models
|
|
7
|
+
module Responses
|
|
8
|
+
class Response
|
|
9
|
+
# Convenience property that aggregates all `output_text` items from the `output` list.
|
|
10
|
+
#
|
|
11
|
+
# If no `output_text` content blocks exist, then an empty string is returned.
|
|
12
|
+
#
|
|
13
|
+
# @return [String]
|
|
14
|
+
def output_text
|
|
15
|
+
texts = []
|
|
16
|
+
|
|
17
|
+
output.each do |item|
|
|
18
|
+
next unless item.is_a?(OpenAI::Models::Responses::ResponseOutputMessage)
|
|
19
|
+
|
|
20
|
+
item.content.each do |content|
|
|
21
|
+
next unless content.is_a?(OpenAI::Models::Responses::ResponseOutputText)
|
|
22
|
+
|
|
23
|
+
texts << content.text
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
texts.join
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../../../models/webhooks/webhook_endpoint_with_secret"
|
|
4
|
+
|
|
5
|
+
module OpenAI
|
|
6
|
+
module Models
|
|
7
|
+
module Webhooks
|
|
8
|
+
class WebhookEndpointWithSecret
|
|
9
|
+
# Keep diagnostics safe without changing field access or serialization.
|
|
10
|
+
def to_s = deep_to_h.merge(signing_secret: "[REDACTED]").to_s
|
|
11
|
+
|
|
12
|
+
def inspect
|
|
13
|
+
converted = self.class.recursively_to_h(self, convert: true)
|
|
14
|
+
converted[:signing_secret] = "[REDACTED]"
|
|
15
|
+
"#<#{self.class}:0x#{object_id.to_s(16)} #{converted}>"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -166,8 +166,7 @@ module OpenAI
|
|
|
166
166
|
deadline: nil
|
|
167
167
|
)
|
|
168
168
|
build_shared_websocket_connection_request(
|
|
169
|
-
path: path,
|
|
170
|
-
query: query,
|
|
169
|
+
request: realtime.__websocket_request(query: query).merge(path: path),
|
|
171
170
|
websocket_base_url: websocket_base_url,
|
|
172
171
|
options: options,
|
|
173
172
|
deadline: deadline,
|
|
@@ -25,7 +25,7 @@ module OpenAI
|
|
|
25
25
|
base_url = websocket_base_url&.to_s&.dup&.freeze
|
|
26
26
|
request = lambda do |&request_block|
|
|
27
27
|
client.with_realtime_connection_request(
|
|
28
|
-
path:
|
|
28
|
+
path: client.realtime.__websocket_request.fetch(:path),
|
|
29
29
|
query: query,
|
|
30
30
|
websocket_base_url: base_url,
|
|
31
31
|
options: request_options,
|
|
@@ -53,6 +53,7 @@ module OpenAI
|
|
|
53
53
|
# read through session.closed before leaving the block to consume it.
|
|
54
54
|
class TranslationConnection < OpenAI::WebSocket::Connection
|
|
55
55
|
include OpenAI::WebSocket::Protocol
|
|
56
|
+
include OpenAI::WebSocket::GuardedConnection
|
|
56
57
|
|
|
57
58
|
# Timeout implementations before Ruby 4 raise StandardError through the
|
|
58
59
|
# scheduler. Cross transport error wrappers without changing raw callers.
|
|
@@ -135,27 +136,6 @@ module OpenAI
|
|
|
135
136
|
end
|
|
136
137
|
end
|
|
137
138
|
|
|
138
|
-
def closed? = @poisoned || @closed || super
|
|
139
|
-
|
|
140
|
-
def close(code: 1000, reason: "")
|
|
141
|
-
@poisoned || @closed ? abort : super
|
|
142
|
-
@closed = true
|
|
143
|
-
nil
|
|
144
|
-
rescue StandardError
|
|
145
|
-
@poisoned = true
|
|
146
|
-
raise OpenAI::Errors::TranslationConnectionError.new(url: @url), cause: nil
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
# @api private
|
|
150
|
-
def abort
|
|
151
|
-
super
|
|
152
|
-
@closed = true
|
|
153
|
-
nil
|
|
154
|
-
rescue StandardError
|
|
155
|
-
@poisoned = true
|
|
156
|
-
raise OpenAI::Errors::TranslationConnectionError.new(url: @url), cause: nil
|
|
157
|
-
end
|
|
158
|
-
|
|
159
139
|
private def write_text(text, finish: false)
|
|
160
140
|
@write_mutex.synchronize do
|
|
161
141
|
if @finish_requested || (@finish_owner && !finish)
|
|
@@ -164,18 +144,7 @@ module OpenAI
|
|
|
164
144
|
|
|
165
145
|
raise connection_error("Cannot send on a closed Realtime Translation WebSocket.") if closed?
|
|
166
146
|
@finish_requested = true if finish
|
|
167
|
-
|
|
168
|
-
begin
|
|
169
|
-
super(text)
|
|
170
|
-
complete = true
|
|
171
|
-
nil
|
|
172
|
-
rescue StandardError
|
|
173
|
-
raise OpenAI::Errors::TranslationConnectionError.new(url: @url), cause: nil
|
|
174
|
-
ensure
|
|
175
|
-
# Ruby's Timeout and task cancellation may bypass StandardError.
|
|
176
|
-
# Do not let ordinary cleanup flush an uncertain buffered write.
|
|
177
|
-
@poisoned = true unless complete
|
|
178
|
-
end
|
|
147
|
+
super(text)
|
|
179
148
|
end
|
|
180
149
|
end
|
|
181
150
|
|
|
@@ -189,26 +158,12 @@ module OpenAI
|
|
|
189
158
|
end
|
|
190
159
|
|
|
191
160
|
begin
|
|
192
|
-
|
|
193
|
-
return nil if @closed
|
|
194
|
-
text = super
|
|
195
|
-
@closed = text.nil?
|
|
196
|
-
text
|
|
197
|
-
rescue StandardError
|
|
198
|
-
@poisoned = true
|
|
199
|
-
raise OpenAI::Errors::TranslationConnectionError.new(url: @url), cause: nil
|
|
161
|
+
super
|
|
200
162
|
ensure
|
|
201
163
|
@read_state_mutex.synchronize { @active_reads -= 1 }
|
|
202
164
|
end
|
|
203
165
|
end
|
|
204
166
|
|
|
205
|
-
private def socket_closed?
|
|
206
|
-
super
|
|
207
|
-
rescue StandardError
|
|
208
|
-
@poisoned = true
|
|
209
|
-
raise OpenAI::Errors::TranslationConnectionError.new(url: @url), cause: nil
|
|
210
|
-
end
|
|
211
|
-
|
|
212
167
|
private def encode_client_event(event)
|
|
213
168
|
validate_client_tree!(event)
|
|
214
169
|
union = OpenAI::Realtime::RealtimeTranslationClientEvent
|
|
@@ -337,6 +292,9 @@ module OpenAI
|
|
|
337
292
|
event
|
|
338
293
|
end
|
|
339
294
|
|
|
295
|
+
private def transport_error = OpenAI::Errors::TranslationConnectionError.new(url: @url)
|
|
296
|
+
private def failed_read_message = "Cannot read from a failed Realtime Translation WebSocket."
|
|
297
|
+
|
|
340
298
|
private def connection_error(message)
|
|
341
299
|
OpenAI::Errors::TranslationConnectionError.new(url: @url, message: message)
|
|
342
300
|
end
|
|
@@ -352,8 +310,7 @@ module OpenAI
|
|
|
352
310
|
query = {"model" => model.to_s.dup.freeze}.freeze
|
|
353
311
|
build = lambda do |deadline|
|
|
354
312
|
build_shared_websocket_connection_request(
|
|
355
|
-
|
|
356
|
-
query: query,
|
|
313
|
+
request: realtime.translations.__websocket_request(query: query),
|
|
357
314
|
websocket_base_url: websocket_base_url,
|
|
358
315
|
options: options,
|
|
359
316
|
deadline: deadline,
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenAI
|
|
4
|
+
module Resources
|
|
5
|
+
class Chat
|
|
6
|
+
class Completions
|
|
7
|
+
def stream(params)
|
|
8
|
+
parsed, options = OpenAI::Chat::CompletionCreateParams.dump_request(params)
|
|
9
|
+
|
|
10
|
+
parsed.store(:stream, true)
|
|
11
|
+
|
|
12
|
+
response_format, tool_models = get_structured_output_models(parsed)
|
|
13
|
+
|
|
14
|
+
input_tools = build_tools_with_models(parsed[:tools], tool_models)
|
|
15
|
+
|
|
16
|
+
raw_stream = @client.request(
|
|
17
|
+
method: :post,
|
|
18
|
+
path: "chat/completions",
|
|
19
|
+
headers: {"accept" => "text/event-stream"},
|
|
20
|
+
body: parsed,
|
|
21
|
+
stream: OpenAI::Internal::Stream,
|
|
22
|
+
model: OpenAI::Chat::ChatCompletionChunk,
|
|
23
|
+
security: {bearer_auth: true},
|
|
24
|
+
options: options
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
OpenAI::Helpers::Streaming::ChatCompletionStream.new(
|
|
28
|
+
raw_stream: raw_stream,
|
|
29
|
+
response_format: response_format,
|
|
30
|
+
input_tools: input_tools
|
|
31
|
+
)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -49,22 +49,7 @@ module OpenAI
|
|
|
49
49
|
response
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
def get_output_text
|
|
53
|
-
response = get_final_response
|
|
54
|
-
text_parts = []
|
|
55
|
-
|
|
56
|
-
response.output.each do |output|
|
|
57
|
-
next unless output.is_a?(OpenAI::Models::Responses::ResponseOutputMessage)
|
|
58
|
-
|
|
59
|
-
output.content.each do |content|
|
|
60
|
-
next unless content.is_a?(OpenAI::Models::Responses::ResponseOutputText)
|
|
61
|
-
|
|
62
|
-
text_parts << content.text
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
text_parts.join
|
|
67
|
-
end
|
|
52
|
+
def get_output_text = get_final_response.output_text
|
|
68
53
|
|
|
69
54
|
private
|
|
70
55
|
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenAI
|
|
4
|
+
module Resources
|
|
5
|
+
class Responses
|
|
6
|
+
# Creates or resumes a streaming response and parses structured outputs.
|
|
7
|
+
# @overload stream(access_programs: nil, **params)
|
|
8
|
+
# @param access_programs [OpenAI::Models::Responses::ResponseCreateParams::AccessPrograms]
|
|
9
|
+
# Domain-specific access programs to use for this request.
|
|
10
|
+
# @param params [Hash{Symbol=>Object}] Other response creation or retrieval parameters.
|
|
11
|
+
def stream(params)
|
|
12
|
+
parsed, options = OpenAI::Responses::ResponseCreateParams.dump_request(params)
|
|
13
|
+
starting_after, response_id = parsed.values_at(:starting_after, :response_id)
|
|
14
|
+
|
|
15
|
+
if starting_after && !response_id
|
|
16
|
+
raise ArgumentError, "starting_after can only be used with response_id"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
model, tool_models = get_structured_output_models(parsed)
|
|
20
|
+
|
|
21
|
+
unwrap = -> (raw) do
|
|
22
|
+
if raw[:type] == "response.completed" && raw[:response]
|
|
23
|
+
parse_structured_outputs!(raw[:response], model, tool_models)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
raw
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
if response_id
|
|
30
|
+
retrieve_params = parsed.slice(:include, :starting_after)
|
|
31
|
+
retrieve_params[:request_options] = options
|
|
32
|
+
|
|
33
|
+
raw_stream = retrieve_streaming_internal(
|
|
34
|
+
response_id,
|
|
35
|
+
params: retrieve_params,
|
|
36
|
+
unwrap: unwrap
|
|
37
|
+
)
|
|
38
|
+
else
|
|
39
|
+
parsed[:stream] = true
|
|
40
|
+
|
|
41
|
+
raw_stream = @client.request(
|
|
42
|
+
method: :post,
|
|
43
|
+
path: "responses",
|
|
44
|
+
headers: {"accept" => "text/event-stream"},
|
|
45
|
+
body: parsed,
|
|
46
|
+
stream: OpenAI::Internal::Stream,
|
|
47
|
+
model: OpenAI::Models::Responses::ResponseStreamEvent,
|
|
48
|
+
unwrap: unwrap,
|
|
49
|
+
security: {bearer_auth: true},
|
|
50
|
+
options: options
|
|
51
|
+
)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
OpenAI::Streaming::ResponseStream.new(
|
|
55
|
+
raw_stream: raw_stream,
|
|
56
|
+
text_format: model,
|
|
57
|
+
starting_after: starting_after
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
private def retrieve_streaming_internal(response_id, params:, unwrap:)
|
|
62
|
+
parsed, options = OpenAI::Responses::ResponseRetrieveParams.dump_request(params)
|
|
63
|
+
parsed.store(:stream, true)
|
|
64
|
+
@client.request(
|
|
65
|
+
method: :get,
|
|
66
|
+
path: ["responses/%1$s", response_id],
|
|
67
|
+
query: parsed,
|
|
68
|
+
headers: {"accept" => "text/event-stream"},
|
|
69
|
+
stream: OpenAI::Internal::Stream,
|
|
70
|
+
model: OpenAI::Responses::ResponseStreamEvent,
|
|
71
|
+
security: {bearer_auth: true},
|
|
72
|
+
options: options,
|
|
73
|
+
unwrap: unwrap
|
|
74
|
+
)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../../resources/vector_stores/file_batches"
|
|
4
|
+
require_relative "../resource_polling"
|
|
5
|
+
|
|
6
|
+
module OpenAI
|
|
7
|
+
module Resources
|
|
8
|
+
class VectorStores
|
|
9
|
+
class FileBatches
|
|
10
|
+
# Create a vector store file batch and wait for processing to finish.
|
|
11
|
+
#
|
|
12
|
+
# The returned batch may have a `failed` or `cancelled` status; callers should
|
|
13
|
+
# inspect its status and file counts. Polling intervals and the overall timeout
|
|
14
|
+
# are in seconds. Finite timeouts include authentication and request replay
|
|
15
|
+
# time and disable transport retries so the deadline remains strict. Set
|
|
16
|
+
# `timeout` to `nil` to wait indefinitely and retain configured transport retries.
|
|
17
|
+
#
|
|
18
|
+
# @overload create_and_poll(vector_store_id, attributes: nil, chunking_strategy: nil, file_ids: nil, files: nil, poll_interval: nil, timeout: 1800.0, request_options: {})
|
|
19
|
+
#
|
|
20
|
+
# @param vector_store_id [String] The ID of the vector store for which to create a File Batch.
|
|
21
|
+
#
|
|
22
|
+
# @param attributes [Hash{Symbol=>String, Float, Boolean}, nil] Attributes to apply to each file in `file_ids`.
|
|
23
|
+
#
|
|
24
|
+
# @param chunking_strategy [OpenAI::Models::AutoFileChunkingStrategyParam, OpenAI::Models::StaticFileChunkingStrategyObjectParam] The chunking strategy used to chunk the files.
|
|
25
|
+
#
|
|
26
|
+
# @param file_ids [Array<String>] File IDs to add to the vector store.
|
|
27
|
+
#
|
|
28
|
+
# @param files [Array<OpenAI::Models::VectorStores::FileBatchCreateParams::File>] File IDs with per-file attributes or chunking strategies.
|
|
29
|
+
#
|
|
30
|
+
# @param poll_interval [Integer, Float, nil] How often to retrieve the batch. When omitted, the SDK honors the server's
|
|
31
|
+
# polling hint and otherwise waits 5 seconds.
|
|
32
|
+
#
|
|
33
|
+
# @param timeout [Integer, Float, nil] Maximum total time to poll. Defaults to 30 minutes. Set to `nil` to wait
|
|
34
|
+
# indefinitely.
|
|
35
|
+
#
|
|
36
|
+
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
37
|
+
#
|
|
38
|
+
# @raise [ArgumentError, OpenAI::Errors::PollingError]
|
|
39
|
+
# @return [OpenAI::Models::VectorStores::VectorStoreFileBatch]
|
|
40
|
+
def create_and_poll(
|
|
41
|
+
vector_store_id,
|
|
42
|
+
attributes: nil,
|
|
43
|
+
chunking_strategy: nil,
|
|
44
|
+
file_ids: nil,
|
|
45
|
+
files: nil,
|
|
46
|
+
poll_interval: nil,
|
|
47
|
+
timeout: OpenAI::Internal::Poller::DEFAULT_TIMEOUT,
|
|
48
|
+
request_options: {}
|
|
49
|
+
)
|
|
50
|
+
OpenAI::Internal::Poller.validate!(poll_interval: poll_interval, timeout: timeout)
|
|
51
|
+
|
|
52
|
+
params = {request_options: request_options}
|
|
53
|
+
params[:attributes] = attributes unless attributes.nil?
|
|
54
|
+
params[:chunking_strategy] = chunking_strategy unless chunking_strategy.nil?
|
|
55
|
+
params[:file_ids] = file_ids unless file_ids.nil?
|
|
56
|
+
params[:files] = files unless files.nil?
|
|
57
|
+
batch = create(vector_store_id, params)
|
|
58
|
+
poll(
|
|
59
|
+
batch.id,
|
|
60
|
+
vector_store_id: vector_store_id,
|
|
61
|
+
poll_interval: poll_interval,
|
|
62
|
+
timeout: timeout,
|
|
63
|
+
request_options: request_options
|
|
64
|
+
)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Wait for a vector store file batch to finish processing.
|
|
68
|
+
#
|
|
69
|
+
# The returned batch may have a `failed` or `cancelled` status; callers should
|
|
70
|
+
# inspect its status and file counts. Polling intervals and the overall timeout
|
|
71
|
+
# are in seconds. Set `timeout` to `nil` to wait indefinitely.
|
|
72
|
+
#
|
|
73
|
+
# @overload poll(batch_id, vector_store_id:, poll_interval: nil, timeout: 1800.0, request_options: {})
|
|
74
|
+
#
|
|
75
|
+
# @param batch_id [String] The ID of the file batch being retrieved.
|
|
76
|
+
#
|
|
77
|
+
# @param vector_store_id [String] The ID of the vector store that the file batch belongs to.
|
|
78
|
+
#
|
|
79
|
+
# @param poll_interval [Integer, Float, nil] How often to retrieve the batch. When omitted, the SDK honors the server's
|
|
80
|
+
# polling hint and otherwise waits 5 seconds.
|
|
81
|
+
#
|
|
82
|
+
# @param timeout [Integer, Float, nil] Maximum total time to poll. Defaults to 30 minutes. Set to `nil` to wait
|
|
83
|
+
# indefinitely.
|
|
84
|
+
#
|
|
85
|
+
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
86
|
+
#
|
|
87
|
+
# @raise [ArgumentError, OpenAI::Errors::PollingError]
|
|
88
|
+
# @return [OpenAI::Models::VectorStores::VectorStoreFileBatch]
|
|
89
|
+
def poll(
|
|
90
|
+
batch_id,
|
|
91
|
+
vector_store_id:,
|
|
92
|
+
poll_interval: nil,
|
|
93
|
+
timeout: OpenAI::Internal::Poller::DEFAULT_TIMEOUT,
|
|
94
|
+
request_options: {}
|
|
95
|
+
)
|
|
96
|
+
OpenAI::Helpers::ResourcePolling.poll_vector_store_file_batch(
|
|
97
|
+
self,
|
|
98
|
+
batch_id,
|
|
99
|
+
vector_store_id: vector_store_id,
|
|
100
|
+
poll_interval: poll_interval,
|
|
101
|
+
timeout: timeout,
|
|
102
|
+
request_options: request_options
|
|
103
|
+
)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Upload files concurrently, create a vector store file batch, and wait for
|
|
107
|
+
# processing to finish.
|
|
108
|
+
#
|
|
109
|
+
# Existing file IDs can be included alongside new uploads. Upload concurrency is
|
|
110
|
+
# bounded and defaults to 5. Set `max_concurrency` to 1 for sequential uploads.
|
|
111
|
+
# Inputs are enumerated before requests begin so the 2,000-file API limit can be
|
|
112
|
+
# checked without orphaning uploads. Stream-backed inputs are safely spooled during
|
|
113
|
+
# enumeration, including IO objects yielded from block-scoped enumerators.
|
|
114
|
+
#
|
|
115
|
+
# @overload upload_and_poll(vector_store_id, files:, file_ids: [], max_concurrency: 5, attributes: nil, chunking_strategy: nil, poll_interval: nil, timeout: 1800.0, request_options: {})
|
|
116
|
+
#
|
|
117
|
+
# @param vector_store_id [String] The ID of the vector store for which to create a File Batch.
|
|
118
|
+
#
|
|
119
|
+
# @param files [Enumerable<Pathname, StringIO, IO, String, OpenAI::FilePart>] Files to upload.
|
|
120
|
+
#
|
|
121
|
+
# @param file_ids [Array<String>] IDs of files that have already been uploaded.
|
|
122
|
+
#
|
|
123
|
+
# @param max_concurrency [Integer] Maximum number of simultaneous file uploads.
|
|
124
|
+
#
|
|
125
|
+
# @param attributes [Hash{Symbol=>String, Float, Boolean}, nil] Attributes to apply to every file.
|
|
126
|
+
#
|
|
127
|
+
# @param chunking_strategy [OpenAI::Models::AutoFileChunkingStrategyParam, OpenAI::Models::StaticFileChunkingStrategyObjectParam] The chunking strategy used to chunk the files.
|
|
128
|
+
#
|
|
129
|
+
# @param poll_interval [Integer, Float, nil] How often to retrieve the batch. When omitted, the SDK honors the server's
|
|
130
|
+
# polling hint and otherwise waits 5 seconds.
|
|
131
|
+
#
|
|
132
|
+
# @param timeout [Integer, Float, nil] Maximum total time to poll. Defaults to 30 minutes. Set to `nil` to wait
|
|
133
|
+
# indefinitely.
|
|
134
|
+
#
|
|
135
|
+
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil] Applied to every upload and to the
|
|
136
|
+
# batch creation and polling requests. Idempotency keys are scoped to each
|
|
137
|
+
# upload and the batch creation.
|
|
138
|
+
#
|
|
139
|
+
# @raise [ArgumentError, OpenAI::Errors::PollingError]
|
|
140
|
+
# @return [OpenAI::Models::VectorStores::VectorStoreFileBatch]
|
|
141
|
+
def upload_and_poll(
|
|
142
|
+
vector_store_id,
|
|
143
|
+
files:,
|
|
144
|
+
file_ids: [],
|
|
145
|
+
max_concurrency: 5,
|
|
146
|
+
attributes: nil,
|
|
147
|
+
chunking_strategy: nil,
|
|
148
|
+
poll_interval: nil,
|
|
149
|
+
timeout: OpenAI::Internal::Poller::DEFAULT_TIMEOUT,
|
|
150
|
+
request_options: {}
|
|
151
|
+
)
|
|
152
|
+
OpenAI::Internal::Poller.validate!(poll_interval: poll_interval, timeout: timeout)
|
|
153
|
+
request_options_scope = OpenAI::Internal::RequestOptionsScope.new(request_options)
|
|
154
|
+
|
|
155
|
+
max_files = OpenAI::Internal::VectorStoreFileUploader::MAX_FILES_PER_BATCH
|
|
156
|
+
if file_ids.length > max_files
|
|
157
|
+
raise ArgumentError, "`file_ids` cannot contain more than #{max_files} entries"
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
uploaded = OpenAI::Internal::VectorStoreFileUploader
|
|
161
|
+
.new(
|
|
162
|
+
client: @client,
|
|
163
|
+
max_concurrency: max_concurrency,
|
|
164
|
+
request_options: request_options
|
|
165
|
+
)
|
|
166
|
+
.upload(files, max_files: max_files - file_ids.length)
|
|
167
|
+
|
|
168
|
+
if uploaded.empty?
|
|
169
|
+
raise(
|
|
170
|
+
ArgumentError,
|
|
171
|
+
"No `files` provided. Use `create_and_poll` when all files are already uploaded."
|
|
172
|
+
)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
create_and_poll(
|
|
176
|
+
vector_store_id,
|
|
177
|
+
file_ids: [*file_ids, *uploaded.map(&:id)],
|
|
178
|
+
attributes: attributes,
|
|
179
|
+
chunking_strategy: chunking_strategy,
|
|
180
|
+
poll_interval: poll_interval,
|
|
181
|
+
timeout: timeout,
|
|
182
|
+
request_options: request_options_scope.child("file-batch")
|
|
183
|
+
)
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|