Class: Brute::Providers::ShellResponse

Inherits:
Object
  • Object
show all
Includes:
LLM::Contract::Completion
Defined in:
lib/brute/providers/shell_response.rb

Overview

Synthetic completion response returned by Brute::Providers::Shell.

When command is present, the response contains a single assistant message with a “shell” tool call. The orchestrator picks it up and executes Brute::Tools::Shell through the normal pipeline.

When command is nil (tool results round-trip), the response contains an empty assistant message with no tool calls, causing the orchestrator loop to exit.

Instance Method Summary collapse

Constructor Details

#initialize(command: nil, model: "bash", tools: []) ⇒ ShellResponse

Returns a new instance of ShellResponse.



23
24
25
26
27
# File 'lib/brute/providers/shell_response.rb', line 23

def initialize(command: nil, model: "bash", tools: [])
  @command    = command
  @model_name = model
  @tools      = tools || []
end

Instance Method Details

#contentObject



73
74
75
# File 'lib/brute/providers/shell_response.rb', line 73

def content
  messages.find(&:assistant?)&.content
end

#content!Object



77
78
79
# File 'lib/brute/providers/shell_response.rb', line 77

def content!
  LLM.json.load(content)
end

#input_tokensObject



57
58
59
# File 'lib/brute/providers/shell_response.rb', line 57

def input_tokens
  0
end

#messagesObject Also known as: choices



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/brute/providers/shell_response.rb', line 29

def messages
  return [empty_assistant] if @command.nil?

  call_id    = "shell_#{SecureRandom.hex(8)}"
  tool_call  = LLM::Object.from(
    id: call_id,
    name: "shell",
    arguments: { "command" => @command },
  )
  original = [{
    "type"  => "tool_use",
    "id"    => call_id,
    "name"  => "shell",
    "input" => { "command" => @command },
  }]

  [LLM::Message.new(:assistant, "", {
    tool_calls: [tool_call],
    original_tool_calls: original,
    tools: @tools,
  })]
end

#modelObject



53
54
55
# File 'lib/brute/providers/shell_response.rb', line 53

def model
  @model_name
end

#output_tokensObject



61
62
63
# File 'lib/brute/providers/shell_response.rb', line 61

def output_tokens
  0
end

#reasoning_contentObject



81
82
83
# File 'lib/brute/providers/shell_response.rb', line 81

def reasoning_content
  nil
end

#reasoning_tokensObject



65
66
67
# File 'lib/brute/providers/shell_response.rb', line 65

def reasoning_tokens
  0
end

#total_tokensObject



69
70
71
# File 'lib/brute/providers/shell_response.rb', line 69

def total_tokens
  0
end

#usageObject



85
86
87
88
89
90
91
92
# File 'lib/brute/providers/shell_response.rb', line 85

def usage
  LLM::Usage.new(
    input_tokens: 0,
    output_tokens: 0,
    reasoning_tokens: 0,
    total_tokens: 0,
  )
end