From 21167bf31d1b650f863011f52128d783e4e3d653 Mon Sep 17 00:00:00 2001 From: dpiet-oai <326640584+dpiet-oai@users.noreply.github.com> Date: Fri, 9 Oct 2026 03:28:34 +0000 Subject: [PATCH] feat(api): add prewarmed hosted environments Castiron-Internal-PR: https://github.com/openai/openai-ruby-internal/pull/204 Castiron-Source-SHA: cb685d7c1f5b605ff00561234fbb4bcc2a99aee1 Castiron-Public-Base-SHA: 500f9fc6ad1e3a77f9a0bf4f7918039464873765 --- .castiron.stats.yml | 14 +- api_reference/openapi.transformed.yml | 475 +++++++++++++++++ lib/openai.rb | 4 + .../beta/agents/environment_create_params.rb | 300 +++++++++++ .../models/beta/agents/environment_info.rb | 5 +- .../beta/agents/environment_list_params.rb | 78 +++ lib/openai/models/beta/environment_param.rb | 13 +- .../agent_environment_failed_webhook_event.rb | 73 +++ .../agent_environment_ready_webhook_event.rb | 73 +++ .../models/webhooks/unwrap_webhook_event.rb | 12 +- .../models/webhooks/webhook_create_params.rb | 2 + .../models/webhooks/webhook_test_params.rb | 2 + .../models/webhooks/webhook_update_params.rb | 2 + lib/openai/resources/beta/agents.rb | 15 +- .../resources/beta/agents/environments.rb | 81 ++- .../beta/agents/environments/files.rb | 6 +- .../beta/agents/environments/templates.rb | 15 +- lib/openai/resources/beta/agents/sessions.rb | 23 +- .../beta/agents/sessions/artifacts.rb | 13 +- .../resources/beta/agents/sessions/events.rb | 14 +- .../resources/beta/agents/sessions/items.rb | 3 +- .../beta/agents/sessions/subagents.rb | 6 +- .../beta/agents/sessions/subagents/items.rb | 3 +- .../beta/agents/sessions/subagents/turns.rb | 6 +- .../agents/sessions/subagents/turns/items.rb | 3 +- .../resources/beta/agents/sessions/traces.rb | 3 +- .../resources/beta/agents/sessions/turns.rb | 6 +- .../beta/agents/sessions/turns/items.rb | 3 +- lib/openai/resources/beta/agents/vaults.rb | 12 +- .../beta/agents/vaults/credentials.rb | 15 +- lib/openai/resources/beta/assistants.rb | 15 +- lib/openai/resources/beta/chatkit/sessions.rb | 6 +- lib/openai/resources/beta/chatkit/threads.rb | 12 +- lib/openai/resources/beta/threads.rb | 23 +- lib/openai/resources/beta/threads/messages.rb | 15 +- lib/openai/resources/beta/threads/runs.rb | 34 +- .../resources/beta/threads/runs/steps.rb | 6 +- lib/openai/resources/vector_stores.rb | 18 +- .../resources/vector_stores/file_batches.rb | 18 +- lib/openai/resources/vector_stores/files.rb | 24 +- lib/openai/resources/webhooks.rb | 2 +- .../beta/agents/environment_create_params.rbi | 499 ++++++++++++++++++ .../models/beta/agents/environment_info.rbi | 3 + .../beta/agents/environment_list_params.rbi | 136 +++++ rbi/openai/models/beta/environment_param.rbi | 15 + ...agent_environment_failed_webhook_event.rbi | 134 +++++ .../agent_environment_ready_webhook_event.rbi | 134 +++++ .../models/webhooks/unwrap_webhook_event.rbi | 6 +- .../models/webhooks/webhook_create_params.rbi | 8 + .../models/webhooks/webhook_test_params.rbi | 8 + .../models/webhooks/webhook_update_params.rbi | 8 + .../resources/beta/agents/environments.rbi | 53 ++ rbi/openai/resources/webhooks.rbi | 2 + .../beta/agents/environment_create_params.rbs | 268 ++++++++++ .../models/beta/agents/environment_info.rbs | 6 +- .../beta/agents/environment_list_params.rbs | 97 ++++ sig/openai/models/beta/environment_param.rbs | 14 + ...agent_environment_failed_webhook_event.rbs | 70 +++ .../agent_environment_ready_webhook_event.rbs | 70 +++ .../models/webhooks/unwrap_webhook_event.rbs | 4 +- .../models/webhooks/webhook_create_params.rbs | 4 + .../models/webhooks/webhook_test_params.rbs | 4 + .../models/webhooks/webhook_update_params.rbs | 4 + .../resources/beta/agents/environments.rbs | 15 + sig/openai/resources/webhooks.rbs | 4 +- .../helpers/webhook_verification_test.rb | 8 +- test/openai/prewarm_request_headers_test.rb | 71 +++ .../beta/agents/environments_test.rb | 47 ++ 68 files changed, 3012 insertions(+), 133 deletions(-) create mode 100644 lib/openai/models/beta/agents/environment_create_params.rb create mode 100644 lib/openai/models/beta/agents/environment_list_params.rb create mode 100644 lib/openai/models/webhooks/agent_environment_failed_webhook_event.rb create mode 100644 lib/openai/models/webhooks/agent_environment_ready_webhook_event.rb create mode 100644 rbi/openai/models/beta/agents/environment_create_params.rbi create mode 100644 rbi/openai/models/beta/agents/environment_list_params.rbi create mode 100644 rbi/openai/models/webhooks/agent_environment_failed_webhook_event.rbi create mode 100644 rbi/openai/models/webhooks/agent_environment_ready_webhook_event.rbi create mode 100644 sig/openai/models/beta/agents/environment_create_params.rbs create mode 100644 sig/openai/models/beta/agents/environment_list_params.rbs create mode 100644 sig/openai/models/webhooks/agent_environment_failed_webhook_event.rbs create mode 100644 sig/openai/models/webhooks/agent_environment_ready_webhook_event.rbs create mode 100644 test/openai/prewarm_request_headers_test.rb diff --git a/.castiron.stats.yml b/.castiron.stats.yml index c8c039b58..2060d8f6f 100644 --- a/.castiron.stats.yml +++ b/.castiron.stats.yml @@ -1,8 +1,8 @@ schema_version: 1 -generation_id: 786cb87f-085d-4a29-a13e-6cc4159d2afb -openapi_spec_hash: 9585fb5cd9d39a73de012b8de53b088a -openapi_transformed_spec_hash: c497de66b4332c26986df2cb087da34a -config_hash: 075dc8d5c682945dd2c56e77607736a1 -codegen_sha: 25b3101e8b486cfa5c20e94954bba6e579447680 -codegen_hash: ec7e6e3b9d906a1a76f8ec0d1d60b4eebf71c0940619ccd94a40481bf8903254 -public_codegen_sha: c726b12fa6eb0d806eae6200ad0f1a76cac2cf34 +generation_id: 4ec7ddaa-ffa6-4a66-9035-ecb517108372 +openapi_spec_hash: f21b711c644bd7acb83c4a35be5f89b5 +openapi_transformed_spec_hash: 9d23bc992f6c476d92ff2a1768ed1b17 +config_hash: ed29aaecbd1993a4cd3a714b00bc39d2 +codegen_sha: 485e909890c0685a1afe1a48769757c44a75dd1c +codegen_hash: 08f5227f4a60fb777fcad36dd9097c6c0a1651caaf06bc928d96839fc149ae2e +public_codegen_sha: a17a5cded92ca8999b02053afcfc5459f01463e5 diff --git a/api_reference/openapi.transformed.yml b/api_reference/openapi.transformed.yml index 9cd67be44..66338069b 100644 --- a/api_reference/openapi.transformed.yml +++ b/api_reference/openapi.transformed.yml @@ -30153,6 +30153,171 @@ paths: "total_tokens": 42 } } + /agents/environments: + get: + operationId: listAgentEnvironments + summary: List agent environments + description: Lists OpenAI-hosted environments owned by the authenticated principal. Requires access to the prewarming beta. + tags: + - Agents + parameters: + - name: limit + in: query + required: false + schema: + type: integer + format: int64 + minimum: 1 + maximum: 100 + default: 20 + description: The maximum number of environments to return, between 1 and 100. Defaults to 20. + - name: order + in: query + required: false + schema: + $ref: '#/components/schemas/ListOrderParam' + default: desc + description: The order in which environments are returned. Defaults to `desc`. + - name: after + in: query + required: false + schema: + type: string + minLength: 0 + maxLength: 1048576 + description: Return environments after this environment ID in the selected order. + - name: type + in: query + required: false + schema: + $ref: '#/components/schemas/EnvironmentTypeParam' + description: The hosting type to list. Defaults to `openai_hosted`. + responses: + '200': + description: A page of owned environments. + content: + application/json: + schema: + $ref: '#/components/schemas/AgentEnvironmentListResource' + description: An ID-paginated list of owned environments. + '400': + description: The request was invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' + '401': + description: Authentication or project context was missing. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' + '403': + description: The API key lacks the required permission. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' + '404': + description: The requested environment or referenced resource was not found. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' + '409': + description: The request conflicted with the current environment state. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' + '500': + description: An internal error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' + '503': + description: The service is temporarily unavailable. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' + post: + operationId: createAgentEnvironment + summary: Create an agent environment + description: Creates an OpenAI-hosted environment before creating a session. Requires access to the prewarming beta. + tags: + - Agents + parameters: + - name: Idempotency-Key + in: header + required: false + schema: + type: string + minLength: 1 + maxLength: 256 + description: Deduplicates creation for 24 hours within the authenticated organization, project, and creator. Retry the same JSON parameters with the same key to retrieve the original environment in its current state. Different parameters or an incomplete hosted creation return 409. Deleted environments are not recreated. After retention expires, the key may create a new environment. Without this header, each request creates a new environment. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateAgentEnvironmentParams' + required: true + responses: + '201': + description: The created OpenAI-hosted environment. + content: + application/json: + schema: + $ref: '#/components/schemas/PublicEnvironmentResource' + '400': + description: The request was invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' + '401': + description: Authentication or project context was missing. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' + '403': + description: The API key lacks the required permission. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' + '404': + description: The requested environment or referenced resource was not found. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' + '409': + description: The request conflicted with the current environment state. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' + '429': + description: The request exceeded a rate or capacity limit. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' + '500': + description: An internal error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' + '503': + description: The service is temporarily unavailable. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse-2' /agents/environments/{environment_id}: get: operationId: retrieveAgentEnvironment @@ -36023,6 +36188,36 @@ paths: "input_tokens": 11 } webhooks: + agent_environment_failed: + post: + description: | + Sent when setup fails for a prewarmed OpenAI-hosted environment before it is attached to a session. + requestBody: + description: The event payload sent by the API. + content: + application/json: + schema: + $ref: '#/components/schemas/WebhookAgentEnvironmentFailed' + responses: + '200': + description: | + Return a 200 status code to acknowledge receipt of the event. Non-200 + status codes will be retried. + agent_environment_ready: + post: + description: | + Sent when a prewarmed OpenAI-hosted environment finishes setup before being attached to a session. + requestBody: + description: The event payload sent by the API. + content: + application/json: + schema: + $ref: '#/components/schemas/WebhookAgentEnvironmentReady' + responses: + '200': + description: | + Return a 200 status code to acknowledge receipt of the event. Non-200 + status codes will be retried. agent_session_action_required: post: description: | @@ -71229,6 +71424,68 @@ components: - type - status - action + WebhookAgentEnvironmentFailed: + type: object + title: agent.environment.failed + description: | + Sent when setup fails for a prewarmed OpenAI-hosted environment before it is attached to a session. + allOf: + - $ref: '#/components/schemas/WebhookAgentSessionEnvelope' + - type: object + required: + - type + - data + properties: + type: + type: string + description: The event type. Always `agent.environment.failed`. + enum: + - agent.environment.failed + x-stainless-const: true + data: + $ref: '#/components/schemas/AgentEnvironmentEvent' + x-oaiMeta: + name: agent.environment.failed + group: webhook-events + example: | + { + "id": "evt_123", + "object": "event", + "created_at": 1719168000, + "type": "agent.environment.failed", + "data": {"id": "ccarenv_123"} + } + WebhookAgentEnvironmentReady: + type: object + title: agent.environment.ready + description: | + Sent when a prewarmed OpenAI-hosted environment finishes setup before being attached to a session. + allOf: + - $ref: '#/components/schemas/WebhookAgentSessionEnvelope' + - type: object + required: + - type + - data + properties: + type: + type: string + description: The event type. Always `agent.environment.ready`. + enum: + - agent.environment.ready + x-stainless-const: true + data: + $ref: '#/components/schemas/AgentEnvironmentEvent' + x-oaiMeta: + name: agent.environment.ready + group: webhook-events + example: | + { + "id": "evt_123", + "object": "event", + "created_at": 1719168000, + "type": "agent.environment.ready", + "data": {"id": "ccarenv_123"} + } WebhookAgentSessionActionRequired: type: object title: agent.session.action_required @@ -80894,6 +81151,11 @@ components: - answers - usage additionalProperties: false + EnvironmentTypeParam: + type: string + enum: + - openai_hosted + description: The hosting type of an execution environment. EnvironmentTypeResource: type: string enum: @@ -80904,12 +81166,14 @@ components: type: string enum: - pending + - ready - connected - disconnected - expired - failed x-enumDescriptions: - '' + - Provisioning succeeded and the environment is available for attachment or use. - '' - '' - '' @@ -81149,6 +81413,46 @@ components: - plugins additionalProperties: false description: Safe metadata for a first-class execution environment. + AgentEnvironmentListResource: + type: object + properties: + object: + type: string + enum: + - list + default: list + x-stainless-const: true + description: The object type, which is always `list`. + data: + type: array + items: + $ref: '#/components/schemas/PublicEnvironmentResource' + minItems: 0 + maxItems: 2000 + description: The resources returned in this page, in the requested sort order. + first_id: + type: + - string + - 'null' + minLength: 0 + description: The ID of the first resource in `data`, or `null` if the page is empty. + last_id: + type: + - string + - 'null' + minLength: 0 + description: The ID of the last resource in `data`, or `null` if the page is empty. Pass this as `after` with the same order and filters. + has_more: + type: boolean + description: Whether there are more resources to retrieve after this page. + required: + - object + - data + - first_id + - last_id + - has_more + additionalProperties: false + description: A page of Agents API resources, with IDs for retrieving additional pages. ErrorBodyResource: type: object properties: @@ -81196,6 +81500,133 @@ components: - Returns resources in ascending order. - Returns resources in descending order. description: The order in which paginated resources are returned. + CreateEnvironmentParamOpenaiHosted: + type: object + properties: + type: + type: string + enum: + - openai_hosted + default: openai_hosted + x-stainless-const: true + description: The type of the object. Always `openai_hosted`. + packages: + anyOf: + - $ref: '#/components/schemas/EnvironmentPackagesParam' + - type: 'null' + description: Packages to install in the environment. Defaults to empty package lists. + setup_commands: + type: + - array + - 'null' + items: + $ref: '#/components/schemas/SetupCommandParam' + minItems: 0 + maxItems: 16 + description: Ordered, confidential setup commands. Command bodies are never returned. + network: + anyOf: + - $ref: '#/components/schemas/NetworkPolicyParam' + - type: 'null' + description: Network access policy for the environment. If omitted, the API version determines whether network access is enabled or disabled. + desktop: + anyOf: + - $ref: '#/components/schemas/DesktopParam' + - type: 'null' + description: Desktop provisioning. Omission or null inherits the template setting, or defaults to disabled. + env: + type: + - object + - 'null' + additionalProperties: + type: string + minLength: 0 + maxLength: 1048576 + propertyNames: + type: string + minLength: 1 + maxLength: 256 + minProperties: 0 + maxProperties: 1024 + description: Environment variables made available to the agent. + capability_directories: + type: + - array + - 'null' + items: + type: string + minLength: 0 + maxLength: 1048576 + minItems: 0 + maxItems: 16384 + description: Directories that contain capabilities exposed to the agent. Defaults to an empty list. + skills: + type: + - array + - 'null' + items: + $ref: '#/components/schemas/HostedSkillParam' + minItems: 0 + maxItems: 200 + description: Skills referenced by ID or provided as inline ZIP archives. Defaults to an empty list. + plugins: + type: + - array + - 'null' + items: + $ref: '#/components/schemas/HostedPluginParam' + minItems: 0 + maxItems: 32 + description: Plugins provided as inline ZIP archives. Defaults to an empty list. + files: + type: + - array + - 'null' + items: + $ref: '#/components/schemas/HostedEnvironmentFileParam' + minItems: 0 + maxItems: 50 + description: Files available before the agent starts. Defaults to an empty list. + environment_template_id: + type: string + minLength: 0 + maxLength: 64 + description: A reusable hosted template applied before inline configuration. Omitted fields inherit the template; network overrides cannot broaden its policy. + required: + - type + additionalProperties: false + description: Provision an OpenAI-hosted environment from inline configuration or a template. + CreateEnvironmentParam: + description: Configuration for a new prewarmed OpenAI-hosted environment. + discriminator: + propertyName: type + mapping: + openai_hosted: '#/components/schemas/CreateEnvironmentParamOpenaiHosted' + x-oai-discriminator-values: + - openai_hosted + anyOf: + - $ref: '#/components/schemas/CreateEnvironmentParamOpenaiHosted' + CreateAgentEnvironmentParams: + type: object + properties: + environment: + $ref: '#/components/schemas/CreateEnvironmentParam' + description: The required hosting type and its configuration. + vault_ids: + type: + - array + - 'null' + items: + type: string + minLength: 0 + maxLength: 1048576 + minItems: 0 + maxItems: 10 + description: The IDs of up to 10 vaults made available to an OpenAI-hosted environment. + required: + - environment + additionalProperties: false + description: Parameters for creating an execution environment before its sessions. EnvironmentFilePageObjectResource: type: string enum: @@ -86359,6 +86790,11 @@ components: minItems: 0 maxItems: 50 description: Files available before the agent starts. Defaults to an empty list. + environment_id: + type: string + minLength: 9 + maxLength: 256 + description: An existing prewarmed environment. Cannot be combined with a template or inline configuration. environment_template_id: type: string minLength: 0 @@ -86373,6 +86809,32 @@ components: - type additionalProperties: false description: An existing OpenAI-hosted environment or new inline/template-based hosted configuration. + not: + required: + - environment_id + anyOf: + - required: + - packages + - required: + - setup_commands + - required: + - network + - required: + - desktop + - required: + - env + - required: + - capability_directories + - required: + - skills + - required: + - plugins + - required: + - files + - required: + - environment_template_id + - required: + - container_size EnvironmentParamSelfHosted: type: object properties: @@ -89688,6 +90150,8 @@ components: - realtime.call.incoming - video.completed - video.failed + - agent.environment.ready + - agent.environment.failed - agent.session.created - agent.session.action_required - agent.session.in_progress @@ -89871,6 +90335,17 @@ components: required: - object - data + AgentEnvironmentEvent: + type: object + properties: + id: + type: string + minLength: 0 + description: The ID of the environment. + required: + - id + additionalProperties: false + description: Identifies the environment whose lifecycle changed. AgentSessionRequiredActionTypeResource: type: string enum: diff --git a/lib/openai.rb b/lib/openai.rb index 40c27875e..8f4eef0a2 100644 --- a/lib/openai.rb +++ b/lib/openai.rb @@ -493,7 +493,9 @@ require_relative "openai/models/beta/agent_reasoning_param" require_relative "openai/models/beta/agent_resume_subagent_call_item" require_relative "openai/models/beta/agent_retrieve_params" +require_relative "openai/models/beta/agents/environment_create_params" require_relative "openai/models/beta/agents/environment_info" +require_relative "openai/models/beta/agents/environment_list_params" require_relative "openai/models/beta/agents/environment_retrieve_params" require_relative "openai/models/beta/agents/environments/environment_file" require_relative "openai/models/beta/agents/environments/environment_template" @@ -1446,6 +1448,8 @@ require_relative "openai/models/video_retrieve_params" require_relative "openai/models/video_seconds" require_relative "openai/models/video_size" +require_relative "openai/models/webhooks/agent_environment_failed_webhook_event" +require_relative "openai/models/webhooks/agent_environment_ready_webhook_event" require_relative "openai/models/webhooks/agent_session_action_required_webhook_event" require_relative "openai/models/webhooks/agent_session_created_webhook_event" require_relative "openai/models/webhooks/agent_session_failed_webhook_event" diff --git a/lib/openai/models/beta/agents/environment_create_params.rb b/lib/openai/models/beta/agents/environment_create_params.rb new file mode 100644 index 000000000..ceba2bc3f --- /dev/null +++ b/lib/openai/models/beta/agents/environment_create_params.rb @@ -0,0 +1,300 @@ +# frozen_string_literal: true + +module OpenAI + module Models + module Beta + module Agents + # @see OpenAI::Resources::Beta::Agents::Environments#create + class EnvironmentCreateParams < OpenAI::Internal::Type::BaseModel + extend OpenAI::Internal::Type::RequestParameters::Converter + include OpenAI::Internal::Type::RequestParameters + + # @!attribute environment + # The required hosting type and its configuration. + # + # @return [OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment] + required :environment, -> { OpenAI::Beta::Agents::EnvironmentCreateParams::Environment } + + # @!attribute vault_ids + # The IDs of up to 10 vaults made available to an OpenAI-hosted environment. + # + # @return [Array, nil] + optional :vault_ids, OpenAI::Internal::Type::ArrayOf[String], nil?: true + + # @!attribute idempotency_key + # + # @return [String, nil] + optional :idempotency_key, String + + # @!method initialize(environment:, vault_ids: nil, idempotency_key: nil, request_options: {}) + # @param environment [OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment] + # The required hosting type and its configuration. + # + # @param vault_ids [Array, nil] + # The IDs of up to 10 vaults made available to an OpenAI-hosted environment. + # + # @param idempotency_key [String] + # + # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}] + + class Environment < OpenAI::Internal::Type::BaseModel + # @!attribute type + # The type of the object. Always `openai_hosted`. + # + # @return [Symbol, :openai_hosted] + required :type, const: :openai_hosted + + # @!attribute capability_directories + # Directories that contain capabilities exposed to the agent. Defaults to an empty + # list. + # + # @return [Array, nil] + optional :capability_directories, OpenAI::Internal::Type::ArrayOf[String], nil?: true + + # @!attribute desktop + # Desktop provisioning. Omission or null inherits the template setting, or + # defaults to disabled. + # + # @return [OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment::Desktop, nil] + optional( + :desktop, + -> { + OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Desktop + }, + nil?: true + ) + + # @!attribute env + # Environment variables made available to the agent. + # + # @return [Hash{Symbol=>String}, nil] + optional :env, OpenAI::Internal::Type::HashOf[String], nil?: true + + # @!attribute environment_template_id + # A reusable hosted template applied before inline configuration. Omitted fields + # inherit the template; network overrides cannot broaden its policy. + # + # @return [String, nil] + optional :environment_template_id, String + + # @!attribute files + # Files available before the agent starts. Defaults to an empty list. + # + # @return [Array, nil] + optional( + :files, + -> { OpenAI::Internal::Type::ArrayOf[union: OpenAI::Beta::HostedEnvironmentFileParam] }, + nil?: true + ) + + # @!attribute network + # Network access policy for the environment. If omitted, the API version + # determines whether network access is enabled or disabled. + # + # @return [OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment::Network, nil] + optional( + :network, + -> { + OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network + }, + nil?: true + ) + + # @!attribute packages + # Packages to install in the environment. Defaults to empty package lists. + # + # @return [OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment::Packages, nil] + optional( + :packages, + -> { OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Packages }, + nil?: true + ) + + # @!attribute plugins + # Plugins provided as inline ZIP archives. Defaults to an empty list. + # + # @return [Array, nil] + optional( + :plugins, + -> { + OpenAI::Internal::Type::ArrayOf[OpenAI::Beta::HostedPluginParam] + }, + nil?: true + ) + + # @!attribute setup_commands + # Ordered, confidential setup commands. Command bodies are never returned. + # + # @return [Array, nil] + optional( + :setup_commands, + -> { OpenAI::Internal::Type::ArrayOf[OpenAI::Beta::SetupCommandParam] }, + nil?: true + ) + + # @!attribute skills + # Skills referenced by ID or provided as inline ZIP archives. Defaults to an empty + # list. + # + # @return [Array, nil] + optional( + :skills, + -> { OpenAI::Internal::Type::ArrayOf[union: OpenAI::Beta::HostedSkillParam] }, + nil?: true + ) + + # @!method initialize(capability_directories: nil, desktop: nil, env: nil, environment_template_id: nil, files: nil, network: nil, packages: nil, plugins: nil, setup_commands: nil, skills: nil, type: :openai_hosted) + # The required hosting type and its configuration. + # + # @param capability_directories [Array, nil] + # Directories that contain capabilities exposed to the agent. Defaults to an empty + # list. + # + # @param desktop [OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment::Desktop, nil] + # Desktop provisioning. Omission or null inherits the template setting, or + # defaults to disabled. + # + # @param env [Hash{Symbol=>String}, nil] + # Environment variables made available to the agent. + # + # @param environment_template_id [String] + # A reusable hosted template applied before inline configuration. Omitted fields + # inherit the template; network overrides cannot broaden its policy. + # + # @param files [Array, nil] + # Files available before the agent starts. Defaults to an empty list. + # + # @param network [OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment::Network, nil] + # Network access policy for the environment. If omitted, the API version + # determines whether network access is enabled or disabled. + # + # @param packages [OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment::Packages, nil] + # Packages to install in the environment. Defaults to empty package lists. + # + # @param plugins [Array, nil] + # Plugins provided as inline ZIP archives. Defaults to an empty list. + # + # @param setup_commands [Array, nil] + # Ordered, confidential setup commands. Command bodies are never returned. + # + # @param skills [Array, nil] + # Skills referenced by ID or provided as inline ZIP archives. Defaults to an empty + # list. + # + # @param type [Symbol, :openai_hosted] + # The type of the object. Always `openai_hosted`. + + # @see OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment#desktop + class Desktop < OpenAI::Internal::Type::BaseModel + # @!attribute enabled + # Whether to provision the desktop and its browser proxy. + # + # @return [Boolean] + required :enabled, OpenAI::Internal::Type::Boolean + + # @!method initialize(enabled:) + # Desktop provisioning. Omission or null inherits the template setting, or + # defaults to disabled. + # + # @param enabled [Boolean] + # Whether to provision the desktop and its browser proxy. + end + + # @see OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment#network + class Network < OpenAI::Internal::Type::BaseModel + # @!attribute access + # The environment's network access mode. + # + # @return [Symbol, OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment::Network::Access] + required( + :access, + enum: -> { OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network::Access } + ) + + # @!attribute allowed_domains + # Domains the environment may access when network access is restricted. + # + # @return [Array, nil] + optional :allowed_domains, OpenAI::Internal::Type::ArrayOf[String], nil?: true + + # @!attribute blocked_domains + # Domains blocked for both executor and browser when access is restricted. A + # nonempty list requires `access: restricted` and cannot be combined with nonempty + # `allowed_domains`. Wildcard domains are not supported. + # + # @return [Array, nil] + optional :blocked_domains, OpenAI::Internal::Type::ArrayOf[String], nil?: true + + # @!method initialize(access:, allowed_domains: nil, blocked_domains: nil) + # Network access policy for the environment. If omitted, the API version + # determines whether network access is enabled or disabled. + # + # @param access [Symbol, OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment::Network::Access] + # The environment's network access mode. + # + # @param allowed_domains [Array, nil] + # Domains the environment may access when network access is restricted. + # + # @param blocked_domains [Array, nil] + # Domains blocked for both executor and browser when access is restricted. A + # nonempty list requires `access: restricted` and cannot be combined with nonempty + # `allowed_domains`. Wildcard domains are not supported. + + # The environment's network access mode. + # + # @see OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment::Network#access + module Access + extend OpenAI::Internal::Type::Enum + + # Allows unrestricted network access. + ENABLED = :enabled + + # Disables network access. + DISABLED = :disabled + + # Applies the configured domain restrictions. + RESTRICTED = :restricted + + # @!method self.values + # @return [Array] + end + end + + # @see OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment#packages + class Packages < OpenAI::Internal::Type::BaseModel + # @!attribute npm + # npm packages to install globally. Defaults to an empty list. + # + # @return [Array, nil] + optional :npm, OpenAI::Internal::Type::ArrayOf[String], nil?: true + + # @!attribute python + # Python packages to install. Defaults to an empty list. + # + # @return [Array, nil] + optional :python, OpenAI::Internal::Type::ArrayOf[String], nil?: true + + # @!attribute system_ + # System packages to install. Defaults to an empty list. + # + # @return [Array, nil] + optional :system_, OpenAI::Internal::Type::ArrayOf[String], api_name: :system, nil?: true + + # @!method initialize(npm: nil, python: nil, system_: nil) + # Packages to install in the environment. Defaults to empty package lists. + # + # @param npm [Array, nil] + # npm packages to install globally. Defaults to an empty list. + # + # @param python [Array, nil] + # Python packages to install. Defaults to an empty list. + # + # @param system_ [Array, nil] + # System packages to install. Defaults to an empty list. + end + end + end + end + end + end +end diff --git a/lib/openai/models/beta/agents/environment_info.rb b/lib/openai/models/beta/agents/environment_info.rb index 100f8e3ff..bd4e1ddb9 100644 --- a/lib/openai/models/beta/agents/environment_info.rb +++ b/lib/openai/models/beta/agents/environment_info.rb @@ -4,7 +4,7 @@ module OpenAI module Models module Beta module Agents - # @see OpenAI::Resources::Beta::Agents::Environments#retrieve + # @see OpenAI::Resources::Beta::Agents::Environments#create class EnvironmentInfo < OpenAI::Internal::Type::BaseModel # @!attribute id # The ID of the environment. @@ -79,6 +79,9 @@ module Status extend OpenAI::Internal::Type::Enum PENDING = :pending + # Provisioning succeeded and the environment is available for attachment or use. + READY = :ready + CONNECTED = :connected DISCONNECTED = :disconnected EXPIRED = :expired diff --git a/lib/openai/models/beta/agents/environment_list_params.rb b/lib/openai/models/beta/agents/environment_list_params.rb new file mode 100644 index 000000000..82d6c25f7 --- /dev/null +++ b/lib/openai/models/beta/agents/environment_list_params.rb @@ -0,0 +1,78 @@ +# frozen_string_literal: true + +module OpenAI + module Models + module Beta + module Agents + # @see OpenAI::Resources::Beta::Agents::Environments#list + class EnvironmentListParams < OpenAI::Internal::Type::BaseModel + extend OpenAI::Internal::Type::RequestParameters::Converter + include OpenAI::Internal::Type::RequestParameters + + # @!attribute after + # Return environments after this environment ID in the selected order. + # + # @return [String, nil] + optional :after, String + + # @!attribute limit + # The maximum number of environments to return, between 1 and 100. Defaults to 20. + # + # @return [Integer, nil] + optional :limit, Integer + + # @!attribute order + # The order in which environments are returned. Defaults to `desc`. + # + # @return [Symbol, OpenAI::Models::Beta::Agents::EnvironmentListParams::Order, nil] + optional :order, enum: -> { OpenAI::Beta::Agents::EnvironmentListParams::Order } + + # @!attribute type + # The hosting type to list. Defaults to `openai_hosted`. + # + # @return [Symbol, OpenAI::Models::Beta::Agents::EnvironmentListParams::Type, nil] + optional :type, enum: -> { OpenAI::Beta::Agents::EnvironmentListParams::Type } + + # @!method initialize(after: nil, limit: nil, order: nil, type: nil, request_options: {}) + # @param after [String] + # Return environments after this environment ID in the selected order. + # + # @param limit [Integer] + # The maximum number of environments to return, between 1 and 100. Defaults to 20. + # + # @param order [Symbol, OpenAI::Models::Beta::Agents::EnvironmentListParams::Order] + # The order in which environments are returned. Defaults to `desc`. + # + # @param type [Symbol, OpenAI::Models::Beta::Agents::EnvironmentListParams::Type] + # The hosting type to list. Defaults to `openai_hosted`. + # + # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}] + + # The order in which environments are returned. Defaults to `desc`. + module Order + extend OpenAI::Internal::Type::Enum + + # Returns resources in ascending order. + ASC = :asc + + # Returns resources in descending order. + DESC = :desc + + # @!method self.values + # @return [Array] + end + + # The hosting type to list. Defaults to `openai_hosted`. + module Type + extend OpenAI::Internal::Type::Enum + + OPENAI_HOSTED = :openai_hosted + + # @!method self.values + # @return [Array] + end + end + end + end + end +end diff --git a/lib/openai/models/beta/environment_param.rb b/lib/openai/models/beta/environment_param.rb index a2b1cbc1e..79260f6f7 100644 --- a/lib/openai/models/beta/environment_param.rb +++ b/lib/openai/models/beta/environment_param.rb @@ -65,6 +65,13 @@ class OpenAIHosted < OpenAI::Internal::Type::BaseModel # @return [Hash{Symbol=>String}, nil] optional :env, OpenAI::Internal::Type::HashOf[String], nil?: true + # @!attribute environment_id + # An existing prewarmed environment. Cannot be combined with a template or inline + # configuration. + # + # @return [String, nil] + optional :environment_id, String + # @!attribute environment_template_id # A reusable hosted template applied before inline session configuration. Omitted # fields inherit the template; network overrides cannot broaden its policy. @@ -128,7 +135,7 @@ class OpenAIHosted < OpenAI::Internal::Type::BaseModel nil?: true ) - # @!method initialize(capability_directories: nil, container_size: nil, desktop: nil, env: nil, environment_template_id: nil, files: nil, network: nil, packages: nil, plugins: nil, setup_commands: nil, skills: nil, type: :openai_hosted) + # @!method initialize(capability_directories: nil, container_size: nil, desktop: nil, env: nil, environment_id: nil, environment_template_id: nil, files: nil, network: nil, packages: nil, plugins: nil, setup_commands: nil, skills: nil, type: :openai_hosted) # An existing OpenAI-hosted environment or new inline/template-based hosted # configuration. # @@ -146,6 +153,10 @@ class OpenAIHosted < OpenAI::Internal::Type::BaseModel # @param env [Hash{Symbol=>String}, nil] # Environment variables made available to the agent. # + # @param environment_id [String] + # An existing prewarmed environment. Cannot be combined with a template or inline + # configuration. + # # @param environment_template_id [String] # A reusable hosted template applied before inline session configuration. Omitted # fields inherit the template; network overrides cannot broaden its policy. diff --git a/lib/openai/models/webhooks/agent_environment_failed_webhook_event.rb b/lib/openai/models/webhooks/agent_environment_failed_webhook_event.rb new file mode 100644 index 000000000..ab2e2cc92 --- /dev/null +++ b/lib/openai/models/webhooks/agent_environment_failed_webhook_event.rb @@ -0,0 +1,73 @@ +# frozen_string_literal: true + +module OpenAI + module Models + module Webhooks + class AgentEnvironmentFailedWebhookEvent < OpenAI::Internal::Type::BaseModel + # @!attribute id + # The unique ID of the event. + # + # @return [String] + required :id, String + + # @!attribute created_at + # The Unix timestamp, in seconds, when the event was created. + # + # @return [Integer] + required :created_at, Integer + + # @!attribute data + # Identifies the environment whose lifecycle changed. + # + # @return [OpenAI::Models::Webhooks::AgentEnvironmentFailedWebhookEvent::Data] + required :data, -> { OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent::Data } + + # @!attribute object + # The object type. Always `event`. + # + # @return [Symbol, :event] + required :object, const: :event + + # @!attribute type + # The event type. Always `agent.environment.failed`. + # + # @return [Symbol, :"agent.environment.failed"] + required :type, const: :"agent.environment.failed" + + # @!method initialize(id:, created_at:, data:, object: :event, type: :"agent.environment.failed") + # Sent when setup fails for a prewarmed OpenAI-hosted environment before it is + # attached to a session. + # + # @param id [String] + # The unique ID of the event. + # + # @param created_at [Integer] + # The Unix timestamp, in seconds, when the event was created. + # + # @param data [OpenAI::Models::Webhooks::AgentEnvironmentFailedWebhookEvent::Data] + # Identifies the environment whose lifecycle changed. + # + # @param object [Symbol, :event] + # The object type. Always `event`. + # + # @param type [Symbol, :"agent.environment.failed"] + # The event type. Always `agent.environment.failed`. + + # @see OpenAI::Models::Webhooks::AgentEnvironmentFailedWebhookEvent#data + class Data < OpenAI::Internal::Type::BaseModel + # @!attribute id + # The ID of the environment. + # + # @return [String] + required :id, String + + # @!method initialize(id:) + # Identifies the environment whose lifecycle changed. + # + # @param id [String] + # The ID of the environment. + end + end + end + end +end diff --git a/lib/openai/models/webhooks/agent_environment_ready_webhook_event.rb b/lib/openai/models/webhooks/agent_environment_ready_webhook_event.rb new file mode 100644 index 000000000..5b7fb71b3 --- /dev/null +++ b/lib/openai/models/webhooks/agent_environment_ready_webhook_event.rb @@ -0,0 +1,73 @@ +# frozen_string_literal: true + +module OpenAI + module Models + module Webhooks + class AgentEnvironmentReadyWebhookEvent < OpenAI::Internal::Type::BaseModel + # @!attribute id + # The unique ID of the event. + # + # @return [String] + required :id, String + + # @!attribute created_at + # The Unix timestamp, in seconds, when the event was created. + # + # @return [Integer] + required :created_at, Integer + + # @!attribute data + # Identifies the environment whose lifecycle changed. + # + # @return [OpenAI::Models::Webhooks::AgentEnvironmentReadyWebhookEvent::Data] + required :data, -> { OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent::Data } + + # @!attribute object + # The object type. Always `event`. + # + # @return [Symbol, :event] + required :object, const: :event + + # @!attribute type + # The event type. Always `agent.environment.ready`. + # + # @return [Symbol, :"agent.environment.ready"] + required :type, const: :"agent.environment.ready" + + # @!method initialize(id:, created_at:, data:, object: :event, type: :"agent.environment.ready") + # Sent when a prewarmed OpenAI-hosted environment finishes setup before being + # attached to a session. + # + # @param id [String] + # The unique ID of the event. + # + # @param created_at [Integer] + # The Unix timestamp, in seconds, when the event was created. + # + # @param data [OpenAI::Models::Webhooks::AgentEnvironmentReadyWebhookEvent::Data] + # Identifies the environment whose lifecycle changed. + # + # @param object [Symbol, :event] + # The object type. Always `event`. + # + # @param type [Symbol, :"agent.environment.ready"] + # The event type. Always `agent.environment.ready`. + + # @see OpenAI::Models::Webhooks::AgentEnvironmentReadyWebhookEvent#data + class Data < OpenAI::Internal::Type::BaseModel + # @!attribute id + # The ID of the environment. + # + # @return [String] + required :id, String + + # @!method initialize(id:) + # Identifies the environment whose lifecycle changed. + # + # @param id [String] + # The ID of the environment. + end + end + end + end +end diff --git a/lib/openai/models/webhooks/unwrap_webhook_event.rb b/lib/openai/models/webhooks/unwrap_webhook_event.rb index 32b935ebd..5f2b05b39 100644 --- a/lib/openai/models/webhooks/unwrap_webhook_event.rb +++ b/lib/openai/models/webhooks/unwrap_webhook_event.rb @@ -3,13 +3,19 @@ module OpenAI module Models module Webhooks - # Sent when an agent session requires an action. Retrieve the session for action - # details. + # Sent when setup fails for a prewarmed OpenAI-hosted environment before it is + # attached to a session. module UnwrapWebhookEvent extend OpenAI::Internal::Type::Union discriminator :type + # Sent when setup fails for a prewarmed OpenAI-hosted environment before it is attached to a session. + variant :"agent.environment.failed", -> { OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent } + + # Sent when a prewarmed OpenAI-hosted environment finishes setup before being attached to a session. + variant :"agent.environment.ready", -> { OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent } + # Sent when an agent session requires an action. Retrieve the session for action details. variant :"agent.session.action_required", -> { OpenAI::Webhooks::AgentSessionActionRequiredWebhookEvent } @@ -97,7 +103,7 @@ module UnwrapWebhookEvent variant :"safety.warning_issued", -> { OpenAI::Webhooks::SafetyWarningIssuedWebhookEvent } # @!method self.variants - # @return [Array(OpenAI::Models::Webhooks::AgentSessionActionRequiredWebhookEvent, OpenAI::Models::Webhooks::AgentSessionCreatedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionFailedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionIdleWebhookEvent, OpenAI::Models::Webhooks::AgentSessionInProgressWebhookEvent, OpenAI::Models::Webhooks::BatchCancelledWebhookEvent, OpenAI::Models::Webhooks::BatchCompletedWebhookEvent, OpenAI::Models::Webhooks::BatchExpiredWebhookEvent, OpenAI::Models::Webhooks::BatchFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunCanceledWebhookEvent, OpenAI::Models::Webhooks::EvalRunFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunSucceededWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobCancelledWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobFailedWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobSucceededWebhookEvent, OpenAI::Models::Webhooks::LiveCallIncomingWebhookEvent, OpenAI::Models::Webhooks::LiveTransportIncomingWebhookEvent, OpenAI::Models::Webhooks::RealtimeCallIncomingWebhookEvent, OpenAI::Models::Webhooks::ResponseCancelledWebhookEvent, OpenAI::Models::Webhooks::ResponseCompletedWebhookEvent, OpenAI::Models::Webhooks::ResponseFailedWebhookEvent, OpenAI::Models::Webhooks::ResponseIncompleteWebhookEvent, OpenAI::Models::Webhooks::SafetyAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyDeactivationIssuedWebhookEvent, OpenAI::Models::Webhooks::SafetyOrgAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyWarningIssuedWebhookEvent)] + # @return [Array(OpenAI::Models::Webhooks::AgentEnvironmentFailedWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentReadyWebhookEvent, OpenAI::Models::Webhooks::AgentSessionActionRequiredWebhookEvent, OpenAI::Models::Webhooks::AgentSessionCreatedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionFailedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionIdleWebhookEvent, OpenAI::Models::Webhooks::AgentSessionInProgressWebhookEvent, OpenAI::Models::Webhooks::BatchCancelledWebhookEvent, OpenAI::Models::Webhooks::BatchCompletedWebhookEvent, OpenAI::Models::Webhooks::BatchExpiredWebhookEvent, OpenAI::Models::Webhooks::BatchFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunCanceledWebhookEvent, OpenAI::Models::Webhooks::EvalRunFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunSucceededWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobCancelledWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobFailedWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobSucceededWebhookEvent, OpenAI::Models::Webhooks::LiveCallIncomingWebhookEvent, OpenAI::Models::Webhooks::LiveTransportIncomingWebhookEvent, OpenAI::Models::Webhooks::RealtimeCallIncomingWebhookEvent, OpenAI::Models::Webhooks::ResponseCancelledWebhookEvent, OpenAI::Models::Webhooks::ResponseCompletedWebhookEvent, OpenAI::Models::Webhooks::ResponseFailedWebhookEvent, OpenAI::Models::Webhooks::ResponseIncompleteWebhookEvent, OpenAI::Models::Webhooks::SafetyAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyDeactivationIssuedWebhookEvent, OpenAI::Models::Webhooks::SafetyOrgAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyWarningIssuedWebhookEvent)] end end end diff --git a/lib/openai/models/webhooks/webhook_create_params.rb b/lib/openai/models/webhooks/webhook_create_params.rb index 2a4424835..cb6ee687a 100644 --- a/lib/openai/models/webhooks/webhook_create_params.rb +++ b/lib/openai/models/webhooks/webhook_create_params.rb @@ -62,6 +62,8 @@ module EventType REALTIME_CALL_INCOMING = :"realtime.call.incoming" VIDEO_COMPLETED = :"video.completed" VIDEO_FAILED = :"video.failed" + AGENT_ENVIRONMENT_READY = :"agent.environment.ready" + AGENT_ENVIRONMENT_FAILED = :"agent.environment.failed" AGENT_SESSION_CREATED = :"agent.session.created" AGENT_SESSION_ACTION_REQUIRED = :"agent.session.action_required" AGENT_SESSION_IN_PROGRESS = :"agent.session.in_progress" diff --git a/lib/openai/models/webhooks/webhook_test_params.rb b/lib/openai/models/webhooks/webhook_test_params.rb index 6834d5b32..5b395320c 100644 --- a/lib/openai/models/webhooks/webhook_test_params.rb +++ b/lib/openai/models/webhooks/webhook_test_params.rb @@ -48,6 +48,8 @@ module EventType REALTIME_CALL_INCOMING = :"realtime.call.incoming" VIDEO_COMPLETED = :"video.completed" VIDEO_FAILED = :"video.failed" + AGENT_ENVIRONMENT_READY = :"agent.environment.ready" + AGENT_ENVIRONMENT_FAILED = :"agent.environment.failed" AGENT_SESSION_CREATED = :"agent.session.created" AGENT_SESSION_ACTION_REQUIRED = :"agent.session.action_required" AGENT_SESSION_IN_PROGRESS = :"agent.session.in_progress" diff --git a/lib/openai/models/webhooks/webhook_update_params.rb b/lib/openai/models/webhooks/webhook_update_params.rb index 74a69b778..1307cf654 100644 --- a/lib/openai/models/webhooks/webhook_update_params.rb +++ b/lib/openai/models/webhooks/webhook_update_params.rb @@ -69,6 +69,8 @@ module EventType REALTIME_CALL_INCOMING = :"realtime.call.incoming" VIDEO_COMPLETED = :"video.completed" VIDEO_FAILED = :"video.failed" + AGENT_ENVIRONMENT_READY = :"agent.environment.ready" + AGENT_ENVIRONMENT_FAILED = :"agent.environment.failed" AGENT_SESSION_CREATED = :"agent.session.created" AGENT_SESSION_ACTION_REQUIRED = :"agent.session.action_required" AGENT_SESSION_IN_PROGRESS = :"agent.session.in_progress" diff --git a/lib/openai/resources/beta/agents.rb b/lib/openai/resources/beta/agents.rb index c58a15109..5d1035271 100644 --- a/lib/openai/resources/beta/agents.rb +++ b/lib/openai/resources/beta/agents.rb @@ -59,10 +59,11 @@ def create(params) @client.request( method: :post, path: "agents", + headers: {"openai-beta" => "agents=v1"}, body: parsed, model: OpenAI::Beta::Agent, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -83,9 +84,10 @@ def retrieve(agent_id, params = {}) @client.request( method: :get, path: ["agents/%1$s", agent_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::Agent, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **params[:request_options].to_h} + options: params[:request_options] ) end @@ -138,10 +140,11 @@ def update(agent_id, params = {}) @client.request( method: :post, path: ["agents/%1$s", agent_id], + headers: {"openai-beta" => "agents=v1"}, body: parsed, model: OpenAI::Beta::Agent, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -171,10 +174,11 @@ def list(params = {}) method: :get, path: "agents", query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::Agent, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -195,9 +199,10 @@ def delete(agent_id, params = {}) @client.request( method: :delete, path: ["agents/%1$s", agent_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::AgentDeleted, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **params[:request_options].to_h} + options: params[:request_options] ) end diff --git a/lib/openai/resources/beta/agents/environments.rb b/lib/openai/resources/beta/agents/environments.rb index 2b91d3c5f..a935b13b3 100644 --- a/lib/openai/resources/beta/agents/environments.rb +++ b/lib/openai/resources/beta/agents/environments.rb @@ -11,6 +11,47 @@ class Environments # @return [OpenAI::Resources::Beta::Agents::Environments::Templates] attr_reader :templates + # Creates an OpenAI-hosted environment before creating a session. Requires access + # to the prewarming beta. + # + # @overload create(environment:, vault_ids: nil, idempotency_key: nil, request_options: {}) + # + # @param environment [OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment] + # Body param: The required hosting type and its configuration. + # + # @param vault_ids [Array, nil] + # Body param: The IDs of up to 10 vaults made available to an OpenAI-hosted + # environment. + # + # @param idempotency_key [String] + # Header param: Deduplicates creation for 24 hours within the authenticated + # organization, project, and creator. Retry the same JSON parameters with the same + # key to retrieve the original environment in its current state. Different + # parameters or an incomplete hosted creation return 409. Deleted environments are + # not recreated. After retention expires, the key may create a new environment. + # Without this header, each request creates a new environment. + # + # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil] + # + # @return [OpenAI::Models::Beta::Agents::EnvironmentInfo] + # + # @see OpenAI::Models::Beta::Agents::EnvironmentCreateParams + def create(params) + parsed, options = OpenAI::Beta::Agents::EnvironmentCreateParams.dump_request(params) + header_params = {idempotency_key: "idempotency-key"} + @client.request( + method: :post, + path: "agents/environments", + headers: {"openai-beta" => "agents=v1"}.merge( + parsed.slice(*header_params.keys).transform_keys(header_params) + ), + body: parsed.except(*header_params.keys), + model: OpenAI::Beta::Agents::EnvironmentInfo, + security: {bearer_auth: true}, + options: options + ) + end + # Retrieves an execution environment's connection status and safe installed # metadata. See # [environment lifecycle](https://developers.openai.com/api/docs/guides/agents-api/environments/lifecycle). @@ -29,9 +70,47 @@ def retrieve(environment_id, params = {}) @client.request( method: :get, path: ["agents/environments/%1$s", environment_id], + headers: {"openai-beta" => "agents=v1"}, + model: OpenAI::Beta::Agents::EnvironmentInfo, + security: {bearer_auth: true}, + options: params[:request_options] + ) + end + + # Lists OpenAI-hosted environments owned by the authenticated principal. Requires + # access to the prewarming beta. + # + # @overload list(after: nil, limit: nil, order: nil, type: nil, request_options: {}) + # + # @param after [String] + # Return environments after this environment ID in the selected order. + # + # @param limit [Integer] + # The maximum number of environments to return, between 1 and 100. Defaults to 20. + # + # @param order [Symbol, OpenAI::Models::Beta::Agents::EnvironmentListParams::Order] + # The order in which environments are returned. Defaults to `desc`. + # + # @param type [Symbol, OpenAI::Models::Beta::Agents::EnvironmentListParams::Type] + # The hosting type to list. Defaults to `openai_hosted`. + # + # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil] + # + # @return [OpenAI::Internal::CursorPage] + # + # @see OpenAI::Models::Beta::Agents::EnvironmentListParams + def list(params = {}) + parsed, options = OpenAI::Beta::Agents::EnvironmentListParams.dump_request(params) + query = OpenAI::Internal::Util.encode_query_params(parsed) + @client.request( + method: :get, + path: "agents/environments", + query: query, + headers: {"openai-beta" => "agents=v1"}, + page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::Agents::EnvironmentInfo, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **params[:request_options].to_h} + options: options ) end diff --git a/lib/openai/resources/beta/agents/environments/files.rb b/lib/openai/resources/beta/agents/environments/files.rb index 33bcb2dd7..2d8ec2c99 100644 --- a/lib/openai/resources/beta/agents/environments/files.rb +++ b/lib/openai/resources/beta/agents/environments/files.rb @@ -59,10 +59,11 @@ def create(environment_id, params) @client.request( method: :post, path: ["agents/environments/%1$s/files", environment_id], + headers: {"openai-beta" => "agents=v1"}, body: parsed[:hosted_environment_file_param], model: OpenAI::Beta::Agents::Environments::EnvironmentFile, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -99,10 +100,11 @@ def list(environment_id, params = {}) method: :get, path: ["agents/environments/%1$s/files", environment_id], query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::TokenPage, model: OpenAI::Beta::Agents::Environments::EnvironmentFile, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/agents/environments/templates.rb b/lib/openai/resources/beta/agents/environments/templates.rb index 1d28ed335..74f24090a 100644 --- a/lib/openai/resources/beta/agents/environments/templates.rb +++ b/lib/openai/resources/beta/agents/environments/templates.rb @@ -56,10 +56,11 @@ def create(params = {}) @client.request( method: :post, path: "agents/environments/templates", + headers: {"openai-beta" => "agents=v1"}, body: parsed, model: OpenAI::Beta::Agents::Environments::EnvironmentTemplate, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -81,9 +82,10 @@ def retrieve(environment_template_id, params = {}) @client.request( method: :get, path: ["agents/environments/templates/%1$s", environment_template_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::Agents::Environments::EnvironmentTemplate, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **params[:request_options].to_h} + options: params[:request_options] ) end @@ -137,10 +139,11 @@ def update(environment_template_id, params = {}) @client.request( method: :post, path: ["agents/environments/templates/%1$s", environment_template_id], + headers: {"openai-beta" => "agents=v1"}, body: parsed, model: OpenAI::Beta::Agents::Environments::EnvironmentTemplate, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -170,10 +173,11 @@ def list(params = {}) method: :get, path: "agents/environments/templates", query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::Agents::Environments::EnvironmentTemplate, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -195,9 +199,10 @@ def delete(environment_template_id, params = {}) @client.request( method: :delete, path: ["agents/environments/templates/%1$s", environment_template_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::Agents::Environments::EnvironmentTemplateDeleted, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **params[:request_options].to_h} + options: params[:request_options] ) end diff --git a/lib/openai/resources/beta/agents/sessions.rb b/lib/openai/resources/beta/agents/sessions.rb index 847b16ab4..20565974b 100644 --- a/lib/openai/resources/beta/agents/sessions.rb +++ b/lib/openai/resources/beta/agents/sessions.rb @@ -71,10 +71,11 @@ def create(params) @client.request( method: :post, path: "agents/sessions", + headers: {"openai-beta" => "agents=v1"}, body: parsed, model: OpenAI::Beta::AgentSession, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -135,12 +136,16 @@ def create_streaming(params) stream = @client.request( method: :post, path: "agents/sessions", - headers: {"accept" => "text/event-stream", "accept-encoding" => "identity"}, + headers: { + "openai-beta" => "agents=v1", + "accept" => "text/event-stream", + "accept-encoding" => "identity" + }, body: parsed, stream: OpenAI::Helpers::Beta::Agents::CreationStream, model: OpenAI::Beta::AgentSessionEvent, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) if tool_handlers stream.configure_tool_handlers(sessions: self, tool_handlers: tool_handlers, request_options: options) @@ -166,9 +171,10 @@ def retrieve(session_id, params = {}) @client.request( method: :get, path: ["agents/sessions/%1$s", session_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::AgentSession, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **params[:request_options].to_h} + options: params[:request_options] ) end @@ -199,10 +205,11 @@ def update(session_id, params = {}) @client.request( method: :post, path: ["agents/sessions/%1$s", session_id], + headers: {"openai-beta" => "agents=v1"}, body: parsed, model: OpenAI::Beta::AgentSession, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -238,10 +245,11 @@ def list(params = {}) method: :get, path: "agents/sessions", query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::AgentSession, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -265,9 +273,10 @@ def delete(session_id, params = {}) @client.request( method: :delete, path: ["agents/sessions/%1$s", session_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::AgentSessionDeleted, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **params[:request_options].to_h} + options: params[:request_options] ) end diff --git a/lib/openai/resources/beta/agents/sessions/artifacts.rb b/lib/openai/resources/beta/agents/sessions/artifacts.rb index 871002a23..0b9def65b 100644 --- a/lib/openai/resources/beta/agents/sessions/artifacts.rb +++ b/lib/openai/resources/beta/agents/sessions/artifacts.rb @@ -39,9 +39,10 @@ def retrieve(artifact_id, params) @client.request( method: :get, path: ["agents/sessions/%1$s/artifacts/%2$s", session_id, artifact_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::Agents::Sessions::SessionArtifact, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -77,10 +78,11 @@ def list(session_id, params = {}) method: :get, path: ["agents/sessions/%1$s/artifacts", session_id], query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::Agents::Sessions::SessionArtifact, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -110,9 +112,10 @@ def delete(artifact_id, params) @client.request( method: :delete, path: ["agents/sessions/%1$s/artifacts/%2$s", session_id, artifact_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::Agents::Sessions::SessionArtifactDeleted, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -142,10 +145,10 @@ def content(artifact_id, params) @client.request( method: :get, path: ["agents/sessions/%1$s/artifacts/%2$s/content", session_id, artifact_id], - headers: {"accept" => "application/octet-stream"}, + headers: {"openai-beta" => "agents=v1", "accept" => "application/octet-stream"}, model: StringIO, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/agents/sessions/events.rb b/lib/openai/resources/beta/agents/sessions/events.rb index cd37f91e3..72522927a 100644 --- a/lib/openai/resources/beta/agents/sessions/events.rb +++ b/lib/openai/resources/beta/agents/sessions/events.rb @@ -37,11 +37,13 @@ def create(session_id, params) @client.request( method: :post, path: ["agents/sessions/%1$s/events", session_id], - headers: parsed.slice(*header_params.keys).transform_keys(header_params), + headers: {"openai-beta" => "agents=v1"}.merge( + parsed.slice(*header_params.keys).transform_keys(header_params) + ), body: parsed.except(*header_params.keys), model: NilClass, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -62,11 +64,15 @@ def stream_streaming(session_id, params = {}) @client.request( method: :get, path: ["agents/sessions/%1$s/events", session_id], - headers: {"accept" => "text/event-stream", "accept-encoding" => "identity"}, + headers: { + "openai-beta" => "agents=v1", + "accept" => "text/event-stream", + "accept-encoding" => "identity" + }, stream: OpenAI::Internal::Stream, model: OpenAI::Beta::AgentSessionEvent, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **params[:request_options].to_h} + options: params[:request_options] ) end diff --git a/lib/openai/resources/beta/agents/sessions/items.rb b/lib/openai/resources/beta/agents/sessions/items.rb index c2fd30c8b..c512f1294 100644 --- a/lib/openai/resources/beta/agents/sessions/items.rb +++ b/lib/openai/resources/beta/agents/sessions/items.rb @@ -36,10 +36,11 @@ def list(session_id, params = {}) method: :get, path: ["agents/sessions/%1$s/items", session_id], query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::AgentSessionItem, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/agents/sessions/subagents.rb b/lib/openai/resources/beta/agents/sessions/subagents.rb index d6e2694ab..1dc10e9bb 100644 --- a/lib/openai/resources/beta/agents/sessions/subagents.rb +++ b/lib/openai/resources/beta/agents/sessions/subagents.rb @@ -37,9 +37,10 @@ def retrieve(subagent_id, params) @client.request( method: :get, path: ["agents/sessions/%1$s/subagents/%2$s", session_id, subagent_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::Subagent, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -72,10 +73,11 @@ def list(session_id, params = {}) method: :get, path: ["agents/sessions/%1$s/subagents", session_id], query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::Subagent, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/agents/sessions/subagents/items.rb b/lib/openai/resources/beta/agents/sessions/subagents/items.rb index 7406ef962..d5c75218e 100644 --- a/lib/openai/resources/beta/agents/sessions/subagents/items.rb +++ b/lib/openai/resources/beta/agents/sessions/subagents/items.rb @@ -44,10 +44,11 @@ def list(subagent_id, params) method: :get, path: ["agents/sessions/%1$s/subagents/%2$s/items", session_id, subagent_id], query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::AgentSessionItem, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/agents/sessions/subagents/turns.rb b/lib/openai/resources/beta/agents/sessions/subagents/turns.rb index 9eb5086bb..c920d070b 100644 --- a/lib/openai/resources/beta/agents/sessions/subagents/turns.rb +++ b/lib/openai/resources/beta/agents/sessions/subagents/turns.rb @@ -42,9 +42,10 @@ def retrieve(turn_id, params) @client.request( method: :get, path: ["agents/sessions/%1$s/subagents/%2$s/turns/%3$s", session_id, subagent_id, turn_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::Agents::Sessions::Turn, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -85,10 +86,11 @@ def list(subagent_id, params) method: :get, path: ["agents/sessions/%1$s/subagents/%2$s/turns", session_id, subagent_id], query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::Agents::Sessions::Turn, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/agents/sessions/subagents/turns/items.rb b/lib/openai/resources/beta/agents/sessions/subagents/turns/items.rb index a2de18359..30f977b94 100644 --- a/lib/openai/resources/beta/agents/sessions/subagents/turns/items.rb +++ b/lib/openai/resources/beta/agents/sessions/subagents/turns/items.rb @@ -59,10 +59,11 @@ def list(turn_id, params) turn_id ], query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::AgentSessionItem, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/agents/sessions/traces.rb b/lib/openai/resources/beta/agents/sessions/traces.rb index cef811d24..3b4242518 100644 --- a/lib/openai/resources/beta/agents/sessions/traces.rb +++ b/lib/openai/resources/beta/agents/sessions/traces.rb @@ -37,10 +37,11 @@ def list(session_id, params = {}) method: :get, path: ["agents/sessions/%1$s/traces", session_id], query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::Agents::Sessions::SessionTrace, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/agents/sessions/turns.rb b/lib/openai/resources/beta/agents/sessions/turns.rb index 75e27b2a8..0974cb0a4 100644 --- a/lib/openai/resources/beta/agents/sessions/turns.rb +++ b/lib/openai/resources/beta/agents/sessions/turns.rb @@ -35,9 +35,10 @@ def retrieve(turn_id, params) @client.request( method: :get, path: ["agents/sessions/%1$s/turns/%2$s", session_id, turn_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::Agents::Sessions::Turn, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -71,10 +72,11 @@ def list(session_id, params = {}) method: :get, path: ["agents/sessions/%1$s/turns", session_id], query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::Agents::Sessions::Turn, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/agents/sessions/turns/items.rb b/lib/openai/resources/beta/agents/sessions/turns/items.rb index d3ada2fca..300f0b284 100644 --- a/lib/openai/resources/beta/agents/sessions/turns/items.rb +++ b/lib/openai/resources/beta/agents/sessions/turns/items.rb @@ -46,10 +46,11 @@ def list(turn_id, params) method: :get, path: ["agents/sessions/%1$s/turns/%2$s/items", session_id, turn_id], query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::ConversationCursorPage, model: OpenAI::Beta::AgentSessionItem, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/agents/vaults.rb b/lib/openai/resources/beta/agents/vaults.rb index 9520c9c7e..d10473e9a 100644 --- a/lib/openai/resources/beta/agents/vaults.rb +++ b/lib/openai/resources/beta/agents/vaults.rb @@ -31,10 +31,11 @@ def create(params = {}) @client.request( method: :post, path: "vaults", + headers: {"openai-beta" => "agents=v1"}, body: parsed, model: OpenAI::Beta::Agents::Vault, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -55,9 +56,10 @@ def retrieve(vault_id, params = {}) @client.request( method: :get, path: ["vaults/%1$s", vault_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::Agents::Vault, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **params[:request_options].to_h} + options: params[:request_options] ) end @@ -93,10 +95,11 @@ def list(params = {}) method: :get, path: "vaults", query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::Agents::Vault, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -117,9 +120,10 @@ def delete(vault_id, params = {}) @client.request( method: :delete, path: ["vaults/%1$s", vault_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::Agents::VaultDeleted, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **params[:request_options].to_h} + options: params[:request_options] ) end diff --git a/lib/openai/resources/beta/agents/vaults/credentials.rb b/lib/openai/resources/beta/agents/vaults/credentials.rb index 9ebe24625..2b3d04c5a 100644 --- a/lib/openai/resources/beta/agents/vaults/credentials.rb +++ b/lib/openai/resources/beta/agents/vaults/credentials.rb @@ -36,10 +36,11 @@ def create(vault_id, params) @client.request( method: :post, path: ["vaults/%1$s/credentials", vault_id], + headers: {"openai-beta" => "agents=v1"}, body: parsed, model: OpenAI::Beta::Agents::Vaults::Credential, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -68,9 +69,10 @@ def retrieve(credential_id, params) @client.request( method: :get, path: ["vaults/%1$s/credentials/%2$s", vault_id, credential_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::Agents::Vaults::Credential, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -108,10 +110,11 @@ def update(credential_id, params) @client.request( method: :post, path: ["vaults/%1$s/credentials/%2$s", vault_id, credential_id], + headers: {"openai-beta" => "agents=v1"}, body: parsed, model: OpenAI::Beta::Agents::Vaults::Credential, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -151,10 +154,11 @@ def list(vault_id, params = {}) method: :get, path: ["vaults/%1$s/credentials", vault_id], query: query, + headers: {"openai-beta" => "agents=v1"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::Agents::Vaults::Credential, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end @@ -183,9 +187,10 @@ def delete(credential_id, params) @client.request( method: :delete, path: ["vaults/%1$s/credentials/%2$s", vault_id, credential_id], + headers: {"openai-beta" => "agents=v1"}, model: OpenAI::Beta::Agents::Vaults::CredentialDeleted, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/assistants.rb b/lib/openai/resources/beta/assistants.rb index 922a894b0..173e06786 100644 --- a/lib/openai/resources/beta/assistants.rb +++ b/lib/openai/resources/beta/assistants.rb @@ -99,10 +99,11 @@ def create(params) @client.request( method: :post, path: "assistants", + headers: {"openai-beta" => "assistants=v2"}, body: parsed, model: OpenAI::Beta::Assistant, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -124,9 +125,10 @@ def retrieve(assistant_id, params = {}) @client.request( method: :get, path: ["assistants/%1$s", assistant_id], + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::Beta::Assistant, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **params[:request_options].to_h} + options: params[:request_options] ) end @@ -227,10 +229,11 @@ def update(assistant_id, params = {}) @client.request( method: :post, path: ["assistants/%1$s", assistant_id], + headers: {"openai-beta" => "assistants=v2"}, body: parsed, model: OpenAI::Beta::Assistant, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -272,10 +275,11 @@ def list(params = {}) method: :get, path: "assistants", query: query, + headers: {"openai-beta" => "assistants=v2"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::Assistant, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -297,9 +301,10 @@ def delete(assistant_id, params = {}) @client.request( method: :delete, path: ["assistants/%1$s", assistant_id], + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::Beta::AssistantDeleted, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **params[:request_options].to_h} + options: params[:request_options] ) end diff --git a/lib/openai/resources/beta/chatkit/sessions.rb b/lib/openai/resources/beta/chatkit/sessions.rb index fe4facfb2..1be98b6ac 100644 --- a/lib/openai/resources/beta/chatkit/sessions.rb +++ b/lib/openai/resources/beta/chatkit/sessions.rb @@ -36,10 +36,11 @@ def create(params) @client.request( method: :post, path: "chatkit/sessions", + headers: {"openai-beta" => "chatkit_beta=v1"}, body: parsed, model: OpenAI::Beta::ChatKit::ChatSession, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "chatkit_beta=v1"}, **options} + options: options ) end @@ -61,9 +62,10 @@ def cancel(session_id, params = {}) @client.request( method: :post, path: ["chatkit/sessions/%1$s/cancel", session_id], + headers: {"openai-beta" => "chatkit_beta=v1"}, model: OpenAI::Beta::ChatKit::ChatSession, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "chatkit_beta=v1"}, **params[:request_options].to_h} + options: params[:request_options] ) end diff --git a/lib/openai/resources/beta/chatkit/threads.rb b/lib/openai/resources/beta/chatkit/threads.rb index fcd697ba3..e1b9abf76 100644 --- a/lib/openai/resources/beta/chatkit/threads.rb +++ b/lib/openai/resources/beta/chatkit/threads.rb @@ -21,9 +21,10 @@ def retrieve(thread_id, params = {}) @client.request( method: :get, path: ["chatkit/threads/%1$s", thread_id], + headers: {"openai-beta" => "chatkit_beta=v1"}, model: OpenAI::Beta::ChatKit::ChatKitThread, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "chatkit_beta=v1"}, **params[:request_options].to_h} + options: params[:request_options] ) end @@ -61,10 +62,11 @@ def list(params = {}) method: :get, path: "chatkit/threads", query: query, + headers: {"openai-beta" => "chatkit_beta=v1"}, page: OpenAI::Internal::ConversationCursorPage, model: OpenAI::Beta::ChatKit::ChatKitThread, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "chatkit_beta=v1"}, **options} + options: options ) end @@ -84,9 +86,10 @@ def delete(thread_id, params = {}) @client.request( method: :delete, path: ["chatkit/threads/%1$s", thread_id], + headers: {"openai-beta" => "chatkit_beta=v1"}, model: OpenAI::Models::Beta::ChatKit::ThreadDeleteResponse, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "chatkit_beta=v1"}, **params[:request_options].to_h} + options: params[:request_options] ) end @@ -123,10 +126,11 @@ def list_items(thread_id, params = {}) method: :get, path: ["chatkit/threads/%1$s/items", thread_id], query: query, + headers: {"openai-beta" => "chatkit_beta=v1"}, page: OpenAI::Internal::ConversationCursorPage, model: OpenAI::Beta::ChatKit::ChatKitThreadItemList::Data, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "chatkit_beta=v1"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/threads.rb b/lib/openai/resources/beta/threads.rb index f42729698..342f46c1f 100644 --- a/lib/openai/resources/beta/threads.rb +++ b/lib/openai/resources/beta/threads.rb @@ -50,10 +50,11 @@ def create(params = {}) @client.request( method: :post, path: "threads", + headers: {"openai-beta" => "assistants=v2"}, body: parsed, model: OpenAI::Beta::Thread, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -75,9 +76,10 @@ def retrieve(thread_id, params = {}) @client.request( method: :get, path: ["threads/%1$s", thread_id], + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::Beta::Thread, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **params[:request_options].to_h} + options: params[:request_options] ) end @@ -114,10 +116,11 @@ def update(thread_id, params = {}) @client.request( method: :post, path: ["threads/%1$s", thread_id], + headers: {"openai-beta" => "assistants=v2"}, body: parsed, model: OpenAI::Beta::Thread, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -139,9 +142,10 @@ def delete(thread_id, params = {}) @client.request( method: :delete, path: ["threads/%1$s", thread_id], + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::Beta::ThreadDeleted, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **params[:request_options].to_h} + options: params[:request_options] ) end @@ -272,10 +276,11 @@ def create_and_run(params) @client.request( method: :post, path: "threads/runs", + headers: {"openai-beta" => "assistants=v2"}, body: parsed, model: OpenAI::Beta::Threads::Run, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -412,12 +417,16 @@ def stream_raw(params) @client.request( method: :post, path: "threads/runs", - headers: {"accept" => "text/event-stream", "accept-encoding" => "identity"}, + headers: { + "openai-beta" => "assistants=v2", + "accept" => "text/event-stream", + "accept-encoding" => "identity" + }, body: parsed, stream: OpenAI::Internal::Stream, model: OpenAI::Beta::AssistantStreamEvent, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/threads/messages.rb b/lib/openai/resources/beta/threads/messages.rb index 918de037f..013e60404 100644 --- a/lib/openai/resources/beta/threads/messages.rb +++ b/lib/openai/resources/beta/threads/messages.rb @@ -51,10 +51,11 @@ def create(thread_id, params) @client.request( method: :post, path: ["threads/%1$s/messages", thread_id], + headers: {"openai-beta" => "assistants=v2"}, body: parsed, model: OpenAI::Beta::Threads::Message, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -86,9 +87,10 @@ def retrieve(message_id, params) @client.request( method: :get, path: ["threads/%1$s/messages/%2$s", thread_id, message_id], + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::Beta::Threads::Message, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -126,10 +128,11 @@ def update(message_id, params) @client.request( method: :post, path: ["threads/%1$s/messages/%2$s", thread_id, message_id], + headers: {"openai-beta" => "assistants=v2"}, body: parsed, model: OpenAI::Beta::Threads::Message, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -179,10 +182,11 @@ def list(thread_id, params = {}) method: :get, path: ["threads/%1$s/messages", thread_id], query: query, + headers: {"openai-beta" => "assistants=v2"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::Threads::Message, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -212,9 +216,10 @@ def delete(message_id, params) @client.request( method: :delete, path: ["threads/%1$s/messages/%2$s", thread_id, message_id], + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::Beta::Threads::MessageDeleted, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/threads/runs.rb b/lib/openai/resources/beta/threads/runs.rb index 2427588b0..2aa3cc1b8 100644 --- a/lib/openai/resources/beta/threads/runs.rb +++ b/lib/openai/resources/beta/threads/runs.rb @@ -166,10 +166,11 @@ def create(thread_id, params) method: :post, path: ["threads/%1$s/runs", thread_id], query: query, + headers: {"openai-beta" => "assistants=v2"}, body: parsed.except(*query_params), model: OpenAI::Beta::Threads::Run, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -328,12 +329,16 @@ def create_stream_raw(thread_id, params) method: :post, path: ["threads/%1$s/runs", thread_id], query: query, - headers: {"accept" => "text/event-stream", "accept-encoding" => "identity"}, + headers: { + "openai-beta" => "assistants=v2", + "accept" => "text/event-stream", + "accept-encoding" => "identity" + }, body: parsed.except(*query_params), stream: OpenAI::Internal::Stream, model: OpenAI::Beta::AssistantStreamEvent, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -365,9 +370,10 @@ def retrieve(run_id, params) @client.request( method: :get, path: ["threads/%1$s/runs/%2$s", thread_id, run_id], + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::Beta::Threads::Run, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -407,10 +413,11 @@ def update(run_id, params) @client.request( method: :post, path: ["threads/%1$s/runs/%2$s", thread_id, run_id], + headers: {"openai-beta" => "assistants=v2"}, body: parsed, model: OpenAI::Beta::Threads::Run, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -455,10 +462,11 @@ def list(thread_id, params = {}) method: :get, path: ["threads/%1$s/runs", thread_id], query: query, + headers: {"openai-beta" => "assistants=v2"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::Threads::Run, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -488,9 +496,10 @@ def cancel(run_id, params) @client.request( method: :post, path: ["threads/%1$s/runs/%2$s/cancel", thread_id, run_id], + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::Beta::Threads::Run, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -536,10 +545,11 @@ def submit_tool_outputs(run_id, params) @client.request( method: :post, path: ["threads/%1$s/runs/%2$s/submit_tool_outputs", thread_id, run_id], + headers: {"openai-beta" => "assistants=v2"}, body: parsed, model: OpenAI::Beta::Threads::Run, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -586,12 +596,16 @@ def submit_tool_outputs_stream_raw(run_id, params) @client.request( method: :post, path: ["threads/%1$s/runs/%2$s/submit_tool_outputs", thread_id, run_id], - headers: {"accept" => "text/event-stream", "accept-encoding" => "identity"}, + headers: { + "openai-beta" => "assistants=v2", + "accept" => "text/event-stream", + "accept-encoding" => "identity" + }, body: parsed, stream: OpenAI::Internal::Stream, model: OpenAI::Beta::AssistantStreamEvent, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end diff --git a/lib/openai/resources/beta/threads/runs/steps.rb b/lib/openai/resources/beta/threads/runs/steps.rb index acdfce324..ea6a0d145 100644 --- a/lib/openai/resources/beta/threads/runs/steps.rb +++ b/lib/openai/resources/beta/threads/runs/steps.rb @@ -54,9 +54,10 @@ def retrieve(step_id, params) method: :get, path: ["threads/%1$s/runs/%2$s/steps/%3$s", thread_id, run_id, step_id], query: query, + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::Beta::Threads::Runs::RunStep, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -118,10 +119,11 @@ def list(run_id, params) method: :get, path: ["threads/%1$s/runs/%2$s/steps", thread_id, run_id], query: query, + headers: {"openai-beta" => "assistants=v2"}, page: OpenAI::Internal::CursorPage, model: OpenAI::Beta::Threads::Runs::RunStep, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end diff --git a/lib/openai/resources/vector_stores.rb b/lib/openai/resources/vector_stores.rb index 95ec548e6..d3d33990d 100644 --- a/lib/openai/resources/vector_stores.rb +++ b/lib/openai/resources/vector_stores.rb @@ -50,10 +50,11 @@ def create(params = {}) @client.request( method: :post, path: "vector_stores", + headers: {"openai-beta" => "assistants=v2"}, body: parsed, model: OpenAI::VectorStore, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -73,9 +74,10 @@ def retrieve(vector_store_id, params = {}) @client.request( method: :get, path: ["vector_stores/%1$s", vector_store_id], + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::VectorStore, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **params[:request_options].to_h} + options: params[:request_options] ) end @@ -110,10 +112,11 @@ def update(vector_store_id, params = {}) @client.request( method: :post, path: ["vector_stores/%1$s", vector_store_id], + headers: {"openai-beta" => "assistants=v2"}, body: parsed, model: OpenAI::VectorStore, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -153,10 +156,11 @@ def list(params = {}) method: :get, path: "vector_stores", query: query, + headers: {"openai-beta" => "assistants=v2"}, page: OpenAI::Internal::CursorPage, model: OpenAI::VectorStore, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -176,9 +180,10 @@ def delete(vector_store_id, params = {}) @client.request( method: :delete, path: ["vector_stores/%1$s", vector_store_id], + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::VectorStoreDeleted, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **params[:request_options].to_h} + options: params[:request_options] ) end @@ -216,11 +221,12 @@ def search(vector_store_id, params) @client.request( method: :post, path: ["vector_stores/%1$s/search", vector_store_id], + headers: {"openai-beta" => "assistants=v2"}, body: parsed, page: OpenAI::Internal::Page, model: OpenAI::Models::VectorStoreSearchResponse, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end diff --git a/lib/openai/resources/vector_stores/file_batches.rb b/lib/openai/resources/vector_stores/file_batches.rb index b154761db..28143e893 100644 --- a/lib/openai/resources/vector_stores/file_batches.rb +++ b/lib/openai/resources/vector_stores/file_batches.rb @@ -50,16 +50,11 @@ def create(vector_store_id, params = {}) @client.request( method: :post, path: ["vector_stores/%1$s/file_batches", vector_store_id], + headers: {"openai-beta" => "assistants=v2"}, body: parsed, model: OpenAI::VectorStores::VectorStoreFileBatch, security: {bearer_auth: true}, - options: { - **options, - extra_headers: OpenAI::Internal::Util.normalized_headers( - {"OpenAI-Beta" => "assistants=v2"}, - options[:extra_headers].to_h - ) - } + options: options ) end @@ -144,9 +139,10 @@ def retrieve(batch_id, params) @client.request( method: :get, path: ["vector_stores/%1$s/file_batches/%2$s", vector_store_id, batch_id], + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::VectorStores::VectorStoreFileBatch, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -175,9 +171,10 @@ def cancel(batch_id, params) @client.request( method: :post, path: ["vector_stores/%1$s/file_batches/%2$s/cancel", vector_store_id, batch_id], + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::VectorStores::VectorStoreFileBatch, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -231,10 +228,11 @@ def list_files(batch_id, params) method: :get, path: ["vector_stores/%1$s/file_batches/%2$s/files", vector_store_id, batch_id], query: query, + headers: {"openai-beta" => "assistants=v2"}, page: OpenAI::Internal::CursorPage, model: OpenAI::VectorStores::VectorStoreFile, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end diff --git a/lib/openai/resources/vector_stores/files.rb b/lib/openai/resources/vector_stores/files.rb index ef4b58771..fe7a5c10f 100644 --- a/lib/openai/resources/vector_stores/files.rb +++ b/lib/openai/resources/vector_stores/files.rb @@ -43,16 +43,11 @@ def create(vector_store_id, params) @client.request( method: :post, path: ["vector_stores/%1$s/files", vector_store_id], + headers: {"openai-beta" => "assistants=v2"}, body: parsed, model: OpenAI::VectorStores::VectorStoreFile, security: {bearer_auth: true}, - options: { - **options, - extra_headers: OpenAI::Internal::Util.normalized_headers( - {"OpenAI-Beta" => "assistants=v2"}, - options[:extra_headers].to_h - ) - } + options: options ) end @@ -132,9 +127,10 @@ def retrieve(file_id, params) @client.request( method: :get, path: ["vector_stores/%1$s/files/%2$s", vector_store_id, file_id], + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::VectorStores::VectorStoreFile, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -169,10 +165,11 @@ def update(file_id, params) @client.request( method: :post, path: ["vector_stores/%1$s/files/%2$s", vector_store_id, file_id], + headers: {"openai-beta" => "assistants=v2"}, body: parsed, model: OpenAI::VectorStores::VectorStoreFile, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -218,10 +215,11 @@ def list(vector_store_id, params = {}) method: :get, path: ["vector_stores/%1$s/files", vector_store_id], query: query, + headers: {"openai-beta" => "assistants=v2"}, page: OpenAI::Internal::CursorPage, model: OpenAI::VectorStores::VectorStoreFile, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -252,9 +250,10 @@ def delete(file_id, params) @client.request( method: :delete, path: ["vector_stores/%1$s/files/%2$s", vector_store_id, file_id], + headers: {"openai-beta" => "assistants=v2"}, model: OpenAI::VectorStores::VectorStoreFileDeleted, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end @@ -416,10 +415,11 @@ def content(file_id, params) @client.request( method: :get, path: ["vector_stores/%1$s/files/%2$s/content", vector_store_id, file_id], + headers: {"openai-beta" => "assistants=v2"}, page: OpenAI::Internal::Page, model: OpenAI::Models::VectorStores::FileContentResponse, security: {bearer_auth: true}, - options: {extra_headers: {"OpenAI-Beta" => "assistants=v2"}, **options} + options: options ) end diff --git a/lib/openai/resources/webhooks.rb b/lib/openai/resources/webhooks.rb index 02dfc6e03..eb16d2e93 100644 --- a/lib/openai/resources/webhooks.rb +++ b/lib/openai/resources/webhooks.rb @@ -203,7 +203,7 @@ def test_(webhook_endpoint_id, params) # @param headers [Hash] The webhook headers # @param webhook_secret [String, nil] The webhook secret (optional, will use client webhook secret or ENV["OPENAI_WEBHOOK_SECRET"] if not provided) # - # @return [OpenAI::Models::Webhooks::AgentSessionActionRequiredWebhookEvent, OpenAI::Models::Webhooks::AgentSessionCreatedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionFailedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionIdleWebhookEvent, OpenAI::Models::Webhooks::AgentSessionInProgressWebhookEvent, OpenAI::Models::Webhooks::BatchCancelledWebhookEvent, OpenAI::Models::Webhooks::BatchCompletedWebhookEvent, OpenAI::Models::Webhooks::BatchExpiredWebhookEvent, OpenAI::Models::Webhooks::BatchFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunCanceledWebhookEvent, OpenAI::Models::Webhooks::EvalRunFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunSucceededWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobCancelledWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobFailedWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobSucceededWebhookEvent, OpenAI::Models::Webhooks::LiveCallIncomingWebhookEvent, OpenAI::Models::Webhooks::LiveTransportIncomingWebhookEvent, OpenAI::Models::Webhooks::RealtimeCallIncomingWebhookEvent, OpenAI::Models::Webhooks::ResponseCancelledWebhookEvent, OpenAI::Models::Webhooks::ResponseCompletedWebhookEvent, OpenAI::Models::Webhooks::ResponseFailedWebhookEvent, OpenAI::Models::Webhooks::ResponseIncompleteWebhookEvent, OpenAI::Models::Webhooks::SafetyAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyDeactivationIssuedWebhookEvent, OpenAI::Models::Webhooks::SafetyOrgAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyWarningIssuedWebhookEvent] + # @return [OpenAI::Models::Webhooks::AgentEnvironmentFailedWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentReadyWebhookEvent, OpenAI::Models::Webhooks::AgentSessionActionRequiredWebhookEvent, OpenAI::Models::Webhooks::AgentSessionCreatedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionFailedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionIdleWebhookEvent, OpenAI::Models::Webhooks::AgentSessionInProgressWebhookEvent, OpenAI::Models::Webhooks::BatchCancelledWebhookEvent, OpenAI::Models::Webhooks::BatchCompletedWebhookEvent, OpenAI::Models::Webhooks::BatchExpiredWebhookEvent, OpenAI::Models::Webhooks::BatchFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunCanceledWebhookEvent, OpenAI::Models::Webhooks::EvalRunFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunSucceededWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobCancelledWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobFailedWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobSucceededWebhookEvent, OpenAI::Models::Webhooks::LiveCallIncomingWebhookEvent, OpenAI::Models::Webhooks::LiveTransportIncomingWebhookEvent, OpenAI::Models::Webhooks::RealtimeCallIncomingWebhookEvent, OpenAI::Models::Webhooks::ResponseCancelledWebhookEvent, OpenAI::Models::Webhooks::ResponseCompletedWebhookEvent, OpenAI::Models::Webhooks::ResponseFailedWebhookEvent, OpenAI::Models::Webhooks::ResponseIncompleteWebhookEvent, OpenAI::Models::Webhooks::SafetyAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyDeactivationIssuedWebhookEvent, OpenAI::Models::Webhooks::SafetyOrgAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyWarningIssuedWebhookEvent] # # @raise [ArgumentError] if signature verification fails def unwrap( diff --git a/rbi/openai/models/beta/agents/environment_create_params.rbi b/rbi/openai/models/beta/agents/environment_create_params.rbi new file mode 100644 index 000000000..3bd5c3e75 --- /dev/null +++ b/rbi/openai/models/beta/agents/environment_create_params.rbi @@ -0,0 +1,499 @@ +# typed: strong + +module OpenAI + module Models + + module Beta + + module Agents + + class EnvironmentCreateParams < OpenAI::Internal::Type::BaseModel + + extend OpenAI::Internal::Type::RequestParameters::Converter + include OpenAI::Internal::Type::RequestParameters + + OrHash = T.type_alias do + T.any( + OpenAI::Beta::Agents::EnvironmentCreateParams, + OpenAI::Internal::AnyHash + ) + end + + # The required hosting type and its configuration. + sig { returns(OpenAI::Beta::Agents::EnvironmentCreateParams::Environment) } + attr_reader :environment + + sig { params(environment: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::OrHash).void } + attr_writer :environment + + # The IDs of up to 10 vaults made available to an OpenAI-hosted environment. + sig { returns(T.nilable(T::Array[String])) } + attr_accessor :vault_ids + + sig { returns(T.nilable(String)) } + attr_reader :idempotency_key + + sig { params(idempotency_key: String).void } + attr_writer :idempotency_key + + sig do + params( + + environment: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::OrHash, + + vault_ids: T.nilable(T::Array[String]), + + idempotency_key: String, + + request_options: OpenAI::RequestOptions::OrHash + ) + .returns(T.attached_class) + end + def self.new( + + # The required hosting type and its configuration. + environment:, + + # The IDs of up to 10 vaults made available to an OpenAI-hosted environment. + vault_ids: nil, + + idempotency_key: nil, + + request_options: {} + ) + end + + sig do + override.returns( + { + environment: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment, + vault_ids: T.nilable(T::Array[String]), + idempotency_key: String, + request_options: OpenAI::RequestOptions + } + ) + end + def to_hash + end + + class Environment < OpenAI::Internal::Type::BaseModel + OrHash = T.type_alias do + T.any( + OpenAI::Beta::Agents::EnvironmentCreateParams::Environment, + OpenAI::Internal::AnyHash + ) + end + + # The type of the object. Always `openai_hosted`. + sig { returns(Symbol) } + attr_accessor :type + + # Directories that contain capabilities exposed to the agent. Defaults to an empty + # list. + sig { returns(T.nilable(T::Array[String])) } + attr_accessor :capability_directories + + # Desktop provisioning. Omission or null inherits the template setting, or + # defaults to disabled. + sig { returns(T.nilable(OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Desktop)) } + attr_reader :desktop + + sig { + params(desktop: T.nilable(OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Desktop::OrHash)) + .void + } + attr_writer :desktop + + # Environment variables made available to the agent. + sig { returns(T.nilable(T::Hash[Symbol, String])) } + attr_accessor :env + + # A reusable hosted template applied before inline configuration. Omitted fields + # inherit the template; network overrides cannot broaden its policy. + sig { returns(T.nilable(String)) } + attr_reader :environment_template_id + + sig { params(environment_template_id: String).void } + attr_writer :environment_template_id + + # Files available before the agent starts. Defaults to an empty list. + sig { + returns( + T.nilable( + T::Array[ + T.any( + OpenAI::Beta::HostedEnvironmentFileParam::FileID, + OpenAI::Beta::HostedEnvironmentFileParam::Inline + ) + ] + ) + ) + } + attr_accessor :files + + # Network access policy for the environment. If omitted, the API version + # determines whether network access is enabled or disabled. + sig { returns(T.nilable(OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network)) } + attr_reader :network + + sig { + params(network: T.nilable(OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network::OrHash)) + .void + } + attr_writer :network + + # Packages to install in the environment. Defaults to empty package lists. + sig { returns(T.nilable(OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Packages)) } + attr_reader :packages + + sig { + params(packages: T.nilable(OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Packages::OrHash)) + .void + } + attr_writer :packages + + # Plugins provided as inline ZIP archives. Defaults to an empty list. + sig { returns(T.nilable(T::Array[OpenAI::Beta::HostedPluginParam])) } + attr_accessor :plugins + + # Ordered, confidential setup commands. Command bodies are never returned. + sig { returns(T.nilable(T::Array[OpenAI::Beta::SetupCommandParam])) } + attr_accessor :setup_commands + + # Skills referenced by ID or provided as inline ZIP archives. Defaults to an empty + # list. + sig { + returns( + T.nilable( + T::Array[ + T.any(OpenAI::Beta::HostedSkillParam::SkillReference, OpenAI::Beta::HostedSkillParam::Inline) + ] + ) + ) + } + attr_accessor :skills + + # The required hosting type and its configuration. + sig do + params( + + capability_directories: T.nilable(T::Array[String]), + + desktop: T.nilable(OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Desktop::OrHash), + + env: T.nilable(T::Hash[Symbol, String]), + + environment_template_id: String, + + files: T.nilable( + T::Array[ + T.any( + OpenAI::Beta::HostedEnvironmentFileParam::FileID::OrHash, + OpenAI::Beta::HostedEnvironmentFileParam::Inline::OrHash + ) + ] + ), + + network: T.nilable(OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network::OrHash), + + packages: T.nilable(OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Packages::OrHash), + + plugins: T.nilable(T::Array[OpenAI::Beta::HostedPluginParam::OrHash]), + + setup_commands: T.nilable(T::Array[OpenAI::Beta::SetupCommandParam::OrHash]), + + skills: T.nilable( + T::Array[ + T.any( + OpenAI::Beta::HostedSkillParam::SkillReference::OrHash, + OpenAI::Beta::HostedSkillParam::Inline::OrHash + ) + ] + ), + + type: Symbol + ) + .returns(T.attached_class) + end + def self.new( + + # Directories that contain capabilities exposed to the agent. Defaults to an empty + # list. + capability_directories: nil, + + # Desktop provisioning. Omission or null inherits the template setting, or + # defaults to disabled. + desktop: nil, + + # Environment variables made available to the agent. + env: nil, + + # A reusable hosted template applied before inline configuration. Omitted fields + # inherit the template; network overrides cannot broaden its policy. + environment_template_id: nil, + + # Files available before the agent starts. Defaults to an empty list. + files: nil, + + # Network access policy for the environment. If omitted, the API version + # determines whether network access is enabled or disabled. + network: nil, + + # Packages to install in the environment. Defaults to empty package lists. + packages: nil, + + # Plugins provided as inline ZIP archives. Defaults to an empty list. + plugins: nil, + + # Ordered, confidential setup commands. Command bodies are never returned. + setup_commands: nil, + + # Skills referenced by ID or provided as inline ZIP archives. Defaults to an empty + # list. + skills: nil, + + # The type of the object. Always `openai_hosted`. + + type: :openai_hosted + ) + end + + sig do + override.returns( + { + type: Symbol, + capability_directories: T.nilable(T::Array[String]), + desktop: T.nilable(OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Desktop), + env: T.nilable(T::Hash[Symbol, String]), + environment_template_id: String, + files: T.nilable( + T::Array[ + T.any( + OpenAI::Beta::HostedEnvironmentFileParam::FileID, + OpenAI::Beta::HostedEnvironmentFileParam::Inline + ) + ] + ), + network: T.nilable(OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network), + packages: T.nilable(OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Packages), + plugins: T.nilable(T::Array[OpenAI::Beta::HostedPluginParam]), + setup_commands: T.nilable(T::Array[OpenAI::Beta::SetupCommandParam]), + skills: T.nilable( + T::Array[ + T.any(OpenAI::Beta::HostedSkillParam::SkillReference, OpenAI::Beta::HostedSkillParam::Inline) + ] + ) + } + ) + end + def to_hash + end + + class Desktop < OpenAI::Internal::Type::BaseModel + OrHash = T.type_alias do + T.any( + OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Desktop, + OpenAI::Internal::AnyHash + ) + end + + # Whether to provision the desktop and its browser proxy. + sig { returns(T::Boolean) } + attr_accessor :enabled + + # Desktop provisioning. Omission or null inherits the template setting, or + # defaults to disabled. + sig do + params( + + enabled: T::Boolean + ) + .returns(T.attached_class) + end + def self.new( + + # Whether to provision the desktop and its browser proxy. + + enabled: + ) + end + + sig do + override.returns( + {enabled: T::Boolean} + ) + end + def to_hash + end + + end + + class Network < OpenAI::Internal::Type::BaseModel + OrHash = T.type_alias do + T.any( + OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network, + OpenAI::Internal::AnyHash + ) + end + + # The environment's network access mode. + sig { returns(OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network::Access::OrSymbol) } + attr_accessor :access + + # Domains the environment may access when network access is restricted. + sig { returns(T.nilable(T::Array[String])) } + attr_accessor :allowed_domains + + # Domains blocked for both executor and browser when access is restricted. A + # nonempty list requires `access: restricted` and cannot be combined with nonempty + # `allowed_domains`. Wildcard domains are not supported. + sig { returns(T.nilable(T::Array[String])) } + attr_accessor :blocked_domains + + # Network access policy for the environment. If omitted, the API version + # determines whether network access is enabled or disabled. + sig do + params( + + access: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network::Access::OrSymbol, + + allowed_domains: T.nilable(T::Array[String]), + + blocked_domains: T.nilable(T::Array[String]) + ) + .returns(T.attached_class) + end + def self.new( + + # The environment's network access mode. + access:, + + # Domains the environment may access when network access is restricted. + allowed_domains: nil, + + # Domains blocked for both executor and browser when access is restricted. A + # nonempty list requires `access: restricted` and cannot be combined with nonempty + # `allowed_domains`. Wildcard domains are not supported. + + blocked_domains: nil + ) + end + + sig do + override.returns( + { + access: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network::Access::OrSymbol, + allowed_domains: T.nilable(T::Array[String]), + blocked_domains: T.nilable(T::Array[String]) + } + ) + end + def to_hash + end + + # The environment's network access mode. + module Access + extend OpenAI::Internal::Type::Enum + + TaggedSymbol = T.type_alias { + T.all(Symbol, OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network::Access) + } + OrSymbol = T.type_alias { T.any(Symbol, String) } + + # Allows unrestricted network access. + ENABLED = T.let( + :enabled, + OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network::Access::TaggedSymbol + ) + + # Disables network access. + DISABLED = T.let( + :disabled, + OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network::Access::TaggedSymbol + ) + + # Applies the configured domain restrictions. + RESTRICTED = T.let( + :restricted, + OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network::Access::TaggedSymbol + ) + + sig { + override.returns( + T::Array[OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network::Access::TaggedSymbol] + ) + } + def self.values + end + end + end + + class Packages < OpenAI::Internal::Type::BaseModel + OrHash = T.type_alias do + T.any( + OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Packages, + OpenAI::Internal::AnyHash + ) + end + + # npm packages to install globally. Defaults to an empty list. + sig { returns(T.nilable(T::Array[String])) } + attr_accessor :npm + + # Python packages to install. Defaults to an empty list. + sig { returns(T.nilable(T::Array[String])) } + attr_accessor :python + + # System packages to install. Defaults to an empty list. + sig { returns(T.nilable(T::Array[String])) } + attr_accessor :system_ + + # Packages to install in the environment. Defaults to empty package lists. + sig do + params( + + npm: T.nilable(T::Array[String]), + + python: T.nilable(T::Array[String]), + + system_: T.nilable(T::Array[String]) + ) + .returns(T.attached_class) + end + def self.new( + + # npm packages to install globally. Defaults to an empty list. + npm: nil, + + # Python packages to install. Defaults to an empty list. + python: nil, + + # System packages to install. Defaults to an empty list. + + system_: nil + ) + end + + sig do + override.returns( + { + npm: T.nilable(T::Array[String]), + python: T.nilable(T::Array[String]), + system_: T.nilable(T::Array[String]) + } + ) + end + def to_hash + end + + end + end + + end + + end + + end + + end +end diff --git a/rbi/openai/models/beta/agents/environment_info.rbi b/rbi/openai/models/beta/agents/environment_info.rbi index d8c152d5c..322cd1515 100644 --- a/rbi/openai/models/beta/agents/environment_info.rbi +++ b/rbi/openai/models/beta/agents/environment_info.rbi @@ -121,6 +121,9 @@ module OpenAI OrSymbol = T.type_alias { T.any(Symbol, String) } PENDING = T.let(:pending, OpenAI::Beta::Agents::EnvironmentInfo::Status::TaggedSymbol) + # Provisioning succeeded and the environment is available for attachment or use. + READY = T.let(:ready, OpenAI::Beta::Agents::EnvironmentInfo::Status::TaggedSymbol) + CONNECTED = T.let(:connected, OpenAI::Beta::Agents::EnvironmentInfo::Status::TaggedSymbol) DISCONNECTED = T.let(:disconnected, OpenAI::Beta::Agents::EnvironmentInfo::Status::TaggedSymbol) EXPIRED = T.let(:expired, OpenAI::Beta::Agents::EnvironmentInfo::Status::TaggedSymbol) diff --git a/rbi/openai/models/beta/agents/environment_list_params.rbi b/rbi/openai/models/beta/agents/environment_list_params.rbi new file mode 100644 index 000000000..2d53fc447 --- /dev/null +++ b/rbi/openai/models/beta/agents/environment_list_params.rbi @@ -0,0 +1,136 @@ +# typed: strong + +module OpenAI + module Models + + module Beta + + module Agents + + class EnvironmentListParams < OpenAI::Internal::Type::BaseModel + + extend OpenAI::Internal::Type::RequestParameters::Converter + include OpenAI::Internal::Type::RequestParameters + + OrHash = T.type_alias do + T.any( + OpenAI::Beta::Agents::EnvironmentListParams, + OpenAI::Internal::AnyHash + ) + end + + # Return environments after this environment ID in the selected order. + sig { returns(T.nilable(String)) } + attr_reader :after + + sig { params(after: String).void } + attr_writer :after + + # The maximum number of environments to return, between 1 and 100. Defaults to 20. + sig { returns(T.nilable(Integer)) } + attr_reader :limit + + sig { params(limit: Integer).void } + attr_writer :limit + + # The order in which environments are returned. Defaults to `desc`. + sig { returns(T.nilable(OpenAI::Beta::Agents::EnvironmentListParams::Order::OrSymbol)) } + attr_reader :order + + sig { params(order: OpenAI::Beta::Agents::EnvironmentListParams::Order::OrSymbol).void } + attr_writer :order + + # The hosting type to list. Defaults to `openai_hosted`. + sig { returns(T.nilable(OpenAI::Beta::Agents::EnvironmentListParams::Type::OrSymbol)) } + attr_reader :type + + sig { params(type: OpenAI::Beta::Agents::EnvironmentListParams::Type::OrSymbol).void } + attr_writer :type + + sig do + params( + + after: String, + + limit: Integer, + + order: OpenAI::Beta::Agents::EnvironmentListParams::Order::OrSymbol, + + type: OpenAI::Beta::Agents::EnvironmentListParams::Type::OrSymbol, + + request_options: OpenAI::RequestOptions::OrHash + ) + .returns(T.attached_class) + end + def self.new( + + # Return environments after this environment ID in the selected order. + after: nil, + + # The maximum number of environments to return, between 1 and 100. Defaults to 20. + limit: nil, + + # The order in which environments are returned. Defaults to `desc`. + order: nil, + + # The hosting type to list. Defaults to `openai_hosted`. + type: nil, + + request_options: {} + ) + end + + sig do + override.returns( + { + after: String, + limit: Integer, + order: OpenAI::Beta::Agents::EnvironmentListParams::Order::OrSymbol, + type: OpenAI::Beta::Agents::EnvironmentListParams::Type::OrSymbol, + request_options: OpenAI::RequestOptions + } + ) + end + def to_hash + end + + # The order in which environments are returned. Defaults to `desc`. + module Order + extend OpenAI::Internal::Type::Enum + + TaggedSymbol = T.type_alias { T.all(Symbol, OpenAI::Beta::Agents::EnvironmentListParams::Order) } + OrSymbol = T.type_alias { T.any(Symbol, String) } + + # Returns resources in ascending order. + ASC = T.let(:asc, OpenAI::Beta::Agents::EnvironmentListParams::Order::TaggedSymbol) + + # Returns resources in descending order. + DESC = T.let(:desc, OpenAI::Beta::Agents::EnvironmentListParams::Order::TaggedSymbol) + + sig { override.returns(T::Array[OpenAI::Beta::Agents::EnvironmentListParams::Order::TaggedSymbol]) } + def self.values + end + end + + # The hosting type to list. Defaults to `openai_hosted`. + module Type + extend OpenAI::Internal::Type::Enum + + TaggedSymbol = T.type_alias { T.all(Symbol, OpenAI::Beta::Agents::EnvironmentListParams::Type) } + OrSymbol = T.type_alias { T.any(Symbol, String) } + + OPENAI_HOSTED = T.let(:openai_hosted, OpenAI::Beta::Agents::EnvironmentListParams::Type::TaggedSymbol) + + sig { override.returns(T::Array[OpenAI::Beta::Agents::EnvironmentListParams::Type::TaggedSymbol]) } + def self.values + end + end + + end + + end + + end + + end +end diff --git a/rbi/openai/models/beta/environment_param.rbi b/rbi/openai/models/beta/environment_param.rbi index b29d19ce0..4bae6f1c9 100644 --- a/rbi/openai/models/beta/environment_param.rbi +++ b/rbi/openai/models/beta/environment_param.rbi @@ -91,6 +91,14 @@ module OpenAI sig { returns(T.nilable(T::Hash[Symbol, String])) } attr_accessor :env + # An existing prewarmed environment. Cannot be combined with a template or inline + # configuration. + sig { returns(T.nilable(String)) } + attr_reader :environment_id + + sig { params(environment_id: String).void } + attr_writer :environment_id + # A reusable hosted template applied before inline session configuration. Omitted # fields inherit the template; network overrides cannot broaden its policy. sig { returns(T.nilable(String)) } @@ -161,6 +169,8 @@ module OpenAI env: T.nilable(T::Hash[Symbol, String]), + environment_id: String, + environment_template_id: String, files: T.nilable( @@ -209,6 +219,10 @@ module OpenAI # Environment variables made available to the agent. env: nil, + # An existing prewarmed environment. Cannot be combined with a template or inline + # configuration. + environment_id: nil, + # A reusable hosted template applied before inline session configuration. Omitted # fields inherit the template; network overrides cannot broaden its policy. environment_template_id: nil, @@ -247,6 +261,7 @@ module OpenAI container_size: OpenAI::Beta::EnvironmentParam::OpenAIHosted::ContainerSize::OrSymbol, desktop: T.nilable(OpenAI::Beta::EnvironmentParam::OpenAIHosted::Desktop), env: T.nilable(T::Hash[Symbol, String]), + environment_id: String, environment_template_id: String, files: T.nilable( T::Array[ diff --git a/rbi/openai/models/webhooks/agent_environment_failed_webhook_event.rbi b/rbi/openai/models/webhooks/agent_environment_failed_webhook_event.rbi new file mode 100644 index 000000000..247f3be5b --- /dev/null +++ b/rbi/openai/models/webhooks/agent_environment_failed_webhook_event.rbi @@ -0,0 +1,134 @@ +# typed: strong + +module OpenAI + module Models + + module Webhooks + + class AgentEnvironmentFailedWebhookEvent < OpenAI::Internal::Type::BaseModel + + OrHash = T.type_alias do + T.any( + OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent, + OpenAI::Internal::AnyHash + ) + end + + # The unique ID of the event. + sig { returns(String) } + attr_accessor :id + + # The Unix timestamp, in seconds, when the event was created. + sig { returns(Integer) } + attr_accessor :created_at + + # Identifies the environment whose lifecycle changed. + sig { returns(OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent::Data) } + attr_reader :data + + sig { params(data: OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent::Data::OrHash).void } + attr_writer :data + + # The object type. Always `event`. + sig { returns(Symbol) } + attr_accessor :object + + # The event type. Always `agent.environment.failed`. + sig { returns(Symbol) } + attr_accessor :type + + # Sent when setup fails for a prewarmed OpenAI-hosted environment before it is + # attached to a session. + sig do + params( + + id: String, + + created_at: Integer, + + data: OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent::Data::OrHash, + + object: Symbol, + + type: Symbol + ) + .returns(T.attached_class) + end + def self.new( + + # The unique ID of the event. + id:, + + # The Unix timestamp, in seconds, when the event was created. + created_at:, + + # Identifies the environment whose lifecycle changed. + data:, + + # The object type. Always `event`. + object: :event, + + # The event type. Always `agent.environment.failed`. + + type: :"agent.environment.failed" + ) + end + + sig do + override.returns( + { + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent::Data, + object: Symbol, + type: Symbol + } + ) + end + def to_hash + end + + class Data < OpenAI::Internal::Type::BaseModel + OrHash = T.type_alias do + T.any( + OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent::Data, + OpenAI::Internal::AnyHash + ) + end + + # The ID of the environment. + sig { returns(String) } + attr_accessor :id + + # Identifies the environment whose lifecycle changed. + sig do + params( + + id: String + ) + .returns(T.attached_class) + end + def self.new( + + # The ID of the environment. + + id: + ) + end + + sig do + override.returns( + {id: String} + ) + end + def to_hash + end + + end + + end + + end + + end +end diff --git a/rbi/openai/models/webhooks/agent_environment_ready_webhook_event.rbi b/rbi/openai/models/webhooks/agent_environment_ready_webhook_event.rbi new file mode 100644 index 000000000..0f9ab4f58 --- /dev/null +++ b/rbi/openai/models/webhooks/agent_environment_ready_webhook_event.rbi @@ -0,0 +1,134 @@ +# typed: strong + +module OpenAI + module Models + + module Webhooks + + class AgentEnvironmentReadyWebhookEvent < OpenAI::Internal::Type::BaseModel + + OrHash = T.type_alias do + T.any( + OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent, + OpenAI::Internal::AnyHash + ) + end + + # The unique ID of the event. + sig { returns(String) } + attr_accessor :id + + # The Unix timestamp, in seconds, when the event was created. + sig { returns(Integer) } + attr_accessor :created_at + + # Identifies the environment whose lifecycle changed. + sig { returns(OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent::Data) } + attr_reader :data + + sig { params(data: OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent::Data::OrHash).void } + attr_writer :data + + # The object type. Always `event`. + sig { returns(Symbol) } + attr_accessor :object + + # The event type. Always `agent.environment.ready`. + sig { returns(Symbol) } + attr_accessor :type + + # Sent when a prewarmed OpenAI-hosted environment finishes setup before being + # attached to a session. + sig do + params( + + id: String, + + created_at: Integer, + + data: OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent::Data::OrHash, + + object: Symbol, + + type: Symbol + ) + .returns(T.attached_class) + end + def self.new( + + # The unique ID of the event. + id:, + + # The Unix timestamp, in seconds, when the event was created. + created_at:, + + # Identifies the environment whose lifecycle changed. + data:, + + # The object type. Always `event`. + object: :event, + + # The event type. Always `agent.environment.ready`. + + type: :"agent.environment.ready" + ) + end + + sig do + override.returns( + { + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent::Data, + object: Symbol, + type: Symbol + } + ) + end + def to_hash + end + + class Data < OpenAI::Internal::Type::BaseModel + OrHash = T.type_alias do + T.any( + OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent::Data, + OpenAI::Internal::AnyHash + ) + end + + # The ID of the environment. + sig { returns(String) } + attr_accessor :id + + # Identifies the environment whose lifecycle changed. + sig do + params( + + id: String + ) + .returns(T.attached_class) + end + def self.new( + + # The ID of the environment. + + id: + ) + end + + sig do + override.returns( + {id: String} + ) + end + def to_hash + end + + end + + end + + end + + end +end diff --git a/rbi/openai/models/webhooks/unwrap_webhook_event.rbi b/rbi/openai/models/webhooks/unwrap_webhook_event.rbi index 2120e3bd9..dfdc42225 100644 --- a/rbi/openai/models/webhooks/unwrap_webhook_event.rbi +++ b/rbi/openai/models/webhooks/unwrap_webhook_event.rbi @@ -5,13 +5,15 @@ module OpenAI module Webhooks - # Sent when an agent session requires an action. Retrieve the session for action - # details. + # Sent when setup fails for a prewarmed OpenAI-hosted environment before it is + # attached to a session. module UnwrapWebhookEvent extend OpenAI::Internal::Type::Union Variants = T.type_alias do T.any( + OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent, + OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent, OpenAI::Webhooks::AgentSessionActionRequiredWebhookEvent, OpenAI::Webhooks::AgentSessionCreatedWebhookEvent, OpenAI::Webhooks::AgentSessionFailedWebhookEvent, diff --git a/rbi/openai/models/webhooks/webhook_create_params.rbi b/rbi/openai/models/webhooks/webhook_create_params.rbi index de8280391..de92ba15c 100644 --- a/rbi/openai/models/webhooks/webhook_create_params.rbi +++ b/rbi/openai/models/webhooks/webhook_create_params.rbi @@ -121,6 +121,14 @@ module OpenAI ) VIDEO_COMPLETED = T.let(:"video.completed", OpenAI::Webhooks::WebhookCreateParams::EventType::TaggedSymbol) VIDEO_FAILED = T.let(:"video.failed", OpenAI::Webhooks::WebhookCreateParams::EventType::TaggedSymbol) + AGENT_ENVIRONMENT_READY = T.let( + :"agent.environment.ready", + OpenAI::Webhooks::WebhookCreateParams::EventType::TaggedSymbol + ) + AGENT_ENVIRONMENT_FAILED = T.let( + :"agent.environment.failed", + OpenAI::Webhooks::WebhookCreateParams::EventType::TaggedSymbol + ) AGENT_SESSION_CREATED = T.let( :"agent.session.created", OpenAI::Webhooks::WebhookCreateParams::EventType::TaggedSymbol diff --git a/rbi/openai/models/webhooks/webhook_test_params.rbi b/rbi/openai/models/webhooks/webhook_test_params.rbi index c507114f7..f22be0cd7 100644 --- a/rbi/openai/models/webhooks/webhook_test_params.rbi +++ b/rbi/openai/models/webhooks/webhook_test_params.rbi @@ -106,6 +106,14 @@ module OpenAI ) VIDEO_COMPLETED = T.let(:"video.completed", OpenAI::Webhooks::WebhookTestParams::EventType::TaggedSymbol) VIDEO_FAILED = T.let(:"video.failed", OpenAI::Webhooks::WebhookTestParams::EventType::TaggedSymbol) + AGENT_ENVIRONMENT_READY = T.let( + :"agent.environment.ready", + OpenAI::Webhooks::WebhookTestParams::EventType::TaggedSymbol + ) + AGENT_ENVIRONMENT_FAILED = T.let( + :"agent.environment.failed", + OpenAI::Webhooks::WebhookTestParams::EventType::TaggedSymbol + ) AGENT_SESSION_CREATED = T.let( :"agent.session.created", OpenAI::Webhooks::WebhookTestParams::EventType::TaggedSymbol diff --git a/rbi/openai/models/webhooks/webhook_update_params.rbi b/rbi/openai/models/webhooks/webhook_update_params.rbi index 21621a980..a8dba9a2d 100644 --- a/rbi/openai/models/webhooks/webhook_update_params.rbi +++ b/rbi/openai/models/webhooks/webhook_update_params.rbi @@ -138,6 +138,14 @@ module OpenAI ) VIDEO_COMPLETED = T.let(:"video.completed", OpenAI::Webhooks::WebhookUpdateParams::EventType::TaggedSymbol) VIDEO_FAILED = T.let(:"video.failed", OpenAI::Webhooks::WebhookUpdateParams::EventType::TaggedSymbol) + AGENT_ENVIRONMENT_READY = T.let( + :"agent.environment.ready", + OpenAI::Webhooks::WebhookUpdateParams::EventType::TaggedSymbol + ) + AGENT_ENVIRONMENT_FAILED = T.let( + :"agent.environment.failed", + OpenAI::Webhooks::WebhookUpdateParams::EventType::TaggedSymbol + ) AGENT_SESSION_CREATED = T.let( :"agent.session.created", OpenAI::Webhooks::WebhookUpdateParams::EventType::TaggedSymbol diff --git a/rbi/openai/resources/beta/agents/environments.rbi b/rbi/openai/resources/beta/agents/environments.rbi index 538ce0e46..6119ab3b1 100644 --- a/rbi/openai/resources/beta/agents/environments.rbi +++ b/rbi/openai/resources/beta/agents/environments.rbi @@ -15,6 +15,34 @@ module OpenAI sig { returns(OpenAI::Resources::Beta::Agents::Environments::Templates) } attr_reader :templates + # Creates an OpenAI-hosted environment before creating a session. Requires access + # to the prewarming beta. + sig { + params( + environment: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::OrHash, + vault_ids: T.nilable(T::Array[String]), + idempotency_key: String, + request_options: OpenAI::RequestOptions::OrHash + ) + .returns(OpenAI::Beta::Agents::EnvironmentInfo) + } + def create( + # Body param: The required hosting type and its configuration. + environment:, + # Body param: The IDs of up to 10 vaults made available to an OpenAI-hosted + # environment. + vault_ids: nil, + # Header param: Deduplicates creation for 24 hours within the authenticated + # organization, project, and creator. Retry the same JSON parameters with the same + # key to retrieve the original environment in its current state. Different + # parameters or an incomplete hosted creation return 409. Deleted environments are + # not recreated. After retention expires, the key may create a new environment. + # Without this header, each request creates a new environment. + idempotency_key: nil, + request_options: {} + ) + end + # Retrieves an execution environment's connection status and safe installed # metadata. See # [environment lifecycle](https://developers.openai.com/api/docs/guides/agents-api/environments/lifecycle). @@ -30,6 +58,31 @@ module OpenAI ) end + # Lists OpenAI-hosted environments owned by the authenticated principal. Requires + # access to the prewarming beta. + sig { + params( + after: String, + limit: Integer, + order: OpenAI::Beta::Agents::EnvironmentListParams::Order::OrSymbol, + type: OpenAI::Beta::Agents::EnvironmentListParams::Type::OrSymbol, + request_options: OpenAI::RequestOptions::OrHash + ) + .returns(OpenAI::Internal::CursorPage[OpenAI::Beta::Agents::EnvironmentInfo]) + } + def list( + # Return environments after this environment ID in the selected order. + after: nil, + # The maximum number of environments to return, between 1 and 100. Defaults to 20. + limit: nil, + # The order in which environments are returned. Defaults to `desc`. + order: nil, + # The hosting type to list. Defaults to `openai_hosted`. + type: nil, + request_options: {} + ) + end + # @api private sig { params(client: OpenAI::Client).returns(T.attached_class) } def self.new(client:) diff --git a/rbi/openai/resources/webhooks.rbi b/rbi/openai/resources/webhooks.rbi index 40cf780ed..ec0194d8b 100644 --- a/rbi/openai/resources/webhooks.rbi +++ b/rbi/openai/resources/webhooks.rbi @@ -140,6 +140,8 @@ module OpenAI ) .returns( T.any( + OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent, + OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent, OpenAI::Webhooks::AgentSessionActionRequiredWebhookEvent, OpenAI::Webhooks::AgentSessionCreatedWebhookEvent, OpenAI::Webhooks::AgentSessionFailedWebhookEvent, diff --git a/sig/openai/models/beta/agents/environment_create_params.rbs b/sig/openai/models/beta/agents/environment_create_params.rbs new file mode 100644 index 000000000..8bf4cfb9a --- /dev/null +++ b/sig/openai/models/beta/agents/environment_create_params.rbs @@ -0,0 +1,268 @@ +module OpenAI + module Models + module Beta + module Agents + type environment_create_params = + { + environment: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment, + ?vault_ids: ::Array[String]?, + ?idempotency_key: String, + ?request_options: OpenAI::request_opts + } + + class EnvironmentCreateParams < OpenAI::Internal::Type::BaseModel + extend OpenAI::Internal::Type::RequestParameters::Converter + include OpenAI::Internal::Type::RequestParameters + + # The required hosting type and its configuration. + attr_accessor environment: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment + + # The IDs of up to 10 vaults made available to an OpenAI-hosted environment. + attr_accessor vault_ids: ::Array[String]? + + attr_reader idempotency_key: String? + + def idempotency_key=: (String) -> String + + # @param environment + # The required hosting type and its configuration. + # @param vault_ids + # The IDs of up to 10 vaults made available to an OpenAI-hosted environment. + def initialize: ( + environment: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment, + ?vault_ids: ::Array[String]?, + ?idempotency_key: String, + ?request_options: OpenAI::request_opts + ) -> void + + def to_hash: -> { + environment: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment, + ?vault_ids: ::Array[String]?, + ?idempotency_key: String, + ?request_options: OpenAI::RequestOptions + } + + type environment = + { + ?type: :openai_hosted, + ?capability_directories: ::Array[String]?, + ?desktop: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Desktop?, + ?env: ::Hash[Symbol, String]?, + ?environment_template_id: String, + ?files: ::Array[OpenAI::Models::Beta::hosted_environment_file_param]?, + ?network: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network?, + ?packages: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Packages?, + ?plugins: ::Array[OpenAI::Beta::HostedPluginParam]?, + ?setup_commands: ::Array[OpenAI::Beta::SetupCommandParam]?, + ?skills: ::Array[OpenAI::Models::Beta::hosted_skill_param]? + } + + class Environment < OpenAI::Internal::Type::BaseModel + # The type of the object. Always `openai_hosted`. + attr_accessor type: :openai_hosted + + # Directories that contain capabilities exposed to the agent. Defaults to an empty + # list. + attr_accessor capability_directories: ::Array[String]? + + # Desktop provisioning. Omission or null inherits the template setting, or + # defaults to disabled. + attr_accessor desktop: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Desktop? + + # Environment variables made available to the agent. + attr_accessor env: ::Hash[Symbol, String]? + + # A reusable hosted template applied before inline configuration. Omitted fields + # inherit the template; network overrides cannot broaden its policy. + attr_reader environment_template_id: String? + + # A reusable hosted template applied before inline configuration. Omitted fields + # inherit the template; network overrides cannot broaden its policy. + def environment_template_id=: (String) -> String + + # Files available before the agent starts. Defaults to an empty list. + attr_accessor files: ::Array[OpenAI::Models::Beta::hosted_environment_file_param]? + + # Network access policy for the environment. If omitted, the API version + # determines whether network access is enabled or disabled. + attr_accessor network: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network? + + # Packages to install in the environment. Defaults to empty package lists. + attr_accessor packages: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Packages? + + # Plugins provided as inline ZIP archives. Defaults to an empty list. + attr_accessor plugins: ::Array[OpenAI::Beta::HostedPluginParam]? + + # Ordered, confidential setup commands. Command bodies are never returned. + attr_accessor setup_commands: ::Array[OpenAI::Beta::SetupCommandParam]? + + # Skills referenced by ID or provided as inline ZIP archives. Defaults to an empty + # list. + attr_accessor skills: ::Array[OpenAI::Models::Beta::hosted_skill_param]? + + # @param capability_directories + # Directories that contain capabilities exposed to the agent. Defaults to an empty + # list. + # @param desktop + # Desktop provisioning. Omission or null inherits the template setting, or + # defaults to disabled. + # @param env + # Environment variables made available to the agent. + # @param environment_template_id + # A reusable hosted template applied before inline configuration. Omitted fields + # inherit the template; network overrides cannot broaden its policy. + # @param files + # Files available before the agent starts. Defaults to an empty list. + # @param network + # Network access policy for the environment. If omitted, the API version + # determines whether network access is enabled or disabled. + # @param packages + # Packages to install in the environment. Defaults to empty package lists. + # @param plugins + # Plugins provided as inline ZIP archives. Defaults to an empty list. + # @param setup_commands + # Ordered, confidential setup commands. Command bodies are never returned. + # @param skills + # Skills referenced by ID or provided as inline ZIP archives. Defaults to an empty + # list. + # @param type + # The type of the object. Always `openai_hosted`. + def initialize: ( + ?capability_directories: ::Array[String]?, + ?desktop: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Desktop?, + ?env: ::Hash[Symbol, String]?, + ?environment_template_id: String, + ?files: ::Array[OpenAI::Models::Beta::hosted_environment_file_param]?, + ?network: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network?, + ?packages: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Packages?, + ?plugins: ::Array[OpenAI::Beta::HostedPluginParam]?, + ?setup_commands: ::Array[OpenAI::Beta::SetupCommandParam]?, + ?skills: ::Array[OpenAI::Models::Beta::hosted_skill_param]?, + ?type: :openai_hosted + ) -> void + + def to_hash: -> { + ?type: :openai_hosted, + ?capability_directories: ::Array[String]?, + ?desktop: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Desktop?, + ?env: ::Hash[Symbol, String]?, + ?environment_template_id: String, + ?files: ::Array[OpenAI::Models::Beta::hosted_environment_file_param]?, + ?network: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Network?, + ?packages: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment::Packages?, + ?plugins: ::Array[OpenAI::Beta::HostedPluginParam]?, + ?setup_commands: ::Array[OpenAI::Beta::SetupCommandParam]?, + ?skills: ::Array[OpenAI::Models::Beta::hosted_skill_param]? + } + + type desktop = { enabled: bool } + + class Desktop < OpenAI::Internal::Type::BaseModel + # Whether to provision the desktop and its browser proxy. + attr_accessor enabled: bool + + # @param enabled + # Whether to provision the desktop and its browser proxy. + def initialize: (enabled: bool) -> void + + def to_hash: -> { enabled: bool } + end + + type network = + { + access: OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment::Network::access, + ?allowed_domains: ::Array[String]?, + ?blocked_domains: ::Array[String]? + } + + class Network < OpenAI::Internal::Type::BaseModel + # The environment's network access mode. + attr_accessor access: OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment::Network::access + + # Domains the environment may access when network access is restricted. + attr_accessor allowed_domains: ::Array[String]? + + # Domains blocked for both executor and browser when access is restricted. A + # nonempty list requires `access: restricted` and cannot be combined with nonempty + # `allowed_domains`. Wildcard domains are not supported. + attr_accessor blocked_domains: ::Array[String]? + + # @param access + # The environment's network access mode. + # @param allowed_domains + # Domains the environment may access when network access is restricted. + # @param blocked_domains + # Domains blocked for both executor and browser when access is restricted. A + # nonempty list requires `access: restricted` and cannot be combined with nonempty + # `allowed_domains`. Wildcard domains are not supported. + def initialize: ( + access: OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment::Network::access, + ?allowed_domains: ::Array[String]?, + ?blocked_domains: ::Array[String]? + ) -> void + + def to_hash: -> { + access: OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment::Network::access, + ?allowed_domains: ::Array[String]?, + ?blocked_domains: ::Array[String]? + } + + type access = :enabled | :disabled | :restricted + + module Access + extend OpenAI::Internal::Type::Enum + + # Allows unrestricted network access. + ENABLED: :enabled + + # Disables network access. + DISABLED: :disabled + + # Applies the configured domain restrictions. + RESTRICTED: :restricted + + def self?.values: -> ::Array[OpenAI::Models::Beta::Agents::EnvironmentCreateParams::Environment::Network::access] + end + end + + type packages = + { + ?npm: ::Array[String]?, + ?python: ::Array[String]?, + ?system_: ::Array[String]? + } + + class Packages < OpenAI::Internal::Type::BaseModel + # npm packages to install globally. Defaults to an empty list. + attr_accessor npm: ::Array[String]? + + # Python packages to install. Defaults to an empty list. + attr_accessor python: ::Array[String]? + + # System packages to install. Defaults to an empty list. + attr_accessor system_: ::Array[String]? + + # @param npm + # npm packages to install globally. Defaults to an empty list. + # @param python + # Python packages to install. Defaults to an empty list. + # @param system_ + # System packages to install. Defaults to an empty list. + def initialize: ( + ?npm: ::Array[String]?, + ?python: ::Array[String]?, + ?system_: ::Array[String]? + ) -> void + + def to_hash: -> { + ?npm: ::Array[String]?, + ?python: ::Array[String]?, + ?system_: ::Array[String]? + } + end + end + end + end + end + end +end diff --git a/sig/openai/models/beta/agents/environment_info.rbs b/sig/openai/models/beta/agents/environment_info.rbs index dc5743d86..a82817ec9 100644 --- a/sig/openai/models/beta/agents/environment_info.rbs +++ b/sig/openai/models/beta/agents/environment_info.rbs @@ -70,12 +70,16 @@ module OpenAI } type status = - :pending | :connected | :disconnected | :expired | :failed + :pending | :ready | :connected | :disconnected | :expired | :failed module Status extend OpenAI::Internal::Type::Enum PENDING: :pending + + # Provisioning succeeded and the environment is available for attachment or use. + READY: :ready + CONNECTED: :connected DISCONNECTED: :disconnected EXPIRED: :expired diff --git a/sig/openai/models/beta/agents/environment_list_params.rbs b/sig/openai/models/beta/agents/environment_list_params.rbs new file mode 100644 index 000000000..a1199c459 --- /dev/null +++ b/sig/openai/models/beta/agents/environment_list_params.rbs @@ -0,0 +1,97 @@ +module OpenAI + module Models + module Beta + module Agents + type environment_list_params = + { + ?after: String, + ?limit: Integer, + ?order: OpenAI::Models::Beta::Agents::EnvironmentListParams::order, + ?type: OpenAI::Models::Beta::Agents::EnvironmentListParams::type_, + ?request_options: OpenAI::request_opts + } + + class EnvironmentListParams < OpenAI::Internal::Type::BaseModel + extend OpenAI::Internal::Type::RequestParameters::Converter + include OpenAI::Internal::Type::RequestParameters + + # Return environments after this environment ID in the selected order. + attr_reader after: String? + + # Return environments after this environment ID in the selected order. + def after=: (String) -> String + + # The maximum number of environments to return, between 1 and 100. Defaults to 20. + attr_reader limit: Integer? + + # The maximum number of environments to return, between 1 and 100. Defaults to 20. + def limit=: (Integer) -> Integer + + # The order in which environments are returned. Defaults to `desc`. + attr_reader order: OpenAI::Models::Beta::Agents::EnvironmentListParams::order? + + # The order in which environments are returned. Defaults to `desc`. + def order=: ( + OpenAI::Models::Beta::Agents::EnvironmentListParams::order + ) -> OpenAI::Models::Beta::Agents::EnvironmentListParams::order + + # The hosting type to list. Defaults to `openai_hosted`. + attr_reader type: OpenAI::Models::Beta::Agents::EnvironmentListParams::type_? + + # The hosting type to list. Defaults to `openai_hosted`. + def type=: ( + OpenAI::Models::Beta::Agents::EnvironmentListParams::type_ + ) -> OpenAI::Models::Beta::Agents::EnvironmentListParams::type_ + + # @param after + # Return environments after this environment ID in the selected order. + # @param limit + # The maximum number of environments to return, between 1 and 100. Defaults to 20. + # @param order + # The order in which environments are returned. Defaults to `desc`. + # @param type + # The hosting type to list. Defaults to `openai_hosted`. + def initialize: ( + ?after: String, + ?limit: Integer, + ?order: OpenAI::Models::Beta::Agents::EnvironmentListParams::order, + ?type: OpenAI::Models::Beta::Agents::EnvironmentListParams::type_, + ?request_options: OpenAI::request_opts + ) -> void + + def to_hash: -> { + ?after: String, + ?limit: Integer, + ?order: OpenAI::Models::Beta::Agents::EnvironmentListParams::order, + ?type: OpenAI::Models::Beta::Agents::EnvironmentListParams::type_, + ?request_options: OpenAI::RequestOptions + } + + type order = :asc | :desc + + module Order + extend OpenAI::Internal::Type::Enum + + # Returns resources in ascending order. + ASC: :asc + + # Returns resources in descending order. + DESC: :desc + + def self?.values: -> ::Array[OpenAI::Models::Beta::Agents::EnvironmentListParams::order] + end + + type type_ = :openai_hosted + + module Type + extend OpenAI::Internal::Type::Enum + + OPENAI_HOSTED: :openai_hosted + + def self?.values: -> ::Array[OpenAI::Models::Beta::Agents::EnvironmentListParams::type_] + end + end + end + end + end +end diff --git a/sig/openai/models/beta/environment_param.rbs b/sig/openai/models/beta/environment_param.rbs index 6310e646b..0400c9e55 100644 --- a/sig/openai/models/beta/environment_param.rbs +++ b/sig/openai/models/beta/environment_param.rbs @@ -29,6 +29,7 @@ module OpenAI ?container_size: OpenAI::Models::Beta::EnvironmentParam::OpenAIHosted::container_size, ?desktop: OpenAI::Beta::EnvironmentParam::OpenAIHosted::Desktop?, ?env: ::Hash[Symbol, String]?, + ?environment_id: String, ?environment_template_id: String, ?files: ::Array[OpenAI::Models::Beta::hosted_environment_file_param]?, ?network: OpenAI::Beta::EnvironmentParam::OpenAIHosted::Network?, @@ -61,6 +62,14 @@ module OpenAI # Environment variables made available to the agent. attr_accessor env: ::Hash[Symbol, String]? + # An existing prewarmed environment. Cannot be combined with a template or inline + # configuration. + attr_reader environment_id: String? + + # An existing prewarmed environment. Cannot be combined with a template or inline + # configuration. + def environment_id=: (String) -> String + # A reusable hosted template applied before inline session configuration. Omitted # fields inherit the template; network overrides cannot broaden its policy. attr_reader environment_template_id: String? @@ -99,6 +108,9 @@ module OpenAI # defaults to disabled. # @param env # Environment variables made available to the agent. + # @param environment_id + # An existing prewarmed environment. Cannot be combined with a template or inline + # configuration. # @param environment_template_id # A reusable hosted template applied before inline session configuration. Omitted # fields inherit the template; network overrides cannot broaden its policy. @@ -123,6 +135,7 @@ module OpenAI ?container_size: OpenAI::Models::Beta::EnvironmentParam::OpenAIHosted::container_size, ?desktop: OpenAI::Beta::EnvironmentParam::OpenAIHosted::Desktop?, ?env: ::Hash[Symbol, String]?, + ?environment_id: String, ?environment_template_id: String, ?files: ::Array[OpenAI::Models::Beta::hosted_environment_file_param]?, ?network: OpenAI::Beta::EnvironmentParam::OpenAIHosted::Network?, @@ -139,6 +152,7 @@ module OpenAI ?container_size: OpenAI::Models::Beta::EnvironmentParam::OpenAIHosted::container_size, ?desktop: OpenAI::Beta::EnvironmentParam::OpenAIHosted::Desktop?, ?env: ::Hash[Symbol, String]?, + ?environment_id: String, ?environment_template_id: String, ?files: ::Array[OpenAI::Models::Beta::hosted_environment_file_param]?, ?network: OpenAI::Beta::EnvironmentParam::OpenAIHosted::Network?, diff --git a/sig/openai/models/webhooks/agent_environment_failed_webhook_event.rbs b/sig/openai/models/webhooks/agent_environment_failed_webhook_event.rbs new file mode 100644 index 000000000..8278d509a --- /dev/null +++ b/sig/openai/models/webhooks/agent_environment_failed_webhook_event.rbs @@ -0,0 +1,70 @@ +module OpenAI + module Models + module Webhooks + type agent_environment_failed_webhook_event = + { + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent::Data, + ?object: :event, + ?type: :"agent.environment.failed" + } + + class AgentEnvironmentFailedWebhookEvent < OpenAI::Internal::Type::BaseModel + # The unique ID of the event. + attr_accessor id: String + + # The Unix timestamp, in seconds, when the event was created. + attr_accessor created_at: Integer + + # Identifies the environment whose lifecycle changed. + attr_accessor data: OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent::Data + + # The object type. Always `event`. + attr_accessor object: :event + + # The event type. Always `agent.environment.failed`. + attr_accessor type: :"agent.environment.failed" + + # @param id + # The unique ID of the event. + # @param created_at + # The Unix timestamp, in seconds, when the event was created. + # @param data + # Identifies the environment whose lifecycle changed. + # @param object + # The object type. Always `event`. + # @param type + # The event type. Always `agent.environment.failed`. + def initialize: ( + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent::Data, + ?object: :event, + ?type: :"agent.environment.failed" + ) -> void + + def to_hash: -> { + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent::Data, + ?object: :event, + ?type: :"agent.environment.failed" + } + + type data = { id: String } + + class Data < OpenAI::Internal::Type::BaseModel + # The ID of the environment. + attr_accessor id: String + + # @param id + # The ID of the environment. + def initialize: (id: String) -> void + + def to_hash: -> { id: String } + end + end + end + end +end diff --git a/sig/openai/models/webhooks/agent_environment_ready_webhook_event.rbs b/sig/openai/models/webhooks/agent_environment_ready_webhook_event.rbs new file mode 100644 index 000000000..117f3f913 --- /dev/null +++ b/sig/openai/models/webhooks/agent_environment_ready_webhook_event.rbs @@ -0,0 +1,70 @@ +module OpenAI + module Models + module Webhooks + type agent_environment_ready_webhook_event = + { + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent::Data, + ?object: :event, + ?type: :"agent.environment.ready" + } + + class AgentEnvironmentReadyWebhookEvent < OpenAI::Internal::Type::BaseModel + # The unique ID of the event. + attr_accessor id: String + + # The Unix timestamp, in seconds, when the event was created. + attr_accessor created_at: Integer + + # Identifies the environment whose lifecycle changed. + attr_accessor data: OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent::Data + + # The object type. Always `event`. + attr_accessor object: :event + + # The event type. Always `agent.environment.ready`. + attr_accessor type: :"agent.environment.ready" + + # @param id + # The unique ID of the event. + # @param created_at + # The Unix timestamp, in seconds, when the event was created. + # @param data + # Identifies the environment whose lifecycle changed. + # @param object + # The object type. Always `event`. + # @param type + # The event type. Always `agent.environment.ready`. + def initialize: ( + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent::Data, + ?object: :event, + ?type: :"agent.environment.ready" + ) -> void + + def to_hash: -> { + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent::Data, + ?object: :event, + ?type: :"agent.environment.ready" + } + + type data = { id: String } + + class Data < OpenAI::Internal::Type::BaseModel + # The ID of the environment. + attr_accessor id: String + + # @param id + # The ID of the environment. + def initialize: (id: String) -> void + + def to_hash: -> { id: String } + end + end + end + end +end diff --git a/sig/openai/models/webhooks/unwrap_webhook_event.rbs b/sig/openai/models/webhooks/unwrap_webhook_event.rbs index 19d4fc565..c23cec36b 100644 --- a/sig/openai/models/webhooks/unwrap_webhook_event.rbs +++ b/sig/openai/models/webhooks/unwrap_webhook_event.rbs @@ -2,7 +2,9 @@ module OpenAI module Models module Webhooks type unwrap_webhook_event = - OpenAI::Webhooks::AgentSessionActionRequiredWebhookEvent + OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent + | OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent + | OpenAI::Webhooks::AgentSessionActionRequiredWebhookEvent | OpenAI::Webhooks::AgentSessionCreatedWebhookEvent | OpenAI::Webhooks::AgentSessionFailedWebhookEvent | OpenAI::Webhooks::AgentSessionIdleWebhookEvent diff --git a/sig/openai/models/webhooks/webhook_create_params.rbs b/sig/openai/models/webhooks/webhook_create_params.rbs index 5398e5e03..88128fe5c 100644 --- a/sig/openai/models/webhooks/webhook_create_params.rbs +++ b/sig/openai/models/webhooks/webhook_create_params.rbs @@ -60,6 +60,8 @@ module OpenAI | :"realtime.call.incoming" | :"video.completed" | :"video.failed" + | :"agent.environment.ready" + | :"agent.environment.failed" | :"agent.session.created" | :"agent.session.action_required" | :"agent.session.in_progress" @@ -87,6 +89,8 @@ module OpenAI REALTIME_CALL_INCOMING: :"realtime.call.incoming" VIDEO_COMPLETED: :"video.completed" VIDEO_FAILED: :"video.failed" + AGENT_ENVIRONMENT_READY: :"agent.environment.ready" + AGENT_ENVIRONMENT_FAILED: :"agent.environment.failed" AGENT_SESSION_CREATED: :"agent.session.created" AGENT_SESSION_ACTION_REQUIRED: :"agent.session.action_required" AGENT_SESSION_IN_PROGRESS: :"agent.session.in_progress" diff --git a/sig/openai/models/webhooks/webhook_test_params.rbs b/sig/openai/models/webhooks/webhook_test_params.rbs index e82fe8db6..7b261c621 100644 --- a/sig/openai/models/webhooks/webhook_test_params.rbs +++ b/sig/openai/models/webhooks/webhook_test_params.rbs @@ -49,6 +49,8 @@ module OpenAI | :"realtime.call.incoming" | :"video.completed" | :"video.failed" + | :"agent.environment.ready" + | :"agent.environment.failed" | :"agent.session.created" | :"agent.session.action_required" | :"agent.session.in_progress" @@ -76,6 +78,8 @@ module OpenAI REALTIME_CALL_INCOMING: :"realtime.call.incoming" VIDEO_COMPLETED: :"video.completed" VIDEO_FAILED: :"video.failed" + AGENT_ENVIRONMENT_READY: :"agent.environment.ready" + AGENT_ENVIRONMENT_FAILED: :"agent.environment.failed" AGENT_SESSION_CREATED: :"agent.session.created" AGENT_SESSION_ACTION_REQUIRED: :"agent.session.action_required" AGENT_SESSION_IN_PROGRESS: :"agent.session.in_progress" diff --git a/sig/openai/models/webhooks/webhook_update_params.rbs b/sig/openai/models/webhooks/webhook_update_params.rbs index f5c2199e7..ad26ad60f 100644 --- a/sig/openai/models/webhooks/webhook_update_params.rbs +++ b/sig/openai/models/webhooks/webhook_update_params.rbs @@ -76,6 +76,8 @@ module OpenAI | :"realtime.call.incoming" | :"video.completed" | :"video.failed" + | :"agent.environment.ready" + | :"agent.environment.failed" | :"agent.session.created" | :"agent.session.action_required" | :"agent.session.in_progress" @@ -103,6 +105,8 @@ module OpenAI REALTIME_CALL_INCOMING: :"realtime.call.incoming" VIDEO_COMPLETED: :"video.completed" VIDEO_FAILED: :"video.failed" + AGENT_ENVIRONMENT_READY: :"agent.environment.ready" + AGENT_ENVIRONMENT_FAILED: :"agent.environment.failed" AGENT_SESSION_CREATED: :"agent.session.created" AGENT_SESSION_ACTION_REQUIRED: :"agent.session.action_required" AGENT_SESSION_IN_PROGRESS: :"agent.session.in_progress" diff --git a/sig/openai/resources/beta/agents/environments.rbs b/sig/openai/resources/beta/agents/environments.rbs index f1e11c398..329090296 100644 --- a/sig/openai/resources/beta/agents/environments.rbs +++ b/sig/openai/resources/beta/agents/environments.rbs @@ -7,11 +7,26 @@ module OpenAI attr_reader templates: OpenAI::Resources::Beta::Agents::Environments::Templates + def create: ( + environment: OpenAI::Beta::Agents::EnvironmentCreateParams::Environment, + ?vault_ids: ::Array[String]?, + ?idempotency_key: String, + ?request_options: OpenAI::request_opts + ) -> OpenAI::Beta::Agents::EnvironmentInfo + def retrieve: ( String environment_id, ?request_options: OpenAI::request_opts ) -> OpenAI::Beta::Agents::EnvironmentInfo + def list: ( + ?after: String, + ?limit: Integer, + ?order: OpenAI::Models::Beta::Agents::EnvironmentListParams::order, + ?type: OpenAI::Models::Beta::Agents::EnvironmentListParams::type_, + ?request_options: OpenAI::request_opts + ) -> OpenAI::Internal::CursorPage[OpenAI::Beta::Agents::EnvironmentInfo] + def initialize: (client: OpenAI::Client) -> void end end diff --git a/sig/openai/resources/webhooks.rbs b/sig/openai/resources/webhooks.rbs index a1797a008..0c539de2b 100644 --- a/sig/openai/resources/webhooks.rbs +++ b/sig/openai/resources/webhooks.rbs @@ -50,7 +50,9 @@ module OpenAI String payload, ?Hash[String | Symbol, String] headers, ?String? webhook_secret - ) -> (OpenAI::Webhooks::AgentSessionActionRequiredWebhookEvent + ) -> (OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent + | OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent + | OpenAI::Webhooks::AgentSessionActionRequiredWebhookEvent | OpenAI::Webhooks::AgentSessionCreatedWebhookEvent | OpenAI::Webhooks::AgentSessionFailedWebhookEvent | OpenAI::Webhooks::AgentSessionIdleWebhookEvent diff --git a/test/openai/helpers/webhook_verification_test.rb b/test/openai/helpers/webhook_verification_test.rb index 1bae4cc0c..885e78a50 100644 --- a/test/openai/helpers/webhook_verification_test.rb +++ b/test/openai/helpers/webhook_verification_test.rb @@ -178,8 +178,10 @@ def test_unwrap_sip_media_security end end - def test_unwrap_signed_agent_session_events_and_nested_payloads + def test_unwrap_signed_agent_events_and_nested_payloads event_types = { + "agent.environment.ready" => OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent, + "agent.environment.failed" => OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent, "agent.session.action_required" => OpenAI::Webhooks::AgentSessionActionRequiredWebhookEvent, "agent.session.created" => OpenAI::Webhooks::AgentSessionCreatedWebhookEvent, "agent.session.in_progress" => OpenAI::Webhooks::AgentSessionInProgressWebhookEvent, @@ -191,7 +193,7 @@ def test_unwrap_signed_agent_session_events_and_nested_payloads data = {id: "sess_synthetic"} if event_type == "agent.session.action_required" data[:required_action] = {type: "function_call"} - else + elsif event_type.start_with?("agent.session.") data.merge!(environment_type: "synthetic", environment_id: "env_synthetic") data[:connect] = {remote_url: "https://example.test/synthetic"} if event_type == "agent.session.created" end @@ -215,7 +217,7 @@ def test_unwrap_signed_agent_session_events_and_nested_payloads if event_type == "agent.session.action_required" assert_instance_of(event_class::Data::RequiredAction, event.data.required_action) assert_equal(:function_call, event.data.required_action.type) - else + elsif event_type.start_with?("agent.session.") assert_equal("synthetic", event.data.environment_type) assert_equal("env_synthetic", event.data.environment_id) if event_type == "agent.session.created" diff --git a/test/openai/prewarm_request_headers_test.rb b/test/openai/prewarm_request_headers_test.rb new file mode 100644 index 000000000..c9123cfbf --- /dev/null +++ b/test/openai/prewarm_request_headers_test.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true + +require_relative "test_helper" + +class OpenAI::Test::PrewarmRequestHeadersTest < Minitest::Test + extend Minitest::Serial + include WebMock::API + + def before_all + super + WebMock.enable! + end + + def after_all + WebMock.disable! + super + end + + def teardown + WebMock.reset! + super + end + + def test_create_preserves_defaults_and_caller_header_precedence + assert_request_headers(:post) + end + + def test_list_preserves_defaults_and_caller_header_precedence + assert_request_headers(:get) + end + + private + + def assert_request_headers(method) + client = OpenAI::Client.new(base_url: "http://localhost", api_key: "synthetic", max_retries: 0) + [{}, {"X-Request-ID" => "synthetic-request"}, {"openai-beta" => "caller-override"}].each do |extra_headers| + captured = nil + payload = if method == :post + {id: "env_test", object: "agent.environment", type: "openai_hosted", status: "ready"} + else + {object: "list", data: [], has_more: false, first_id: nil, last_id: nil} + end + + request = stub_request(method, "http://localhost/agents/environments").to_return do |outgoing| + captured = outgoing.headers.transform_keys(&:downcase) + { + status: method == :post ? 201 : 200, + headers: {"content-type" => "application/json"}, + body: JSON.generate(payload) + } + end + + options = extra_headers.empty? ? {} : {extra_headers: extra_headers} + if method == :post + client.beta.agents.environments.create( + environment: {type: :openai_hosted}, + idempotency_key: "synthetic-idempotency", + request_options: options + ) + else + client.beta.agents.environments.list(request_options: options) + end + + assert_requested(request, times: 1) + assert_equal(extra_headers.fetch("openai-beta", "agents=v1"), captured.fetch("openai-beta")) + assert_equal("synthetic-request", captured.fetch("x-request-id")) if extra_headers.key?("X-Request-ID") + assert_equal("synthetic-idempotency", captured.fetch("idempotency-key")) if method == :post + WebMock.reset! + end + end +end diff --git a/test/openai/resources/beta/agents/environments_test.rb b/test/openai/resources/beta/agents/environments_test.rb index 0f37deb47..d3c72cfae 100644 --- a/test/openai/resources/beta/agents/environments_test.rb +++ b/test/openai/resources/beta/agents/environments_test.rb @@ -3,6 +3,26 @@ require_relative "../../../test_helper" class OpenAI::Test::Resources::Beta::Agents::EnvironmentsTest < OpenAI::Test::ResourceTest + def test_create_required_params + response = @openai.beta.agents.environments.create(environment: {type: :openai_hosted}) + + assert_pattern do + response => OpenAI::Beta::Agents::EnvironmentInfo + end + + assert_pattern do + response => { + id: String, + files: ^(OpenAI::Internal::Type::ArrayOf[union: OpenAI::Beta::HostedEnvironmentFile]), + object: Symbol, + plugins: ^(OpenAI::Internal::Type::ArrayOf[OpenAI::Beta::HostedPlugin]), + skills: ^(OpenAI::Internal::Type::ArrayOf[union: OpenAI::Beta::HostedSkill]), + status: OpenAI::Beta::Agents::EnvironmentInfo::Status, + type: OpenAI::Beta::Agents::EnvironmentInfo::Type + } + end + end + def test_retrieve response = @openai.beta.agents.environments.retrieve("environment_id") @@ -22,4 +42,31 @@ def test_retrieve } end end + + def test_list + response = @openai.beta.agents.environments.list + + assert_pattern do + response => OpenAI::Internal::CursorPage + end + + row = response.to_enum.first + return if row.nil? + + assert_pattern do + row => OpenAI::Beta::Agents::EnvironmentInfo + end + + assert_pattern do + row => { + id: String, + files: ^(OpenAI::Internal::Type::ArrayOf[union: OpenAI::Beta::HostedEnvironmentFile]), + object: Symbol, + plugins: ^(OpenAI::Internal::Type::ArrayOf[OpenAI::Beta::HostedPlugin]), + skills: ^(OpenAI::Internal::Type::ArrayOf[union: OpenAI::Beta::HostedSkill]), + status: OpenAI::Beta::Agents::EnvironmentInfo::Status, + type: OpenAI::Beta::Agents::EnvironmentInfo::Type + } + end + end end