lib/openai.rb (441 lines of code) (raw):

# frozen_string_literal: true # Standard libraries. require "English" require "cgi" require "date" require "erb" require "etc" require "json" require "net/http" require "pathname" require "rbconfig" require "securerandom" require "set" require "stringio" require "time" require "uri" # We already ship the preferred sorbet manifests in the package itself. # `tapioca` currently does not offer us a way to opt out of unnecessary compilation. if Object.const_defined?(:Tapioca) && caller.chain([$PROGRAM_NAME]).chain(ARGV).grep(/tapioca/) return end # Gems. require "connection_pool" # Package files. require_relative "openai/version" require_relative "openai/internal/util" require_relative "openai/internal/type/converter" require_relative "openai/internal/type/unknown" require_relative "openai/internal/type/boolean" require_relative "openai/internal/type/io_like" require_relative "openai/internal/type/enum" require_relative "openai/internal/type/union" require_relative "openai/internal/type/array_of" require_relative "openai/internal/type/hash_of" require_relative "openai/internal/type/base_model" require_relative "openai/internal/type/base_page" require_relative "openai/internal/type/base_stream" require_relative "openai/internal/type/request_parameters" require_relative "openai/internal" require_relative "openai/request_options" require_relative "openai/errors" require_relative "openai/internal/transport/base_client" require_relative "openai/internal/transport/pooled_net_requester" require_relative "openai/client" require_relative "openai/internal/stream" require_relative "openai/internal/cursor_page" require_relative "openai/internal/page" require_relative "openai/models/reasoning_effort" require_relative "openai/models/chat/chat_completion_message" require_relative "openai/models/fine_tuning/fine_tuning_job_wandb_integration_object" require_relative "openai/models/responses/response_function_tool_call" require_relative "openai/models/all_models" require_relative "openai/models/audio/speech_create_params" require_relative "openai/models/audio/speech_model" require_relative "openai/models/audio/transcription" require_relative "openai/models/audio/transcription_create_params" require_relative "openai/models/audio/transcription_create_response" require_relative "openai/models/audio/transcription_include" require_relative "openai/models/audio/transcription_segment" require_relative "openai/models/audio/transcription_stream_event" require_relative "openai/models/audio/transcription_text_delta_event" require_relative "openai/models/audio/transcription_text_done_event" require_relative "openai/models/audio/transcription_verbose" require_relative "openai/models/audio/transcription_word" require_relative "openai/models/audio/translation" require_relative "openai/models/audio/translation_create_params" require_relative "openai/models/audio/translation_create_response" require_relative "openai/models/audio/translation_verbose" require_relative "openai/models/audio_model" require_relative "openai/models/audio_response_format" require_relative "openai/models/auto_file_chunking_strategy_param" require_relative "openai/models/batch" require_relative "openai/models/batch_cancel_params" require_relative "openai/models/batch_create_params" require_relative "openai/models/batch_error" require_relative "openai/models/batch_list_params" require_relative "openai/models/batch_request_counts" require_relative "openai/models/batch_retrieve_params" require_relative "openai/models/beta/assistant" require_relative "openai/models/beta/assistant_create_params" require_relative "openai/models/beta/assistant_deleted" require_relative "openai/models/beta/assistant_delete_params" require_relative "openai/models/beta/assistant_list_params" require_relative "openai/models/beta/assistant_response_format_option" require_relative "openai/models/beta/assistant_retrieve_params" require_relative "openai/models/beta/assistant_stream_event" require_relative "openai/models/beta/assistant_tool" require_relative "openai/models/beta/assistant_tool_choice" require_relative "openai/models/beta/assistant_tool_choice_function" require_relative "openai/models/beta/assistant_tool_choice_option" require_relative "openai/models/beta/assistant_update_params" require_relative "openai/models/beta/code_interpreter_tool" require_relative "openai/models/beta/file_search_tool" require_relative "openai/models/beta/function_tool" require_relative "openai/models/beta/message_stream_event" require_relative "openai/models/beta/run_step_stream_event" require_relative "openai/models/beta/run_stream_event" require_relative "openai/models/beta/thread" require_relative "openai/models/beta/thread_create_and_run_params" require_relative "openai/models/beta/thread_create_params" require_relative "openai/models/beta/thread_deleted" require_relative "openai/models/beta/thread_delete_params" require_relative "openai/models/beta/thread_retrieve_params" require_relative "openai/models/beta/threads/annotation" require_relative "openai/models/beta/threads/annotation_delta" require_relative "openai/models/beta/threads/file_citation_annotation" require_relative "openai/models/beta/threads/file_citation_delta_annotation" require_relative "openai/models/beta/threads/file_path_annotation" require_relative "openai/models/beta/threads/file_path_delta_annotation" require_relative "openai/models/beta/threads/image_file" require_relative "openai/models/beta/threads/image_file_content_block" require_relative "openai/models/beta/threads/image_file_delta" require_relative "openai/models/beta/threads/image_file_delta_block" require_relative "openai/models/beta/threads/image_url" require_relative "openai/models/beta/threads/image_url_content_block" require_relative "openai/models/beta/threads/image_url_delta" require_relative "openai/models/beta/threads/image_url_delta_block" require_relative "openai/models/beta/threads/message" require_relative "openai/models/beta/threads/message_content" require_relative "openai/models/beta/threads/message_content_delta" require_relative "openai/models/beta/threads/message_content_part_param" require_relative "openai/models/beta/threads/message_create_params" require_relative "openai/models/beta/threads/message_deleted" require_relative "openai/models/beta/threads/message_delete_params" require_relative "openai/models/beta/threads/message_delta" require_relative "openai/models/beta/threads/message_delta_event" require_relative "openai/models/beta/threads/message_list_params" require_relative "openai/models/beta/threads/message_retrieve_params" require_relative "openai/models/beta/threads/message_update_params" require_relative "openai/models/beta/threads/refusal_content_block" require_relative "openai/models/beta/threads/refusal_delta_block" require_relative "openai/models/beta/threads/required_action_function_tool_call" require_relative "openai/models/beta/threads/run" require_relative "openai/models/beta/threads/run_cancel_params" require_relative "openai/models/beta/threads/run_create_params" require_relative "openai/models/beta/threads/run_list_params" require_relative "openai/models/beta/threads/run_retrieve_params" require_relative "openai/models/beta/threads/runs/code_interpreter_logs" require_relative "openai/models/beta/threads/runs/code_interpreter_output_image" require_relative "openai/models/beta/threads/runs/code_interpreter_tool_call" require_relative "openai/models/beta/threads/runs/code_interpreter_tool_call_delta" require_relative "openai/models/beta/threads/runs/file_search_tool_call" require_relative "openai/models/beta/threads/runs/file_search_tool_call_delta" require_relative "openai/models/beta/threads/runs/function_tool_call" require_relative "openai/models/beta/threads/runs/function_tool_call_delta" require_relative "openai/models/beta/threads/runs/message_creation_step_details" require_relative "openai/models/beta/threads/runs/run_step" require_relative "openai/models/beta/threads/runs/run_step_delta" require_relative "openai/models/beta/threads/runs/run_step_delta_event" require_relative "openai/models/beta/threads/runs/run_step_delta_message_delta" require_relative "openai/models/beta/threads/runs/run_step_include" require_relative "openai/models/beta/threads/runs/step_list_params" require_relative "openai/models/beta/threads/runs/step_retrieve_params" require_relative "openai/models/beta/threads/runs/tool_call" require_relative "openai/models/beta/threads/runs/tool_call_delta" require_relative "openai/models/beta/threads/runs/tool_call_delta_object" require_relative "openai/models/beta/threads/runs/tool_calls_step_details" require_relative "openai/models/beta/threads/run_status" require_relative "openai/models/beta/threads/run_submit_tool_outputs_params" require_relative "openai/models/beta/threads/run_update_params" require_relative "openai/models/beta/threads/text" require_relative "openai/models/beta/threads/text_content_block" require_relative "openai/models/beta/threads/text_content_block_param" require_relative "openai/models/beta/threads/text_delta" require_relative "openai/models/beta/threads/text_delta_block" require_relative "openai/models/beta/thread_stream_event" require_relative "openai/models/beta/thread_update_params" require_relative "openai/models/chat/chat_completion" require_relative "openai/models/chat/chat_completion_assistant_message_param" require_relative "openai/models/chat/chat_completion_audio" require_relative "openai/models/chat/chat_completion_audio_param" require_relative "openai/models/chat/chat_completion_chunk" require_relative "openai/models/chat/chat_completion_content_part" require_relative "openai/models/chat/chat_completion_content_part_image" require_relative "openai/models/chat/chat_completion_content_part_input_audio" require_relative "openai/models/chat/chat_completion_content_part_refusal" require_relative "openai/models/chat/chat_completion_content_part_text" require_relative "openai/models/chat/chat_completion_deleted" require_relative "openai/models/chat/chat_completion_developer_message_param" require_relative "openai/models/chat/chat_completion_function_call_option" require_relative "openai/models/chat/chat_completion_function_message_param" require_relative "openai/models/chat/chat_completion_message_param" require_relative "openai/models/chat/chat_completion_message_tool_call" require_relative "openai/models/chat/chat_completion_modality" require_relative "openai/models/chat/chat_completion_named_tool_choice" require_relative "openai/models/chat/chat_completion_prediction_content" require_relative "openai/models/chat/chat_completion_reasoning_effort" require_relative "openai/models/chat/chat_completion_role" require_relative "openai/models/chat/chat_completion_store_message" require_relative "openai/models/chat/chat_completion_stream_options" require_relative "openai/models/chat/chat_completion_system_message_param" require_relative "openai/models/chat/chat_completion_token_logprob" require_relative "openai/models/chat/chat_completion_tool" require_relative "openai/models/chat/chat_completion_tool_choice_option" require_relative "openai/models/chat/chat_completion_tool_message_param" require_relative "openai/models/chat/chat_completion_user_message_param" require_relative "openai/models/chat/completion_create_params" require_relative "openai/models/chat/completion_delete_params" require_relative "openai/models/chat/completion_list_params" require_relative "openai/models/chat/completion_retrieve_params" require_relative "openai/models/chat/completions/message_list_params" require_relative "openai/models/chat/completion_update_params" require_relative "openai/models/chat_model" require_relative "openai/models/comparison_filter" require_relative "openai/models/completion" require_relative "openai/models/completion_choice" require_relative "openai/models/completion_create_params" require_relative "openai/models/completion_usage" require_relative "openai/models/compound_filter" require_relative "openai/models/create_embedding_response" require_relative "openai/models/embedding" require_relative "openai/models/embedding_create_params" require_relative "openai/models/embedding_model" require_relative "openai/models/error_object" require_relative "openai/models/eval_create_params" require_relative "openai/models/eval_create_response" require_relative "openai/models/eval_custom_data_source_config" require_relative "openai/models/eval_delete_params" require_relative "openai/models/eval_delete_response" require_relative "openai/models/eval_label_model_grader" require_relative "openai/models/eval_list_params" require_relative "openai/models/eval_list_response" require_relative "openai/models/eval_retrieve_params" require_relative "openai/models/eval_retrieve_response" require_relative "openai/models/evals/create_eval_completions_run_data_source" require_relative "openai/models/evals/create_eval_jsonl_run_data_source" require_relative "openai/models/evals/eval_api_error" require_relative "openai/models/evals/run_cancel_params" require_relative "openai/models/evals/run_cancel_response" require_relative "openai/models/evals/run_create_params" require_relative "openai/models/evals/run_create_response" require_relative "openai/models/evals/run_delete_params" require_relative "openai/models/evals/run_delete_response" require_relative "openai/models/evals/run_list_params" require_relative "openai/models/evals/run_list_response" require_relative "openai/models/evals/run_retrieve_params" require_relative "openai/models/evals/run_retrieve_response" require_relative "openai/models/evals/runs/output_item_list_params" require_relative "openai/models/evals/runs/output_item_list_response" require_relative "openai/models/evals/runs/output_item_retrieve_params" require_relative "openai/models/evals/runs/output_item_retrieve_response" require_relative "openai/models/eval_stored_completions_data_source_config" require_relative "openai/models/eval_string_check_grader" require_relative "openai/models/eval_text_similarity_grader" require_relative "openai/models/eval_update_params" require_relative "openai/models/eval_update_response" require_relative "openai/models/file_chunking_strategy" require_relative "openai/models/file_chunking_strategy_param" require_relative "openai/models/file_content_params" require_relative "openai/models/file_create_params" require_relative "openai/models/file_deleted" require_relative "openai/models/file_delete_params" require_relative "openai/models/file_list_params" require_relative "openai/models/file_object" require_relative "openai/models/file_purpose" require_relative "openai/models/file_retrieve_params" require_relative "openai/models/fine_tuning/checkpoints/permission_create_params" require_relative "openai/models/fine_tuning/checkpoints/permission_create_response" require_relative "openai/models/fine_tuning/checkpoints/permission_delete_params" require_relative "openai/models/fine_tuning/checkpoints/permission_delete_response" require_relative "openai/models/fine_tuning/checkpoints/permission_retrieve_params" require_relative "openai/models/fine_tuning/checkpoints/permission_retrieve_response" require_relative "openai/models/fine_tuning/fine_tuning_job" require_relative "openai/models/fine_tuning/fine_tuning_job_event" require_relative "openai/models/fine_tuning/fine_tuning_job_integration" require_relative "openai/models/fine_tuning/fine_tuning_job_wandb_integration" require_relative "openai/models/fine_tuning/job_cancel_params" require_relative "openai/models/fine_tuning/job_create_params" require_relative "openai/models/fine_tuning/job_list_events_params" require_relative "openai/models/fine_tuning/job_list_params" require_relative "openai/models/fine_tuning/job_retrieve_params" require_relative "openai/models/fine_tuning/jobs/checkpoint_list_params" require_relative "openai/models/fine_tuning/jobs/fine_tuning_job_checkpoint" require_relative "openai/models/function_definition" require_relative "openai/models/function_parameters" require_relative "openai/models/image" require_relative "openai/models/image_create_variation_params" require_relative "openai/models/image_edit_params" require_relative "openai/models/image_generate_params" require_relative "openai/models/image_model" require_relative "openai/models/images_response" require_relative "openai/models/metadata" require_relative "openai/models/model" require_relative "openai/models/model_deleted" require_relative "openai/models/model_delete_params" require_relative "openai/models/model_list_params" require_relative "openai/models/model_retrieve_params" require_relative "openai/models/moderation" require_relative "openai/models/moderation_create_params" require_relative "openai/models/moderation_create_response" require_relative "openai/models/moderation_image_url_input" require_relative "openai/models/moderation_model" require_relative "openai/models/moderation_multi_modal_input" require_relative "openai/models/moderation_text_input" require_relative "openai/models/other_file_chunking_strategy_object" require_relative "openai/models/reasoning" require_relative "openai/models/response_format_json_object" require_relative "openai/models/response_format_json_schema" require_relative "openai/models/response_format_text" require_relative "openai/models/responses/computer_tool" require_relative "openai/models/responses/easy_input_message" require_relative "openai/models/responses/file_search_tool" require_relative "openai/models/responses/function_tool" require_relative "openai/models/responses/input_item_list_params" require_relative "openai/models/responses/response" require_relative "openai/models/responses/response_audio_delta_event" require_relative "openai/models/responses/response_audio_done_event" require_relative "openai/models/responses/response_audio_transcript_delta_event" require_relative "openai/models/responses/response_audio_transcript_done_event" require_relative "openai/models/responses/response_code_interpreter_call_code_delta_event" require_relative "openai/models/responses/response_code_interpreter_call_code_done_event" require_relative "openai/models/responses/response_code_interpreter_call_completed_event" require_relative "openai/models/responses/response_code_interpreter_call_in_progress_event" require_relative "openai/models/responses/response_code_interpreter_call_interpreting_event" require_relative "openai/models/responses/response_code_interpreter_tool_call" require_relative "openai/models/responses/response_completed_event" require_relative "openai/models/responses/response_computer_tool_call" require_relative "openai/models/responses/response_computer_tool_call_output_item" require_relative "openai/models/responses/response_computer_tool_call_output_screenshot" require_relative "openai/models/responses/response_content" require_relative "openai/models/responses/response_content_part_added_event" require_relative "openai/models/responses/response_content_part_done_event" require_relative "openai/models/responses/response_created_event" require_relative "openai/models/responses/response_create_params" require_relative "openai/models/responses/response_delete_params" require_relative "openai/models/responses/response_error" require_relative "openai/models/responses/response_error_event" require_relative "openai/models/responses/response_failed_event" require_relative "openai/models/responses/response_file_search_call_completed_event" require_relative "openai/models/responses/response_file_search_call_in_progress_event" require_relative "openai/models/responses/response_file_search_call_searching_event" require_relative "openai/models/responses/response_file_search_tool_call" require_relative "openai/models/responses/response_format_text_config" require_relative "openai/models/responses/response_format_text_json_schema_config" require_relative "openai/models/responses/response_function_call_arguments_delta_event" require_relative "openai/models/responses/response_function_call_arguments_done_event" require_relative "openai/models/responses/response_function_tool_call_item" require_relative "openai/models/responses/response_function_tool_call_output_item" require_relative "openai/models/responses/response_function_web_search" require_relative "openai/models/responses/response_includable" require_relative "openai/models/responses/response_incomplete_event" require_relative "openai/models/responses/response_in_progress_event" require_relative "openai/models/responses/response_input" require_relative "openai/models/responses/response_input_audio" require_relative "openai/models/responses/response_input_content" require_relative "openai/models/responses/response_input_file" require_relative "openai/models/responses/response_input_image" require_relative "openai/models/responses/response_input_item" require_relative "openai/models/responses/response_input_message_content_list" require_relative "openai/models/responses/response_input_message_item" require_relative "openai/models/responses/response_input_text" require_relative "openai/models/responses/response_item" require_relative "openai/models/responses/response_item_list" require_relative "openai/models/responses/response_output_audio" require_relative "openai/models/responses/response_output_item" require_relative "openai/models/responses/response_output_item_added_event" require_relative "openai/models/responses/response_output_item_done_event" require_relative "openai/models/responses/response_output_message" require_relative "openai/models/responses/response_output_refusal" require_relative "openai/models/responses/response_output_text" require_relative "openai/models/responses/response_reasoning_item" require_relative "openai/models/responses/response_refusal_delta_event" require_relative "openai/models/responses/response_refusal_done_event" require_relative "openai/models/responses/response_retrieve_params" require_relative "openai/models/responses/response_status" require_relative "openai/models/responses/response_stream_event" require_relative "openai/models/responses/response_text_annotation_delta_event" require_relative "openai/models/responses/response_text_config" require_relative "openai/models/responses/response_text_delta_event" require_relative "openai/models/responses/response_text_done_event" require_relative "openai/models/responses/response_usage" require_relative "openai/models/responses/response_web_search_call_completed_event" require_relative "openai/models/responses/response_web_search_call_in_progress_event" require_relative "openai/models/responses/response_web_search_call_searching_event" require_relative "openai/models/responses/tool" require_relative "openai/models/responses/tool_choice_function" require_relative "openai/models/responses/tool_choice_options" require_relative "openai/models/responses/tool_choice_types" require_relative "openai/models/responses/web_search_tool" require_relative "openai/models/responses_model" require_relative "openai/models/static_file_chunking_strategy" require_relative "openai/models/static_file_chunking_strategy_object" require_relative "openai/models/static_file_chunking_strategy_object_param" require_relative "openai/models/upload" require_relative "openai/models/upload_cancel_params" require_relative "openai/models/upload_complete_params" require_relative "openai/models/upload_create_params" require_relative "openai/models/uploads/part_create_params" require_relative "openai/models/uploads/upload_part" require_relative "openai/models/vector_store" require_relative "openai/models/vector_store_create_params" require_relative "openai/models/vector_store_deleted" require_relative "openai/models/vector_store_delete_params" require_relative "openai/models/vector_store_list_params" require_relative "openai/models/vector_store_retrieve_params" require_relative "openai/models/vector_stores/file_batch_cancel_params" require_relative "openai/models/vector_stores/file_batch_create_params" require_relative "openai/models/vector_stores/file_batch_list_files_params" require_relative "openai/models/vector_stores/file_batch_retrieve_params" require_relative "openai/models/vector_stores/file_content_params" require_relative "openai/models/vector_stores/file_content_response" require_relative "openai/models/vector_stores/file_create_params" require_relative "openai/models/vector_stores/file_delete_params" require_relative "openai/models/vector_stores/file_list_params" require_relative "openai/models/vector_stores/file_retrieve_params" require_relative "openai/models/vector_stores/file_update_params" require_relative "openai/models/vector_stores/vector_store_file" require_relative "openai/models/vector_stores/vector_store_file_batch" require_relative "openai/models/vector_stores/vector_store_file_deleted" require_relative "openai/models/vector_store_search_params" require_relative "openai/models/vector_store_search_response" require_relative "openai/models/vector_store_update_params" require_relative "openai/resources/audio" require_relative "openai/resources/audio/speech" require_relative "openai/resources/audio/transcriptions" require_relative "openai/resources/audio/translations" require_relative "openai/resources/batches" require_relative "openai/resources/beta" require_relative "openai/resources/beta/assistants" require_relative "openai/resources/beta/threads" require_relative "openai/resources/beta/threads/messages" require_relative "openai/resources/beta/threads/runs" require_relative "openai/resources/beta/threads/runs/steps" require_relative "openai/resources/chat" require_relative "openai/resources/chat/completions" require_relative "openai/resources/chat/completions/messages" require_relative "openai/resources/completions" require_relative "openai/resources/embeddings" require_relative "openai/resources/evals" require_relative "openai/resources/evals/runs" require_relative "openai/resources/evals/runs/output_items" require_relative "openai/resources/files" require_relative "openai/resources/fine_tuning" require_relative "openai/resources/fine_tuning/checkpoints" require_relative "openai/resources/fine_tuning/checkpoints/permissions" require_relative "openai/resources/fine_tuning/jobs" require_relative "openai/resources/fine_tuning/jobs/checkpoints" require_relative "openai/resources/images" require_relative "openai/resources/models" require_relative "openai/resources/moderations" require_relative "openai/resources/responses" require_relative "openai/resources/responses/input_items" require_relative "openai/resources/uploads" require_relative "openai/resources/uploads/parts" require_relative "openai/resources/vector_stores" require_relative "openai/resources/vector_stores/file_batches" require_relative "openai/resources/vector_stores/files"