Module: ActiveAgent::Providers::Ollama::Chat::Transforms
- Defined in:
- lib/active_agent/providers/ollama/chat/transforms.rb
Overview
Provides transformation methods for normalizing Ollama parameters to work with OpenAI gem’s native format plus Ollama extensions
Leverages OpenAI::Chat::Transforms for base message normalization while adding handling for Ollama-specific parameters like format, options, keep_alive, and raw mode.
Class Method Summary collapse
-
.cleanup_serialized_request(openai_hash, ollama_params, defaults, gem_object) ⇒ Hash
Cleans up serialized request for API submission.
-
.gem_to_hash(gem_object) ⇒ Hash
Converts gem model object to hash via JSON round-trip.
-
.group_same_role_messages(messages) ⇒ Array<Hash>
Groups consecutive same-role messages for Ollama.
-
.normalize_instructions(instructions) ⇒ Array<OpenAI::Models::Chat::ChatCompletionMessageParam>
Normalizes instructions using OpenAI transforms.
-
.normalize_messages(messages) ⇒ Array<OpenAI::Models::Chat::ChatCompletionMessageParam>?
Normalizes messages using OpenAI transforms.
-
.normalize_params(params) ⇒ Array<Hash, Hash>
Normalizes all request parameters for Ollama API.
Class Method Details
.cleanup_serialized_request(openai_hash, ollama_params, defaults, gem_object) ⇒ Hash
Cleans up serialized request for API submission
Merges OpenAI-compatible params with Ollama-specific params. Also groups consecutive same-role messages as required by Ollama.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/active_agent/providers/ollama/chat/transforms.rb', line 76 def cleanup_serialized_request(openai_hash, ollama_params, defaults, gem_object) # Start with OpenAI cleanup cleaned = OpenAI::Chat::Transforms.cleanup_serialized_request(openai_hash, defaults, gem_object) # Group consecutive same-role messages for Ollama if cleaned[:messages] cleaned[:messages] = (cleaned[:messages]) end # Merge Ollama-specific params, but skip default values ollama_params.each do |key, value| # Skip if value is nil, empty, or matches the default next if value.nil? next if value.respond_to?(:empty?) && value.empty? next if defaults.key?(key) && defaults[key] == value cleaned[key] = value end cleaned end |
.gem_to_hash(gem_object) ⇒ Hash
Converts gem model object to hash via JSON round-trip
22 23 24 |
# File 'lib/active_agent/providers/ollama/chat/transforms.rb', line 22 def gem_to_hash(gem_object) OpenAI::Chat::Transforms.gem_to_hash(gem_object) end |
.group_same_role_messages(messages) ⇒ Array<Hash>
Groups consecutive same-role messages for Ollama
Ollama requires consecutive messages with the same role to be merged by concatenating their content.
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/active_agent/providers/ollama/chat/transforms.rb', line 105 def () return [] if .nil? || .empty? grouped = [] .each do || if grouped.empty? || grouped.last[:role] != [:role] grouped << .deep_dup else # Concatenate content for same-role messages last_content = grouped.last[:content] new_content = [:content] grouped.last[:content] = if last_content.is_a?(Array) && new_content.is_a?(Array) last_content + new_content elsif last_content.is_a?(String) && new_content.is_a?(String) last_content + new_content else # Mix of types, convert to array Array(last_content) + Array(new_content) end end end grouped end |
.normalize_instructions(instructions) ⇒ Array<OpenAI::Models::Chat::ChatCompletionMessageParam>
Normalizes instructions using OpenAI transforms
62 63 64 |
# File 'lib/active_agent/providers/ollama/chat/transforms.rb', line 62 def normalize_instructions(instructions) OpenAI::Chat::Transforms.normalize_instructions(instructions) end |
.normalize_messages(messages) ⇒ Array<OpenAI::Models::Chat::ChatCompletionMessageParam>?
Normalizes messages using OpenAI transforms
54 55 56 |
# File 'lib/active_agent/providers/ollama/chat/transforms.rb', line 54 def () OpenAI::Chat::Transforms.() end |
.normalize_params(params) ⇒ Array<Hash, Hash>
Normalizes all request parameters for Ollama API
Handles both OpenAI-compatible parameters and Ollama-specific extensions. Ollama-specific params (format, options, keep_alive, raw) are extracted and returned separately for manual serialization.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/active_agent/providers/ollama/chat/transforms.rb', line 34 def normalize_params(params) params = params.dup # Extract Ollama-specific parameters ollama_params = {} ollama_params[:format] = params.delete(:format) if params.key?(:format) ollama_params[:options] = params.delete(:options) if params.key?(:options) ollama_params[:keep_alive] = params.delete(:keep_alive) if params.key?(:keep_alive) ollama_params[:raw] = params.delete(:raw) if params.key?(:raw) # Use OpenAI transforms for the base parameters openai_params = OpenAI::Chat::Transforms.normalize_params(params) [ openai_params, ollama_params ] end |