Class: Aidp::PromptOptimization::CompositionResult

Inherits:
Object
  • Object
show all
Defined in:
lib/aidp/prompt_optimization/context_composer.rb

Overview

Result of context composition

Contains selected fragments and composition statistics

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(selected_fragments:, total_tokens:, budget:, excluded_count:, average_score:) ⇒ CompositionResult

Returns a new instance of CompositionResult.



211
212
213
214
215
216
217
# File 'lib/aidp/prompt_optimization/context_composer.rb', line 211

def initialize(selected_fragments:, total_tokens:, budget:, excluded_count:, average_score:)
  @selected_fragments = selected_fragments
  @total_tokens = total_tokens
  @budget = budget
  @excluded_count = excluded_count
  @average_score = average_score
end

Instance Attribute Details

#average_scoreObject (readonly)

Returns the value of attribute average_score.



209
210
211
# File 'lib/aidp/prompt_optimization/context_composer.rb', line 209

def average_score
  @average_score
end

#budgetObject (readonly)

Returns the value of attribute budget.



209
210
211
# File 'lib/aidp/prompt_optimization/context_composer.rb', line 209

def budget
  @budget
end

#excluded_countObject (readonly)

Returns the value of attribute excluded_count.



209
210
211
# File 'lib/aidp/prompt_optimization/context_composer.rb', line 209

def excluded_count
  @excluded_count
end

#selected_fragmentsObject (readonly)

Returns the value of attribute selected_fragments.



209
210
211
# File 'lib/aidp/prompt_optimization/context_composer.rb', line 209

def selected_fragments
  @selected_fragments
end

#total_tokensObject (readonly)

Returns the value of attribute total_tokens.



209
210
211
# File 'lib/aidp/prompt_optimization/context_composer.rb', line 209

def total_tokens
  @total_tokens
end

Instance Method Details

#budget_utilizationFloat

Calculate budget utilization percentage

Returns:

  • (Float)

    Percentage used (0.0-100.0)



222
223
224
225
226
# File 'lib/aidp/prompt_optimization/context_composer.rb', line 222

def budget_utilization
  return 0.0 if @budget.zero?

  ((@total_tokens.to_f / @budget) * 100).round(2)
end

#fragments_by_type(type) ⇒ Array<Hash>

Get fragments by type

Parameters:

  • type (Symbol)

    Fragment type (:style_guide, :template, :code)

Returns:

  • (Array<Hash>)

    Fragments of specified type



246
247
248
249
250
251
252
253
254
255
256
257
258
259
# File 'lib/aidp/prompt_optimization/context_composer.rb', line 246

def fragments_by_type(type)
  @selected_fragments.select do |item|
    case type
    when :style_guide
      item[:fragment].class.name.include?("Fragment") && item[:fragment].respond_to?(:heading)
    when :template
      item[:fragment].respond_to?(:category) && !item[:fragment].respond_to?(:type)
    when :code
      item[:fragment].respond_to?(:type) && item[:fragment].respond_to?(:file_path)
    else
      false
    end
  end
end

#over_budget?Boolean

Check if budget was exceeded

Returns:

  • (Boolean)

    True if over budget



238
239
240
# File 'lib/aidp/prompt_optimization/context_composer.rb', line 238

def over_budget?
  @total_tokens > @budget
end

#selected_countInteger

Get count of selected fragments

Returns:

  • (Integer)

    Number of selected fragments



231
232
233
# File 'lib/aidp/prompt_optimization/context_composer.rb', line 231

def selected_count
  @selected_fragments.length
end

#summaryHash

Get summary statistics

Returns:

  • (Hash)

    Composition statistics



264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
# File 'lib/aidp/prompt_optimization/context_composer.rb', line 264

def summary
  {
    selected_count: selected_count,
    excluded_count: @excluded_count,
    total_tokens: @total_tokens,
    budget: @budget,
    utilization: budget_utilization,
    average_score: @average_score,
    over_budget: over_budget?,
    by_type: {
      style_guide: fragments_by_type(:style_guide).count,
      templates: fragments_by_type(:template).count,
      code: fragments_by_type(:code).count
    }
  }
end

#to_sObject



281
282
283
# File 'lib/aidp/prompt_optimization/context_composer.rb', line 281

def to_s
  "CompositionResult<#{selected_count} fragments, #{@total_tokens}/#{@budget} tokens (#{budget_utilization}%)>"
end