Class: ActiveHarness::ModelList

Inherits:
Object
  • Object
show all
Defined in:
lib/active_harness/agent/models.rb

Overview


ModelList — mutable proxy returned by agent.models


Instance Method Summary collapse

Constructor Details

#initialize(base_models) ⇒ ModelList

Returns a new instance of ModelList.



75
76
77
78
79
# File 'lib/active_harness/agent/models.rb', line 75

def initialize(base_models)
  @base      = Array(base_models)
  @prepended = []
  @appended  = []
end

Instance Method Details

#insert(position, model) ⇒ Object

Insert a single model entry at an arbitrary position in the final chain. Position 0 is the same as prepend; -1 appends after the last element.

agent.models.insert(0,  { provider: :openrouter, model: "fast-model" })
agent.models.insert(2,  { provider: :openrouter, model: "mid-model" })
agent.models.insert(-1, { provider: :openrouter, model: "last-resort" })


110
111
112
113
114
115
116
117
# File 'lib/active_harness/agent/models.rb', line 110

def insert(position, model)
  to_a.tap { |list| list.insert(position, model) }.then do |new_list|
    @prepended = []
    @base      = new_list
    @appended  = []
  end
  self
end

#inspectObject



124
125
126
# File 'lib/active_harness/agent/models.rb', line 124

def inspect
  "#<ModelList prepended=#{@prepended.size} base=#{@base.size} appended=#{@appended.size}>"
end

#prepend(models) ⇒ Object

Add models BEFORE the existing chain. Calling multiple times keeps order (last prepend ends up first).



83
84
85
86
# File 'lib/active_harness/agent/models.rb', line 83

def prepend(models)
  @prepended = Array(models) + @prepended
  self
end

#push(models) ⇒ Object

Add models AFTER the existing chain.



89
90
91
92
# File 'lib/active_harness/agent/models.rb', line 89

def push(models)
  @appended += Array(models)
  self
end

#replace(models) ⇒ Object

Replace the entire chain, discarding prepended/appended too.

agent.models.replace([{ provider: :openrouter, model: "..." }])


97
98
99
100
101
102
# File 'lib/active_harness/agent/models.rb', line 97

def replace(models)
  @base      = Array(models)
  @prepended = []
  @appended  = []
  self
end

#to_aObject

Return the fully assembled list: prepended + base + appended.



120
121
122
# File 'lib/active_harness/agent/models.rb', line 120

def to_a
  @prepended + @base + @appended
end