nano-bots 2.1.0 → 2.2.0
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/Gemfile.lock +3 -3
- data/README.md +8 -8
- data/components/providers/google.rb +23 -35
- data/controllers/interfaces/cli.rb +4 -0
- data/controllers/interfaces/repl.rb +53 -8
- data/docker-compose.example.yml +1 -1
- data/nano-bots.gemspec +1 -1
- data/static/gem.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d87686427ed075d44e4c4b21e41de70047adf4ce56eb73c50f77fb695e63a562
|
|
4
|
+
data.tar.gz: 8bc004c9dfe2a004fa8e6f7bbcc946e461c54daf7b9b58b7e416c9f3c8ebe734
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0ce8acc93fbd5eedaaaae2dc271ab64998fad38e3e2f5f40e9a0a51e4cbed01e25787ff77ebf02663e88786c01ede5a70127052aeb2fcf6dfcb58c22bb004620
|
|
7
|
+
data.tar.gz: c46e9cfcbbb2d871191153c48760cd4625216b6dbbff598c2921635df7af02fdca8923b806fc9fdbe35ee86ab6c6217a63b287b3bf65c42d5281aff9c91e8878
|
data/Gemfile.lock
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
nano-bots (2.
|
|
4
|
+
nano-bots (2.2.0)
|
|
5
5
|
babosa (~> 2.0)
|
|
6
6
|
concurrent-ruby (~> 1.2, >= 1.2.2)
|
|
7
7
|
dotenv (~> 2.8, >= 2.8.1)
|
|
8
|
-
gemini-ai (~> 2.
|
|
8
|
+
gemini-ai (~> 2.2)
|
|
9
9
|
pry (~> 0.14.2)
|
|
10
10
|
rainbow (~> 3.1, >= 3.1.1)
|
|
11
11
|
rbnacl (~> 7.1, >= 7.1.1)
|
|
@@ -34,7 +34,7 @@ GEM
|
|
|
34
34
|
multipart-post (~> 2)
|
|
35
35
|
faraday-net_http (3.0.2)
|
|
36
36
|
ffi (1.16.3)
|
|
37
|
-
gemini-ai (2.
|
|
37
|
+
gemini-ai (2.2.0)
|
|
38
38
|
event_stream_parser (~> 1.0)
|
|
39
39
|
faraday (~> 2.7, >= 2.7.12)
|
|
40
40
|
googleauth (~> 1.9, >= 1.9.1)
|
data/README.md
CHANGED
|
@@ -36,13 +36,13 @@ https://user-images.githubusercontent.com/113217272/238141567-c58a240c-7b67-4b3b
|
|
|
36
36
|
For a system usage:
|
|
37
37
|
|
|
38
38
|
```sh
|
|
39
|
-
gem install nano-bots -v 2.
|
|
39
|
+
gem install nano-bots -v 2.2.0
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
To use it in a project, add it to your `Gemfile`:
|
|
43
43
|
|
|
44
44
|
```ruby
|
|
45
|
-
gem 'nano-bots', '~> 2.
|
|
45
|
+
gem 'nano-bots', '~> 2.2.0'
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
```sh
|
|
@@ -174,7 +174,7 @@ GOOGLE_PROJECT_ID=your-project-id
|
|
|
174
174
|
Clone the repository and copy the Docker Compose template:
|
|
175
175
|
|
|
176
176
|
```
|
|
177
|
-
git clone
|
|
177
|
+
git clone https://github.com/icebaker/ruby-nano-bots.git
|
|
178
178
|
cd ruby-nano-bots
|
|
179
179
|
cp docker-compose.example.yml docker-compose.yml
|
|
180
180
|
```
|
|
@@ -188,7 +188,7 @@ Set your provider credentials and choose your desired directory for the cartridg
|
|
|
188
188
|
services:
|
|
189
189
|
nano-bots:
|
|
190
190
|
image: ruby:3.2.2-slim-bookworm
|
|
191
|
-
command: sh -c "apt-get update && apt-get install -y --no-install-recommends build-essential libffi-dev libsodium-dev lua5.4-dev curl && curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | bash && gem install nano-bots -v 2.
|
|
191
|
+
command: sh -c "apt-get update && apt-get install -y --no-install-recommends build-essential libffi-dev libsodium-dev lua5.4-dev curl && curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | bash && gem install nano-bots -v 2.2.0 && bash"
|
|
192
192
|
environment:
|
|
193
193
|
OPENAI_API_ADDRESS: https://api.openai.com
|
|
194
194
|
OPENAI_API_KEY: your-access-token
|
|
@@ -208,7 +208,7 @@ services:
|
|
|
208
208
|
services:
|
|
209
209
|
nano-bots:
|
|
210
210
|
image: ruby:3.2.2-slim-bookworm
|
|
211
|
-
command: sh -c "apt-get update && apt-get install -y --no-install-recommends build-essential libffi-dev libsodium-dev lua5.4-dev curl && curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | bash && gem install nano-bots -v 2.
|
|
211
|
+
command: sh -c "apt-get update && apt-get install -y --no-install-recommends build-essential libffi-dev libsodium-dev lua5.4-dev curl && curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | bash && gem install nano-bots -v 2.2.0 && bash"
|
|
212
212
|
environment:
|
|
213
213
|
GOOGLE_API_KEY: your-api-key
|
|
214
214
|
NANO_BOTS_ENCRYPTION_PASSWORD: UNSAFE
|
|
@@ -225,7 +225,7 @@ services:
|
|
|
225
225
|
services:
|
|
226
226
|
nano-bots:
|
|
227
227
|
image: ruby:3.2.2-slim-bookworm
|
|
228
|
-
command: sh -c "apt-get update && apt-get install -y --no-install-recommends build-essential libffi-dev libsodium-dev lua5.4-dev curl && curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | bash && gem install nano-bots -v 2.
|
|
228
|
+
command: sh -c "apt-get update && apt-get install -y --no-install-recommends build-essential libffi-dev libsodium-dev lua5.4-dev curl && curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | bash && gem install nano-bots -v 2.2.0 && bash"
|
|
229
229
|
environment:
|
|
230
230
|
GOOGLE_CREDENTIALS_FILE_PATH: /root/.config/google-credentials.json
|
|
231
231
|
GOOGLE_REGION: us-east4
|
|
@@ -244,7 +244,7 @@ services:
|
|
|
244
244
|
services:
|
|
245
245
|
nano-bots:
|
|
246
246
|
image: ruby:3.2.2-slim-bookworm
|
|
247
|
-
command: sh -c "apt-get update && apt-get install -y --no-install-recommends build-essential libffi-dev libsodium-dev lua5.4-dev curl && curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | bash && gem install nano-bots -v 2.
|
|
247
|
+
command: sh -c "apt-get update && apt-get install -y --no-install-recommends build-essential libffi-dev libsodium-dev lua5.4-dev curl && curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | bash && gem install nano-bots -v 2.2.0 && bash"
|
|
248
248
|
environment:
|
|
249
249
|
GOOGLE_REGION: us-east4
|
|
250
250
|
NANO_BOTS_ENCRYPTION_PASSWORD: UNSAFE
|
|
@@ -745,5 +745,5 @@ gem build nano-bots.gemspec
|
|
|
745
745
|
|
|
746
746
|
gem signin
|
|
747
747
|
|
|
748
|
-
gem push nano-bots-2.
|
|
748
|
+
gem push nano-bots-2.2.0.gem
|
|
749
749
|
```
|
|
@@ -130,46 +130,34 @@ module NanoBot
|
|
|
130
130
|
end
|
|
131
131
|
end
|
|
132
132
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
)
|
|
138
|
-
|
|
139
|
-
if tools&.size&.positive?
|
|
140
|
-
feedback.call(
|
|
141
|
-
{ should_be_stored: true,
|
|
142
|
-
needs_another_round: true,
|
|
143
|
-
interaction: { who: 'AI', message: nil, meta: { tool_calls: tools } } }
|
|
144
|
-
)
|
|
145
|
-
Tools.apply(
|
|
146
|
-
cartridge, input[:tools], tools, feedback, Logic::Google::Tools
|
|
147
|
-
).each do |interaction|
|
|
148
|
-
feedback.call({ should_be_stored: true, needs_another_round: true, interaction: })
|
|
149
|
-
end
|
|
150
|
-
end
|
|
133
|
+
@client.stream_generate_content(
|
|
134
|
+
Logic::Google::Tokens.apply_policies!(cartridge, payload),
|
|
135
|
+
stream: true, &stream_call_back
|
|
136
|
+
)
|
|
151
137
|
|
|
138
|
+
if tools&.size&.positive?
|
|
152
139
|
feedback.call(
|
|
153
|
-
{ should_be_stored:
|
|
154
|
-
|
|
155
|
-
|
|
140
|
+
{ should_be_stored: true,
|
|
141
|
+
needs_another_round: true,
|
|
142
|
+
interaction: { who: 'AI', message: nil, meta: { tool_calls: tools } } }
|
|
156
143
|
)
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
144
|
+
Tools.apply(
|
|
145
|
+
cartridge, input[:tools], tools, feedback, Logic::Google::Tools
|
|
146
|
+
).each do |interaction|
|
|
147
|
+
feedback.call({ should_be_stored: true, needs_another_round: true, interaction: })
|
|
148
|
+
end
|
|
161
149
|
end
|
|
162
|
-
else
|
|
163
|
-
begin
|
|
164
|
-
result = @client.stream_generate_content(
|
|
165
|
-
Logic::Google::Tokens.apply_policies!(cartridge, payload),
|
|
166
|
-
stream: false
|
|
167
|
-
)
|
|
168
|
-
rescue StandardError => e
|
|
169
|
-
raise e.class, e.response[:body] if e.response && e.response[:body]
|
|
170
150
|
|
|
171
|
-
|
|
172
|
-
|
|
151
|
+
feedback.call(
|
|
152
|
+
{ should_be_stored: !(content.nil? || content == ''),
|
|
153
|
+
interaction: content.nil? || content == '' ? nil : { who: 'AI', message: content },
|
|
154
|
+
finished: true }
|
|
155
|
+
)
|
|
156
|
+
else
|
|
157
|
+
result = @client.stream_generate_content(
|
|
158
|
+
Logic::Google::Tokens.apply_policies!(cartridge, payload),
|
|
159
|
+
stream: false
|
|
160
|
+
)
|
|
173
161
|
|
|
174
162
|
tools = result.dig(0, 'candidates', 0, 'content', 'parts').filter do |part|
|
|
175
163
|
part.key?('functionCall')
|
|
@@ -12,6 +12,9 @@ module NanoBot
|
|
|
12
12
|
when 'version'
|
|
13
13
|
puts NanoBot::GEM[:version]
|
|
14
14
|
exit
|
|
15
|
+
when 'specification'
|
|
16
|
+
puts NanoBot::GEM[:specification]
|
|
17
|
+
exit
|
|
15
18
|
when 'security'
|
|
16
19
|
result = NanoBot.security.check
|
|
17
20
|
|
|
@@ -57,6 +60,7 @@ module NanoBot
|
|
|
57
60
|
puts ' nb cartridge.yml STATE-KEY state'
|
|
58
61
|
puts ''
|
|
59
62
|
puts ' nb security'
|
|
63
|
+
puts ' nb specification'
|
|
60
64
|
puts ' nb version'
|
|
61
65
|
puts ' nb help'
|
|
62
66
|
puts ''
|
|
@@ -10,6 +10,21 @@ module NanoBot
|
|
|
10
10
|
module Controllers
|
|
11
11
|
module Interfaces
|
|
12
12
|
module REPL
|
|
13
|
+
COMMANDS_TO_BE_REMOVED = [
|
|
14
|
+
'help', 'cd', 'find-method', 'ls', 'pry-backtrace', 'raise-up', 'reset', 'watch',
|
|
15
|
+
'whereami', 'wtf?', '!', 'amend-line', 'edit', 'hist', 'show-input', 'ri', 'show-doc',
|
|
16
|
+
'show-source', 'stat', 'import-set', 'play', '!!!', '!!@', '$', '?', '@', 'file-mode',
|
|
17
|
+
'history', 'quit', 'quit-program', 'reload-method', 'show-method', 'cat',
|
|
18
|
+
'change-inspector', 'change-prompt', 'clear-screen', 'fix-indent', 'list-inspectors',
|
|
19
|
+
'save-file', 'shell-mode', 'pry-version', 'reload-code', 'toggle-color', '!pry',
|
|
20
|
+
'disable-pry', 'jump-to', 'nesting', 'switch-to',
|
|
21
|
+
'pry-theme'
|
|
22
|
+
].freeze
|
|
23
|
+
|
|
24
|
+
COMMANDS_TO_KEEP = [
|
|
25
|
+
'/whereami[!?]+/', '.<shell command>', 'exit', 'exit-all', 'exit-program'
|
|
26
|
+
].freeze
|
|
27
|
+
|
|
13
28
|
def self.boot(cartridge, session, prefix = nil, suffix = nil, as: 'repl')
|
|
14
29
|
return unless Logic::Helpers::Hash.fetch(cartridge, %i[behaviors boot instruction])
|
|
15
30
|
|
|
@@ -31,13 +46,7 @@ module NanoBot
|
|
|
31
46
|
|
|
32
47
|
prompt = self.prompt(cartridge)
|
|
33
48
|
|
|
34
|
-
|
|
35
|
-
'REPL',
|
|
36
|
-
'REPL Prompt',
|
|
37
|
-
[proc { prompt }, proc { 'MISSING INPUT' }]
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
Pry.commands.block_command(/(.*)/, 'handler') do |line|
|
|
49
|
+
handler = proc do |line|
|
|
41
50
|
session.print(prefix) unless prefix.nil?
|
|
42
51
|
session.evaluate_and_print(line, mode: 'repl')
|
|
43
52
|
session.print(suffix) unless suffix.nil?
|
|
@@ -45,7 +54,43 @@ module NanoBot
|
|
|
45
54
|
session.flush
|
|
46
55
|
end
|
|
47
56
|
|
|
48
|
-
Pry.
|
|
57
|
+
pry_prompt = Pry::Prompt.new(
|
|
58
|
+
'REPL',
|
|
59
|
+
'REPL Prompt',
|
|
60
|
+
[proc { prompt }, proc { 'MISSING INPUT' }]
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
pry_instance = Pry.new({ prompt: pry_prompt })
|
|
64
|
+
|
|
65
|
+
pry_instance.config.correct_indent = false
|
|
66
|
+
|
|
67
|
+
pry_instance.config.completer = Struct.new(:initialize, :call) do
|
|
68
|
+
def initialize(...); end
|
|
69
|
+
def call(...); end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
first_whereami = true
|
|
73
|
+
|
|
74
|
+
pry_instance.config.commands.block_command(/whereami --quiet(.*)/, '/whereami[!?]+/') do |line|
|
|
75
|
+
unless first_whereami
|
|
76
|
+
handler.call(line.nil? ? 'whereami --quiet' : "whereami --quiet#{line}")
|
|
77
|
+
end
|
|
78
|
+
first_whereami = false
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
pry_instance.config.commands.block_command(/\.(.*)/, '.<shell command>') do |line|
|
|
82
|
+
handler.call(line.nil? ? '.' : ".#{line}")
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
COMMANDS_TO_BE_REMOVED.each do |command|
|
|
86
|
+
pry_instance.config.commands.block_command(command, 'handler') do |line|
|
|
87
|
+
handler.call(line.nil? ? command : "#{command} #{line}")
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
pry_instance.commands.block_command(/(.*)/, 'handler', &handler)
|
|
92
|
+
|
|
93
|
+
Pry::REPL.new(pry_instance).start
|
|
49
94
|
end
|
|
50
95
|
|
|
51
96
|
def self.prompt(cartridge)
|
data/docker-compose.example.yml
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
services:
|
|
3
3
|
nano-bots:
|
|
4
4
|
image: ruby:3.2.2-slim-bookworm
|
|
5
|
-
command: sh -c "apt-get update && apt-get install -y --no-install-recommends build-essential libffi-dev libsodium-dev lua5.4-dev curl && curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | bash && gem install nano-bots -v 2.
|
|
5
|
+
command: sh -c "apt-get update && apt-get install -y --no-install-recommends build-essential libffi-dev libsodium-dev lua5.4-dev curl && curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | bash && gem install nano-bots -v 2.2.0 && bash"
|
|
6
6
|
environment:
|
|
7
7
|
OPENAI_API_ADDRESS: https://api.openai.com
|
|
8
8
|
OPENAI_API_KEY: your-access-token
|
data/nano-bots.gemspec
CHANGED
|
@@ -34,7 +34,7 @@ Gem::Specification.new do |spec|
|
|
|
34
34
|
spec.add_dependency 'babosa', '~> 2.0'
|
|
35
35
|
spec.add_dependency 'concurrent-ruby', '~> 1.2', '>= 1.2.2'
|
|
36
36
|
spec.add_dependency 'dotenv', '~> 2.8', '>= 2.8.1'
|
|
37
|
-
spec.add_dependency 'gemini-ai', '~> 2.
|
|
37
|
+
spec.add_dependency 'gemini-ai', '~> 2.2'
|
|
38
38
|
spec.add_dependency 'pry', '~> 0.14.2'
|
|
39
39
|
spec.add_dependency 'rainbow', '~> 3.1', '>= 3.1.1'
|
|
40
40
|
spec.add_dependency 'rbnacl', '~> 7.1', '>= 7.1.1'
|
data/static/gem.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: nano-bots
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- icebaker
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-12-
|
|
11
|
+
date: 2023-12-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: babosa
|
|
@@ -70,14 +70,14 @@ dependencies:
|
|
|
70
70
|
requirements:
|
|
71
71
|
- - "~>"
|
|
72
72
|
- !ruby/object:Gem::Version
|
|
73
|
-
version: '2.
|
|
73
|
+
version: '2.2'
|
|
74
74
|
type: :runtime
|
|
75
75
|
prerelease: false
|
|
76
76
|
version_requirements: !ruby/object:Gem::Requirement
|
|
77
77
|
requirements:
|
|
78
78
|
- - "~>"
|
|
79
79
|
- !ruby/object:Gem::Version
|
|
80
|
-
version: '2.
|
|
80
|
+
version: '2.2'
|
|
81
81
|
- !ruby/object:Gem::Dependency
|
|
82
82
|
name: pry
|
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -248,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
248
248
|
- !ruby/object:Gem::Version
|
|
249
249
|
version: '0'
|
|
250
250
|
requirements: []
|
|
251
|
-
rubygems_version: 3.
|
|
251
|
+
rubygems_version: 3.4.22
|
|
252
252
|
signing_key:
|
|
253
253
|
specification_version: 4
|
|
254
254
|
summary: 'Ruby Implementation of Nano Bots: small, AI-powered bots for OpenAI ChatGPT
|