nano-bots 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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