Class: ActiveAgent::Providers::OpenAI::Responses::Request
- Inherits:
-
SimpleDelegator
- Object
- SimpleDelegator
- ActiveAgent::Providers::OpenAI::Responses::Request
- Defined in:
- lib/active_agent/providers/open_ai/responses/request.rb
Overview
Wraps OpenAI gem’s ResponseCreateParams with field mapping and normalization
Delegates to OpenAI::Models::Responses::ResponseCreateParams while providing compatibility layer for common format fields and content normalization:
-
‘messages` → `input`
-
‘response_format` → `text` (via ResponseTextConfig)
-
Instructions array joined to string
Constant Summary collapse
- DEFAULTS =
Default parameter values applied during initialization
{ service_tier: "auto", store: true, temperature: 1.0, top_p: 1.0, truncation: "disabled", parallel_tool_calls: true, background: false, include: [] }.freeze
Instance Attribute Summary collapse
- #response_format ⇒ Hash? readonly
- #stream ⇒ Boolean? readonly
Instance Method Summary collapse
-
#initialize(**params) ⇒ Request
constructor
Creates a new response creation request.
- #messages ⇒ Array, ... (also: #message)
-
#messages=(value) ⇒ void
(also: #message=)
Sets input messages with normalization.
-
#serialize ⇒ Hash
Serializes request for API call.
Constructor Details
#initialize(**params) ⇒ Request
Creates a new response creation request
Maps common format fields to Responses API format:
-
‘messages` → `input`
-
‘response_format` → `text` parameter
-
Instructions array → joined string
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/active_agent/providers/open_ai/responses/request.rb', line 50 def initialize(**params) # Step 1: Extract custom fields @stream = params[:stream] @response_format = params.delete(:response_format) # Step 2: Map common format 'messages' to OpenAI Responses 'input' if params.key?(:messages) params[:input] = params.delete(:messages) end # Step 3: Join instructions array into string (like Chat API) if params[:instructions].is_a?(Array) params[:instructions] = params[:instructions].join("\n") end # Step 4: Map response_format to text parameter for Responses API if @response_format params[:text] = Responses::Transforms.normalize_response_format(@response_format) end # Step 5: Apply defaults params = apply_defaults(params) # Step 6: Normalize input content for gem compatibility params[:input] = Responses::Transforms.normalize_input(params[:input]) if params[:input] # Step 7: Normalize tools and tool_choice from common format params[:tools] = Responses::Transforms.normalize_tools(params[:tools]) if params[:tools] params[:tool_choice] = Responses::Transforms.normalize_tool_choice(params[:tool_choice]) if params[:tool_choice] # Step 8: Normalize MCP servers from common format (mcps parameter) # OpenAI treats MCP servers as a special type of tool in the tools array mcp_param = params[:mcps] || params[:mcp_servers] if mcp_param&.any? normalized_mcp_tools = Responses::Transforms.normalize_mcp_servers(mcp_param) params.delete(:mcps) params.delete(:mcp_servers) # Merge MCP servers into tools array params[:tools] = (params[:tools] || []) + normalized_mcp_tools end # Step 9: Create gem model - delegates to OpenAI gem gem_model = ::OpenAI::Models::Responses::ResponseCreateParams.new(**params) # Step 10: Delegate all method calls to gem model super(gem_model) rescue ArgumentError => e # Re-raise with more context raise ArgumentError, "Invalid OpenAI Responses request parameters: #{e.}" end |
Instance Attribute Details
#response_format ⇒ Hash? (readonly)
33 34 35 |
# File 'lib/active_agent/providers/open_ai/responses/request.rb', line 33 def response_format @response_format end |
#stream ⇒ Boolean? (readonly)
30 31 32 |
# File 'lib/active_agent/providers/open_ai/responses/request.rb', line 30 def stream @stream end |
Instance Method Details
#messages ⇒ Array, ... Also known as: message
112 113 114 |
# File 'lib/active_agent/providers/open_ai/responses/request.rb', line 112 def __getobj__.instance_variable_get(:@data)[:input] end |
#messages=(value) ⇒ void Also known as: message=
This method returns an undefined value.
Sets input messages with normalization
120 121 122 123 |
# File 'lib/active_agent/providers/open_ai/responses/request.rb', line 120 def (value) normalized_value = Responses::Transforms.normalize_input(value) __getobj__.instance_variable_get(:@data)[:input] = normalized_value end |
#serialize ⇒ Hash
Serializes request for API call
Uses gem’s JSON serialization and delegates cleanup to Transforms module.
106 107 108 109 |
# File 'lib/active_agent/providers/open_ai/responses/request.rb', line 106 def serialize hash = Responses::Transforms.gem_to_hash(__getobj__) Responses::Transforms.cleanup_serialized_request(hash, DEFAULTS, __getobj__) end |