Class: Ask::Agent::Middleware::DefaultSettings
- Defined in:
- lib/ask/agent/middleware/default_settings.rb
Overview
Injects default generation parameters for every LLM call.
Settings are merged into the request – user-supplied values always take precedence (they appear in the original request hash and are preserved).
Constant Summary collapse
- ALLOWED_KEYS =
Settings that are safe to merge into the provider chat request.
%i[ temperature max_tokens top_p top_k stop_sequences presence_penalty frequency_penalty seed ].freeze
Instance Method Summary collapse
- #around_request(provider, request) ⇒ Object
-
#initialize(**settings) ⇒ DefaultSettings
constructor
A new instance of DefaultSettings.
Constructor Details
#initialize(**settings) ⇒ DefaultSettings
Returns a new instance of DefaultSettings.
20 21 22 |
# File 'lib/ask/agent/middleware/default_settings.rb', line 20 def initialize(**settings) @settings = settings.select { |k, _v| ALLOWED_KEYS.include?(k) } end |
Instance Method Details
#around_request(provider, request) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/ask/agent/middleware/default_settings.rb', line 24 def around_request(provider, request) return yield if @settings.empty? merged = request.dup @settings.each do |key, value| merged[key] = value unless merged.key?(key) end # Re-invoke the chain with merged params. # We override the request for downstream middleware but still yield # to the original chain — the actual provider call in Chat#chat_with_retry # uses the **(@extra_params || {}) merged into the provider call, so # we must ensure our defaults are passed through. # # Instead of modifying the request shape, we inject defaults into # the :extra_params key which Chat already merges into the provider call. extra = (merged[:extra_params] || {}).merge(@settings) { |_k, orig, _default| orig } merged[:extra_params] = extra # Rebuild request to pass defaults through the chain yield end |