brute 6.1.3 → 6.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6ecf8ae2bc514e6cb9cb6cefb1a06476ab68d13b459446ed0c398effcf334a86
4
- data.tar.gz: 612dde127eee6f42a4aeb8f6c1fae039d74aaad8c9ed8481de22c0ec6b6cc2ce
3
+ metadata.gz: f639a3b9b3ec1317f80ee945eb7d610af350d4c862206745aefad42a70afbb4d
4
+ data.tar.gz: 994bf0aaf3104bfad636338639db4c175de7bbcd468a9abd8f90114c4a8e233e
5
5
  SHA512:
6
- metadata.gz: fe3ee53f5b02b310397b959f307b5ddf8639ab4cedb6d747264a1b49756e65ef93bee312a609898fe03f896a27775b5adabbb30f9e278c71df9ec68a80547e81
7
- data.tar.gz: d0cba57fc257001c634474596f82b1b55517ba9f9410106b34a142df1ab8ee6db29d580016dee6db354e181741dcbad0b6be507e048dc6240193ff1cdbedba4f
6
+ metadata.gz: 29b29a00aad896433765e8bbff99ec42422af1c133b4b73231837f85ed7d0ffd4ea2101859fc37ca81c16678860f9a6de72d437d674faf3b9e12d3734f6c36e7
7
+ data.tar.gz: b43248273fc878a7c553e968b010552a7a670933b694a5a952bb3ecb5c197e08595e5134262475ee296c41b538e601347d34bfc7694cb6880b766e78d8231ea8
@@ -47,8 +47,10 @@ module Brute
47
47
  env.emit(LLM_START_EVENT)
48
48
 
49
49
  messages = Brute::MessageTransport::OpenRouter.dump_all(env[:messages], model: options(env).model)
50
+ raw = nil
50
51
 
51
52
  ::OpenRouter::Client.new(**@config).then do |client|
53
+ client.on(:on_error) { |error| raw = error }
52
54
  response = nil
53
55
  env.emit(LLM_DURATION_EVENT) { response = client.complete(messages, options(env)) }
54
56
 
@@ -76,13 +78,13 @@ module Brute
76
78
  # kind of failure. The classes are looked up defensively — the provider
77
79
  # gem is only a dependency of the app that uses this middleware.
78
80
  rescue => error
79
- env.emit(LLM_FAILURE_EVENT)
81
+ env.emit(LLM_FAILURE_EVENT, raw || error)
80
82
 
81
83
  if defined?(::Faraday::Error) && error.is_a?(::Faraday::Error)
82
84
  env.emit(FARADAY_ERROR_EVENT, error)
83
85
 
84
86
  elsif defined?(::OpenRouter::ServerError) && error.is_a?(::OpenRouter::ServerError)
85
- env.emit(OPEN_ROUTER_SERVER_ERROR_EVENT, error)
87
+ env.emit(OPEN_ROUTER_SERVER_ERROR_EVENT, raw || error)
86
88
 
87
89
  else
88
90
  env.emit(STANDARD_ERROR_EVENT, error)
@@ -147,6 +149,7 @@ describe "brute/completion/open_router" do
147
149
  # Run one turn against a stubbed OpenRouter::Client and hand back the env.
148
150
  with_fake_client = lambda do |completion, response|
149
151
  fake_client = Object.new
152
+ fake_client.define_singleton_method(:on) { |_event, &_block| self }
150
153
  fake_client.define_singleton_method(:complete) { |_messages, _options| response }
151
154
  original = OpenRouter::Client.method(:new)
152
155
  OpenRouter::Client.define_singleton_method(:new) { |**_config| fake_client }
@@ -180,6 +183,7 @@ describe "brute/completion/open_router" do
180
183
  it "advertises env[:tools] to the provider, and lets a tools: option win" do
181
184
  captured = []
182
185
  fake_client = Object.new
186
+ fake_client.define_singleton_method(:on) { |_event, &_block| self }
183
187
  fake_client.define_singleton_method(:complete) { |_messages, options| captured << options; FakeUsageResponse.new(nil) }
184
188
  original = OpenRouter::Client.method(:new)
185
189
  OpenRouter::Client.define_singleton_method(:new) { |**_config| fake_client }
@@ -226,6 +230,7 @@ describe "brute/completion/open_router" do
226
230
  it "takes the model from env[:model], and lets a model: option win" do
227
231
  captured = []
228
232
  fake_client = Object.new
233
+ fake_client.define_singleton_method(:on) { |_event, &_block| self }
229
234
  fake_client.define_singleton_method(:complete) { |_messages, options| captured << options; FakeUsageResponse.new(nil) }
230
235
  original = OpenRouter::Client.method(:new)
231
236
  OpenRouter::Client.define_singleton_method(:new) { |**_config| fake_client }
@@ -260,6 +265,7 @@ describe "brute/completion/open_router" do
260
265
 
261
266
  boom = RuntimeError.new("no route to host")
262
267
  fake_client = Object.new
268
+ fake_client.define_singleton_method(:on) { |_event, &_block| self }
263
269
  fake_client.define_singleton_method(:complete) { |_messages, _options| raise boom }
264
270
  original = OpenRouter::Client.method(:new)
265
271
  OpenRouter::Client.define_singleton_method(:new) { |**_config| fake_client }
data/lib/brute/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Brute
4
- VERSION = "6.1.3"
4
+ VERSION = "6.1.4"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brute
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.1.3
4
+ version: 6.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brute Contributors