Class: Roast::Cogs::Agent::Providers::Claude::Messages::ResultMessage

Inherits:
Roast::Cogs::Agent::Providers::Claude::Message show all
Defined in:
lib/roast/cogs/agent/providers/claude/messages/result_message.rb

Constant Summary collapse

IGNORED_FIELDS =
[
  :duration_api_ms,
  :permission_denials,
  :stop_reason,
  :usage,
  :uuid,
].freeze

Instance Attribute Summary collapse

Attributes inherited from Roast::Cogs::Agent::Providers::Claude::Message

#error, #session_id, #type, #unparsed

Instance Method Summary collapse

Methods inherited from Roast::Cogs::Agent::Providers::Claude::Message

#format, from_hash, from_json

Constructor Details

#initialize(type:, hash:) ⇒ ResultMessage

: (type: Symbol, hash: Hash[Symbol, untyped]) -> void



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/roast/cogs/agent/providers/claude/messages/result_message.rb', line 29

def initialize(type:, hash:)
  subtype = hash.delete(:subtype)
  @content = hash.delete(:result) || ""
  @success = hash.delete(:success) || subtype == "success"
  if hash.delete(:is_error) || subtype == "error"
    @content = @content.presence || hash.dig(:error, :message) || "Unknown error"
    hash.delete(:error)
  end

  @stats = Stats.new
  @stats.duration_ms = hash.delete(:duration_ms)
  @stats.num_turns = hash.delete(:num_turns)
  hash.delete(:modelUsage)&.each do |model, h|
    usage = Usage.new
    usage.input_tokens = h[:inputTokens]
    usage.output_tokens = h[:outputTokens]
    usage.cost_usd = h[:costUSD]
    @stats.model_usage[model] = usage
    @stats.usage.input_tokens = (@stats.usage.input_tokens || 0) + (usage.input_tokens || 0)
    @stats.usage.output_tokens = (@stats.usage.output_tokens || 0) + (usage.output_tokens || 0)
  end
  @stats.usage.cost_usd = hash.delete(:total_cost_usd)
  hash.except!(*IGNORED_FIELDS)
  super(type:, hash:)
end

Instance Attribute Details

#contentObject (readonly)

: String



20
21
22
# File 'lib/roast/cogs/agent/providers/claude/messages/result_message.rb', line 20

def content
  @content
end

#statsObject (readonly)

: Stats



26
27
28
# File 'lib/roast/cogs/agent/providers/claude/messages/result_message.rb', line 26

def stats
  @stats
end

#successObject (readonly)

: bool



23
24
25
# File 'lib/roast/cogs/agent/providers/claude/messages/result_message.rb', line 23

def success
  @success
end