Class: Brute::MessageTransport::LLM
- Inherits:
-
MessageTransport
- Object
- MessageTransport
- Brute::MessageTransport::LLM
- Defined in:
- lib/brute/message_transport/llm.rb
Overview
MessageTransport for the llm.rb gem (https://github.com/llmrb/llm.rb). Brute does not require llm.rb — you do:
require "llm"
llm = LLM.openai(key: ENV["OPENAI_API_KEY"])
messages = Brute::MessageTransport::LLM.dump_all(env[:messages])
response = llm.complete(messages.pop, role: nil, messages: messages, tools: ...)
Brute::MessageTransport::LLM.wrap_each(response) { |m| env[:messages] << m }
Class Method Summary collapse
-
.dump(message) ⇒ Object
Brute::Message -> LLM::Message.
Class Method Details
.dump(message) ⇒ Object
Brute::Message -> LLM::Message. Assistant tool calls carry llm.rb's
original_tool_calls extra (the provider wire format); tool results
become an LLM::Function::Return so llm.rb's request adapters emit
them correctly.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/brute/message_transport/llm.rb', line 24 def self.dump() case .role when :tool ::LLM::Message.new( :tool, ::LLM::Function::Return.new(.tool_call_id, nil, .content.to_s), ) when :assistant if .tool_call? wire = .tool_calls.map do |tc| { id: tc.id, type: "function", function: { name: tc.name, arguments: JSON.generate(tc.arguments) } } end ::LLM::Message.new(:assistant, .content.to_s, { tool_calls: wire, original_tool_calls: wire }) else ::LLM::Message.new(:assistant, .content) end else ::LLM::Message.new(.role, .content) end end |