brute 0.1.2 → 0.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 +4 -4
- data/lib/brute/middleware/llm_call.rb +14 -1
- data/lib/brute/version.rb +1 -1
- data/lib/brute.rb +22 -7
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 00321403d71ffc3436dee9ef35b063168d57448fb49351a8f014c24a4a61c8d1
|
|
4
|
+
data.tar.gz: dcacc199a078595364ccaf4dc71b892a629362813e955300bfb1fa3646fd4353
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b7c4e919815f9592b56e75b74ed8474e91d06f88fc680f4ab201179eec5eae5a6e48b1eac0a3eceb814b80cc341b84a7d1ea2ae06ee64e9697610573d449cc6f
|
|
7
|
+
data.tar.gz: 75bec05d5b2e501ef8f6fe461d8f448a628afa5b57ed745b3cbcd722ccfc19bea1b60dce035f653b6c05182f84bc9943fe7b3515d427033603862559282f1f65
|
|
@@ -16,13 +16,26 @@ module Brute
|
|
|
16
16
|
# (streaming delivers chunks incrementally via AgentStream)
|
|
17
17
|
unless env[:streaming]
|
|
18
18
|
if (cb = env.dig(:callbacks, :on_content)) && response
|
|
19
|
-
text = response
|
|
19
|
+
text = safe_content(response)
|
|
20
20
|
cb.call(text) if text
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
response
|
|
25
25
|
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
# Safely extract text content from an LLM response.
|
|
30
|
+
# Returns nil when the response contains only tool calls (no assistant text),
|
|
31
|
+
# which causes LLM::Contract::Completion#content to raise NoMethodError
|
|
32
|
+
# because messages.find(&:assistant?) returns nil.
|
|
33
|
+
def safe_content(response)
|
|
34
|
+
return nil unless response.respond_to?(:content)
|
|
35
|
+
response.content
|
|
36
|
+
rescue NoMethodError
|
|
37
|
+
nil
|
|
38
|
+
end
|
|
26
39
|
end
|
|
27
40
|
end
|
|
28
41
|
end
|
data/lib/brute/version.rb
CHANGED
data/lib/brute.rb
CHANGED
|
@@ -62,7 +62,7 @@ require_relative "brute/tools/delegate"
|
|
|
62
62
|
require_relative "brute/orchestrator"
|
|
63
63
|
|
|
64
64
|
module Brute
|
|
65
|
-
VERSION = "0.1.
|
|
65
|
+
VERSION = "0.1.3"
|
|
66
66
|
|
|
67
67
|
# The complete set of tools available to the agent.
|
|
68
68
|
TOOLS = [
|
|
@@ -111,15 +111,30 @@ module Brute
|
|
|
111
111
|
|
|
112
112
|
# Resolve the LLM provider from environment variables.
|
|
113
113
|
#
|
|
114
|
-
#
|
|
115
|
-
#
|
|
114
|
+
# Checks in order:
|
|
115
|
+
# 1. LLM_API_KEY + LLM_PROVIDER (explicit)
|
|
116
|
+
# 2. ANTHROPIC_API_KEY (implicit: provider = anthropic)
|
|
117
|
+
# 3. OPENAI_API_KEY (implicit: provider = openai)
|
|
118
|
+
# 4. GOOGLE_API_KEY (implicit: provider = google)
|
|
116
119
|
#
|
|
117
|
-
# Returns nil if
|
|
120
|
+
# Returns nil if no key is found. Error is deferred to Orchestrator#run.
|
|
118
121
|
def self.resolve_provider
|
|
119
|
-
|
|
120
|
-
|
|
122
|
+
if ENV["LLM_API_KEY"]
|
|
123
|
+
key = ENV["LLM_API_KEY"]
|
|
124
|
+
name = ENV.fetch("LLM_PROVIDER", "anthropic").downcase
|
|
125
|
+
elsif ENV["ANTHROPIC_API_KEY"]
|
|
126
|
+
key = ENV["ANTHROPIC_API_KEY"]
|
|
127
|
+
name = "anthropic"
|
|
128
|
+
elsif ENV["OPENAI_API_KEY"]
|
|
129
|
+
key = ENV["OPENAI_API_KEY"]
|
|
130
|
+
name = "openai"
|
|
131
|
+
elsif ENV["GOOGLE_API_KEY"]
|
|
132
|
+
key = ENV["GOOGLE_API_KEY"]
|
|
133
|
+
name = "google"
|
|
134
|
+
else
|
|
135
|
+
return nil
|
|
136
|
+
end
|
|
121
137
|
|
|
122
|
-
name = ENV.fetch("LLM_PROVIDER", "anthropic").downcase
|
|
123
138
|
factory = PROVIDERS[name]
|
|
124
139
|
raise "Unknown LLM provider: #{name}. Available: #{PROVIDERS.keys.join(", ")}" unless factory
|
|
125
140
|
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: brute
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brute Contributors
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 1980-01-
|
|
10
|
+
date: 1980-01-01 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: llm.rb
|