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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1cfd38c6461b14483fc0478d31b73ed3e4890f1c534b3c7a4ead6f9412466674
4
- data.tar.gz: 11f3e82a196f8b27ac1313ee2e653c93521ed7c081ef68bacf15015c8392db34
3
+ metadata.gz: d87686427ed075d44e4c4b21e41de70047adf4ce56eb73c50f77fb695e63a562
4
+ data.tar.gz: 8bc004c9dfe2a004fa8e6f7bbcc946e461c54daf7b9b58b7e416c9f3c8ebe734
5
5
  SHA512:
6
- metadata.gz: b6a7dbb69afead0f718e2b3c688edb35dfce6f68f138ddd5168c9d72b5eaaedbdcf973b99be873709c4f6b63f71a3f35c9a5d06a0ca4efd32800c52b6de3ccc0
7
- data.tar.gz: 24bf5641942d008e7afbad2ae37fec1a4f37d28c68b3ab0ab3f560849f8b427a246f5c9c29ddc9221852bbb3cd5e86bb958c9fbff392a0cca0fab81d9c3b0171
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.1.0)
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.1)
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.1.0)
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.1.0
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.1.0'
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 git@github.com:icebaker/ruby-nano-bots.git
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.1.0 && bash"
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.1.0 && bash"
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.1.0 && bash"
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.1.0 && bash"
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.1.0.gem
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
- begin
134
- @client.stream_generate_content(
135
- Logic::Google::Tokens.apply_policies!(cartridge, payload),
136
- stream: true, &stream_call_back
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: !(content.nil? || content == ''),
154
- interaction: content.nil? || content == '' ? nil : { who: 'AI', message: content },
155
- finished: true }
140
+ { should_be_stored: true,
141
+ needs_another_round: true,
142
+ interaction: { who: 'AI', message: nil, meta: { tool_calls: tools } } }
156
143
  )
157
- rescue StandardError => e
158
- raise e.class, e.response[:body] if e.response && e.response[:body]
159
-
160
- raise e
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
- raise e
172
- end
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
- Pry.config.prompt = Pry::Prompt.new(
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.start
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)
@@ -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.1.0 && bash"
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.1'
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
@@ -3,7 +3,7 @@
3
3
  module NanoBot
4
4
  GEM = {
5
5
  name: 'nano-bots',
6
- version: '2.1.0',
6
+ version: '2.2.0',
7
7
  specification: '2.0.1',
8
8
  author: 'icebaker',
9
9
  summary: 'Ruby Implementation of Nano Bots: small, AI-powered bots for OpenAI ChatGPT and Google Gemini.',
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.1.0
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-16 00:00:00.000000000 Z
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.1'
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.1'
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.3.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