Class: Brute::Completion::LLMrb
- Inherits:
-
Object
- Object
- Brute::Completion::LLMrb
- Includes:
- Hooks
- Defined in:
- lib/brute/completion/llmrb.rb
Overview
Completion backed by the llm.rb gem (https://github.com/llmrb/llm.rb).
Brute.agent
.use(Brute::Middleware::SystemPrompt)
.run(Brute::Completion::LLMrb.new(
provider: :openai,
provider_options: { key: ENV["OPENAI_API_KEY"] },
model: "gpt-4o-mini",
))
# or hand over a provider llm.rb has already built:
run Brute::Completion::LLMrb.new(client: LLM.ollama(key: nil), model: "llama3.2:latest")
client: an LLM::Provider instance (takes precedence)
provider: llm.rb constructor name (:openai, :anthropic,
:ollama, ...); falls back to env[:provider]
provider_options: kwargs for that constructor, e.g. { key: "..." }
model: model id (falls back to env[:model])
tools: tools list, any shape Tools::Adapter accepts
temperature: sampling temperature (default 0.7)
Constant Summary collapse
- DEFAULT_TEMPERATURE =
0.7
Constants included from Hooks
Hooks::AFTER_LLM_EVENT, Hooks::AFTER_TOOL_EVENT, Hooks::APPROVE_TOOL_EVENT, Hooks::BEFORE_LLM_EVENT, Hooks::BEFORE_TOOL_EVENT, Hooks::COMPACTED_EVENT, Hooks::COMPACT_DURATION_EVENT, Hooks::DURATION_EVENT, Hooks::ENTER_EVENT, Hooks::EXIT_EVENT, Hooks::FARADAY_ERROR_EVENT, Hooks::LLM_DURATION_EVENT, Hooks::LLM_FAILURE_EVENT, Hooks::MIDDLEWARE_ADDED_EVENT, Hooks::OPEN_ROUTER_SERVER_ERROR_EVENT, Hooks::STANDARD_ERROR_EVENT, Hooks::TOOL_DURATION_EVENT, Hooks::TURN_DURATION_EVENT, Hooks::TURN_END_EVENT, Hooks::TURN_START_EVENT
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(**options) ⇒ LLMrb
constructor
A new instance of LLMrb.
Methods included from Hooks
Constructor Details
#initialize(**options) ⇒ LLMrb
Returns a new instance of LLMrb.
34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/brute/completion/llmrb.rb', line 34 def initialize(**) # Brute depends on no LLM library: the provider gem is required here, # at point of use, and only for this completion. begin require "llm" rescue LoadError raise LoadError, "#{self.class} needs the 'llm.rb' gem — add `gem \"llm.rb\"` to your Gemfile." end @options = end |
Instance Method Details
#call(env) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/brute/completion/llmrb.rb', line 46 def call(env) emit(BEFORE_LLM_EVENT, env) # llm.rb takes the last message as the prompt and the rest as history. = Brute::MessageTransport::LLM.dump_all(env[:messages]) prompt = .pop response = nil emit(LLM_DURATION_EVENT, env) { response = client(env).complete(prompt, **params(env, )) } if (usage = Brute::MessageTransport::LLM.usage_metrics(response)) (env[:metadata] ||= {})[:last_llm_usage] = usage end Brute::MessageTransport::LLM.wrap_each(response) do || env[:messages] << end emit(AFTER_LLM_EVENT, env) env rescue => error emit(LLM_FAILURE_EVENT, env) if defined?(::Faraday::Error) && error.is_a?(::Faraday::Error) emit(FARADAY_ERROR_EVENT, env, error) else emit(STANDARD_ERROR_EVENT, env, error) end env end |