Class: ActiveAgent::Providers::Ollama::Chat::Request

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

Overview

Wraps OpenAI gem’s CompletionCreateParams with Ollama-specific extensions

Delegates to OpenAI::Models::Chat::CompletionCreateParams for OpenAI-compatible parameters while adding support for Ollama-specific features like format, options, keep_alive, and raw mode.

Ollama-specific parameters:

  • format: Return response in JSON or as a JSON schema (String “json” or Hash)

  • options: Additional model parameters (Hash of key-value pairs)

  • keep_alive: Controls how long model stays in memory (String duration or Integer seconds)

  • raw: If true, no formatting applied to prompt (Boolean)

Examples:

Basic usage

request = Request.new(
  model: "llama2",
  messages: [{role: "user", content: "Hello"}]
)

With Ollama-specific features

request = Request.new(
  model: "llama2",
  messages: [{role: "user", content: "Hello"}],
  format: "json",
  options: {temperature: 0.7, num_predict: 100},
  keep_alive: "5m"
)

Constant Summary collapse

DEFAULTS =

Default parameter values

{
  frequency_penalty: 0,
  logprobs: false,
  n: 1,
  parallel_tool_calls: true,
  presence_penalty: 0,
  temperature: 1,
  top_p: 1,
  raw: false,
  keep_alive: "5m"
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(**params) ⇒ Request

Creates a new Ollama request

Parameters:

  • params (Hash)

    request parameters

Options Hash (**params):

  • :model (String)

    model identifier (required)

  • :messages (Array, String, Hash)

    required conversation messages

  • :format (String, Hash)

    JSON format (“json” or schema object)

  • :options (Hash)

    model-specific options

  • :keep_alive (String, Integer)

    memory duration

  • :raw (Boolean)

    raw prompt mode

Raises:

  • (ArgumentError)

    when parameters are invalid



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 67

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 Ollama-specific
  openai_params, @ollama_params = Transforms.normalize_params(params)

  # Step 4: Validate Ollama-specific parameters
  validate_format(@ollama_params[:format]) if @ollama_params[:format]
  validate_options(@ollama_params[:options]) if @ollama_params[:options]

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

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

Instance Attribute Details

#ollama_paramsHash (readonly)

Returns Ollama-specific parameters.

Returns:

  • (Hash)

    Ollama-specific parameters



55
56
57
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 55

def ollama_params
  @ollama_params
end

#streamBoolean? (readonly)

Returns:

  • (Boolean, nil)


52
53
54
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 52

def stream
  @stream
end

Instance Method Details

#formatString, ...

Accessor for Ollama format parameter

Returns:

  • (String, Hash, nil)


151
152
153
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 151

def format
  @ollama_params[:format]
end

#format=(value) ⇒ void

This method returns an undefined value.

Sets format parameter

Parameters:

  • value (String, Hash)


159
160
161
162
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 159

def format=(value)
  validate_format(value)
  @ollama_params[:format] = value
end

#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)


142
143
144
145
146
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 142

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

#keep_aliveString, ...

Accessor for keep_alive parameter

Returns:

  • (String, Integer, nil)


183
184
185
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 183

def keep_alive
  @ollama_params[:keep_alive] || DEFAULTS[:keep_alive]
end

#keep_alive=(value) ⇒ void

This method returns an undefined value.

Sets keep_alive parameter

Parameters:

  • value (String, Integer)


191
192
193
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 191

def keep_alive=(value)
  @ollama_params[:keep_alive] = value
end

#messageArray<Hash>?

Alias for messages (common format compatibility)

Returns:

  • (Array<Hash>, nil)


126
127
128
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 126

def message
  messages
end

#message=(value) ⇒ void

This method returns an undefined value.

Parameters:

  • value (Array, String, Hash)


132
133
134
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 132

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

#messagesArray<Hash>?

Returns:

  • (Array<Hash>, nil)


104
105
106
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 104

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)


114
115
116
117
118
119
120
121
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 114

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

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

#optionsHash?

Accessor for Ollama options parameter

Returns:

  • (Hash, nil)


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

def options
  @ollama_params[:options]
end

#options=(value) ⇒ void

This method returns an undefined value.

Sets options parameter

Parameters:

  • value (Hash)


175
176
177
178
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 175

def options=(value)
  validate_options(value)
  @ollama_params[:options] = value
end

#rawBoolean

Accessor for raw parameter

Returns:

  • (Boolean)


198
199
200
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 198

def raw
  @ollama_params[:raw] || DEFAULTS[:raw]
end

#raw=(value) ⇒ void

This method returns an undefined value.

Sets raw parameter

Parameters:

  • value (Boolean)


206
207
208
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 206

def raw=(value)
  @ollama_params[:raw] = value
end

#serializeHash

Serializes request for API submission

Merges OpenAI-compatible parameters with Ollama-specific extensions.

Returns:

  • (Hash)

    cleaned request hash



95
96
97
98
99
100
101
# File 'lib/active_agent/providers/ollama/chat/request.rb', line 95

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

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