Class: ActiveAgent::Providers::OpenRouter::Request

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
lib/active_agent/providers/open_router/request.rb

Overview

Wraps OpenAI gem’s CompletionCreateParams with OpenRouter-specific extensions

Delegates to OpenAI::Models::Chat::CompletionCreateParams for OpenAI-compatible parameters while adding support for OpenRouter-specific features like plugins, provider preferences, model fallbacks, and extended sampling parameters.

OpenRouter-specific parameters:

  • plugins: Array of plugin configurations (e.g., file-parser for PDFs)

  • provider: ProviderPreferences object with require_parameters, data_collection, etc.

  • transforms: Array of transformation strings

  • models: Array of model strings for fallback routing

  • route: Routing strategy (default: “fallback”)

  • top_k, min_p, top_a, repetition_penalty: Extended sampling parameters

Examples:

Basic usage

request = Request.new(
  model: "openai/gpt-4",
  messages: [{role: "user", content: "Hello"}]
)

With OpenRouter-specific features

request = Request.new(
  model: "openai/gpt-4",
  messages: [{role: "user", content: "Hello"}],
  models: ["anthropic/claude-3", "openai/gpt-4"],
  provider: {require_parameters: true}
)

Constant Summary collapse

DEFAULTS =

Default parameter values

{
  frequency_penalty: 0,
  logprobs: false,
  n: 1,
  presence_penalty: 0,
  temperature: 1,
  top_p: 1,
  route: "fallback",
  models: [],
  transforms: []
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(**params) ⇒ Request

Creates a new OpenRouter request

Parameters:

  • params (Hash)

    request parameters

Options Hash (**params):

  • :model (String)

    model identifier (default: “openrouter/auto”)

  • :messages (Array, String, Hash)

    required conversation messages

  • :plugins (Array)

    plugin configurations

  • :provider (Hash)

    provider preferences

  • :transforms (Array<String>)

    transformation strings

  • :models (Array<String>)

    fallback model list

  • :route (String)

    routing strategy

  • :top_k (Integer)

    sampling parameter

  • :min_p (Float)

    minimum probability sampling

  • :top_a (Float)

    top-a sampling

  • :repetition_penalty (Float)

    repetition penalty

Raises:

  • (ArgumentError)

    when parameters are invalid



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/active_agent/providers/open_router/request.rb', line 73

def initialize(**params)
  # Step 1: Extract stream flag
  @stream = params[:stream]

  # Step 2: Apply defaults
  params = apply_defaults(params)

  # Step 3: Normalize parameters and split into OpenAI vs OpenRouter-specific
  # This handles response_format special logic for structured output
  openai_params, @openrouter_params = Transforms.normalize_params(params)

  # Step 4: Create gem model with OpenAI-compatible params
  gem_model = ::OpenAI::Models::Chat::CompletionCreateParams.new(**openai_params)

  # Step 5: Delegate to the gem model
  super(gem_model)
rescue ArgumentError => e
  raise ArgumentError, "Invalid OpenRouter request parameters: #{e.message}"
end

Instance Attribute Details

#openrouter_paramsHash (readonly)

Returns OpenRouter-specific parameters.

Returns:

  • (Hash)

    OpenRouter-specific parameters



56
57
58
# File 'lib/active_agent/providers/open_router/request.rb', line 56

def openrouter_params
  @openrouter_params
end

#streamBoolean? (readonly)

Returns:

  • (Boolean, nil)


53
54
55
# File 'lib/active_agent/providers/open_router/request.rb', line 53

def stream
  @stream
end

Instance Method Details

#instructions=(*values) ⇒ void

This method returns an undefined value.

Sets instructions as developer messages

Prepends developer messages to the messages array.

Parameters:

  • values (Array<String>, String)


145
146
147
148
149
# File 'lib/active_agent/providers/open_router/request.rb', line 145

def instructions=(*values)
  instructions_messages = OpenAI::Chat::Transforms.normalize_instructions(values.flatten)
  current_messages = messages || []
  self.messages = instructions_messages + current_messages
end

#messageArray<Hash>?

Alias for messages (common format compatibility)

Returns:

  • (Array<Hash>, nil)


129
130
131
# File 'lib/active_agent/providers/open_router/request.rb', line 129

def message
  messages
end

#message=(value) ⇒ void

This method returns an undefined value.

Parameters:

  • value (Array, String, Hash)


135
136
137
# File 'lib/active_agent/providers/open_router/request.rb', line 135

def message=(value)
  self.messages = value
end

#messagesArray<Hash>?

Returns:

  • (Array<Hash>, nil)


107
108
109
# File 'lib/active_agent/providers/open_router/request.rb', line 107

def messages
  __getobj__.instance_variable_get(:@data)[:messages]
end

#messages=(value) ⇒ void

This method returns an undefined value.

Sets messages with normalization

Merges new messages with existing ones for compatibility.

Parameters:

  • value (Array, String, Hash)


117
118
119
120
121
122
123
124
# File 'lib/active_agent/providers/open_router/request.rb', line 117

def messages=(value)
  normalized_value = Transforms.normalize_messages(value)
  current_messages = messages || []

  # Merge behavior for OpenRouter compatibility
  merged = current_messages | Array(normalized_value)
  __getobj__.instance_variable_get(:@data)[:messages] = merged
end

#modelsArray Also known as: fallback_models

Accessor for fallback models

Returns:

  • (Array)


219
220
221
# File 'lib/active_agent/providers/open_router/request.rb', line 219

def models
  @openrouter_params[:models] || []
end

#models=(value) ⇒ void Also known as: fallback_models=

This method returns an undefined value.

Sets fallback models

Parameters:

  • value (Array)


227
228
229
# File 'lib/active_agent/providers/open_router/request.rb', line 227

def models=(value)
  @openrouter_params[:models] = value
end

#pluginsArray?

Accessor for OpenRouter plugins

Returns:

  • (Array, nil)


189
190
191
# File 'lib/active_agent/providers/open_router/request.rb', line 189

def plugins
  @openrouter_params[:plugins]
end

#plugins=(value) ⇒ void

This method returns an undefined value.

Sets plugins

Parameters:

  • value (Array)


197
198
199
# File 'lib/active_agent/providers/open_router/request.rb', line 197

def plugins=(value)
  @openrouter_params[:plugins] = value
end

#providerHash?

Accessor for OpenRouter-specific provider preferences

Returns:

  • (Hash, nil)


174
175
176
# File 'lib/active_agent/providers/open_router/request.rb', line 174

def provider
  @openrouter_params[:provider]
end

#provider=(value) ⇒ void

This method returns an undefined value.

Sets provider preferences

Parameters:

  • value (Hash)


182
183
184
# File 'lib/active_agent/providers/open_router/request.rb', line 182

def provider=(value)
  @openrouter_params[:provider] = value
end

#routeString

Accessor for routing strategy

Returns:

  • (String)


238
239
240
# File 'lib/active_agent/providers/open_router/request.rb', line 238

def route
  @openrouter_params[:route] || DEFAULTS[:route]
end

#route=(value) ⇒ void

This method returns an undefined value.

Sets routing strategy

Parameters:

  • value (String)


246
247
248
# File 'lib/active_agent/providers/open_router/request.rb', line 246

def route=(value)
  @openrouter_params[:route] = value
end

#serializeHash

Serializes request for API submission

Merges OpenAI-compatible parameters with OpenRouter-specific extensions.

Returns:

  • (Hash)

    cleaned request hash



98
99
100
101
102
103
104
# File 'lib/active_agent/providers/open_router/request.rb', line 98

def serialize
  # Get OpenAI params from gem model
  openai_hash = Transforms.gem_to_hash(__getobj__)

  # Merge with OpenRouter-specific params
  Transforms.cleanup_serialized_request(openai_hash, @openrouter_params, DEFAULTS, __getobj__)
end

#tool_choiceString, ...

Gets tool_choice bypassing gem validation

OpenRouter supports “any” which isn’t valid in OpenAI gem types.

Returns:

  • (String, Hash, nil)


156
157
158
# File 'lib/active_agent/providers/open_router/request.rb', line 156

def tool_choice
  __getobj__.instance_variable_get(:@data)[:tool_choice]
end

#tool_choice=(value) ⇒ void

This method returns an undefined value.

Sets tool_choice bypassing gem validation

OpenRouter supports “any” which isn’t valid in OpenAI gem types, so we bypass the gem’s type validation by setting @data directly.

Parameters:

  • value (String, Hash, nil)


167
168
169
# File 'lib/active_agent/providers/open_router/request.rb', line 167

def tool_choice=(value)
  __getobj__.instance_variable_get(:@data)[:tool_choice] = value
end

#transformsArray

Accessor for OpenRouter transforms

Returns:

  • (Array)


204
205
206
# File 'lib/active_agent/providers/open_router/request.rb', line 204

def transforms
  @openrouter_params[:transforms] || []
end

#transforms=(value) ⇒ void

This method returns an undefined value.

Sets transforms

Parameters:

  • value (Array)


212
213
214
# File 'lib/active_agent/providers/open_router/request.rb', line 212

def transforms=(value)
  @openrouter_params[:transforms] = value
end