Class: Legion::CLI::Chat::Tools::SummarizeTraces
Class Method Summary
collapse
Methods inherited from Tools::Base
deferred, deferred?, description, error_response, extension, handle_exception, input_schema, log, mcp_category, mcp_tier, runner, sticky, tags, text_response, tool_name, trigger_words
Class Method Details
.call(query:) ⇒ Object
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/legion/cli/chat/tools/summarize_traces.rb', line 26
def self.call(query:)
require 'legion/trace_search'
result = Legion::TraceSearch.summarize(query)
return "Error: #{result[:error]}" if result[:error]
format_summary(result)
rescue LoadError
'Trace search unavailable (legion-llm or legion-data not loaded).'
rescue StandardError => e
Legion::Logging.warn("SummarizeTraces#execute failed: #{e.message}") if defined?(Legion::Logging)
"Error summarizing traces: #{e.message}"
end
|
59
60
61
62
63
64
|
# File 'lib/legion/cli/chat/tools/summarize_traces.rb', line 59
def self.format_status_counts(counts)
return nil if counts.nil? || counts.empty?
parts = counts.map { |status, count| "#{status}: #{count}" }
" Status: #{parts.join(', ')}"
end
|
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/legion/cli/chat/tools/summarize_traces.rb', line 39
def self.format_summary(data)
lines = ["Trace Summary (#{data[:total_records]} records):\n"]
lines << " Tokens: #{data[:total_tokens_in]} in / #{data[:total_tokens_out]} out"
lines << " Cost: $#{data[:total_cost]}"
lines << " Latency: avg #{data[:avg_latency_ms]}ms / max #{data[:max_latency_ms]}ms"
lines << format_time_range(data[:time_range])
lines << format_status_counts(data[:status_counts])
lines << format_top('Top Extensions', data[:top_extensions], :name)
lines << format_top('Top Workers', data[:top_workers], :id)
lines.compact.join("\n")
end
|
53
54
55
56
57
|
# File 'lib/legion/cli/chat/tools/summarize_traces.rb', line 53
def self.format_time_range(range)
return nil unless range && (range[:from] || range[:to])
" Time range: #{range[:from] || '?'} to #{range[:to] || '?'}"
end
|
66
67
68
69
70
71
|
# File 'lib/legion/cli/chat/tools/summarize_traces.rb', line 66
def self.format_top(title, items, key)
return nil if items.nil? || items.empty?
parts = items.map { |item| "#{item[key]} (#{item[:count]})" }
" #{title}: #{parts.join(', ')}"
end
|