Class: Phronomy::Agent::TokenBudgetResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/phronomy/agent/token_budget_resolver.rb

Overview

Resolves a TokenBudget from the effective model configuration that will actually be materialized for one LLM call.

Instance Method Summary collapse

Constructor Details

#initialize(agent:) ⇒ TokenBudgetResolver

Returns a new instance of TokenBudgetResolver.



8
9
10
# File 'lib/phronomy/agent/token_budget_resolver.rb', line 8

def initialize(agent:)
  @agent = agent
end

Instance Method Details

#resolve(model_config) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/phronomy/agent/token_budget_resolver.rb', line 12

def resolve(model_config)
  config = stringify_keys(model_config)
  model_name = config["model"]
  explicit_window = integer_or_nil(config["context_window"])
  explicit_reserve = integer_or_nil(config["max_output_tokens"])

  if explicit_window
    reserve = explicit_reserve || configured_default_reserve
    return build_budget(explicit_window, reserve, model_name)
  end

  return nil unless model_name

  model = RubyLLM.models.find(model_name)
  return nil unless model

  context_window = model.context_window.to_i
  registry_max = model.max_output_tokens.to_i
  reserve = explicit_reserve || configured_default_reserve
  reserve ||= registry_max if registry_max.positive? && registry_max < context_window
  build_budget(context_window, reserve, model_name)
rescue RubyLLM::ModelNotFoundError
  nil
end