nano-bots 1.2.0 → 2.0.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 +81 -8
- data/components/provider.rb +1 -1
- data/components/providers/base.rb +1 -1
- data/components/providers/google.rb +27 -9
- data/components/providers/openai.rb +4 -3
- data/docker-compose.example.yml +10 -1
- data/nano-bots.gemspec +1 -1
- data/static/gem.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2597a22180cd4e9feb55c7780fa831b682485c7158c4a562833856a87822f679
|
|
4
|
+
data.tar.gz: 22c3bcaf6d5c61525b2e26ecc5f70e82d723cf022e7c218ffa1f3e7ce2052a58
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1afd6b0ddb4918b7cc38a1a4db8355653dad04023791c04b5ef5c69b0e69ff42298bbc903972179ebe21e2bb1a8d429928f59df64903ad5d068fa38059a89d21
|
|
7
|
+
data.tar.gz: 719a91a7351ea0557780ce06a436e1fee35824281c921f74a866a4c51bce8f9605157b7ef5bd27763a693885856bad87499164bb32f742a59a1130bf8879f597
|
data/Gemfile.lock
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
nano-bots (
|
|
4
|
+
nano-bots (2.0.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 (~>
|
|
8
|
+
gemini-ai (~> 2.0)
|
|
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 (
|
|
37
|
+
gemini-ai (2.0.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
|
|
39
|
+
gem install nano-bots -v 2.0.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', '~>
|
|
45
|
+
gem 'nano-bots', '~> 2.0.0'
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
```sh
|
|
@@ -81,6 +81,32 @@ NANO_BOTS_END_USER=your-user
|
|
|
81
81
|
|
|
82
82
|
Click [here](https://github.com/gbaptista/gemini-ai#credentials) to learn how to obtain your credentials.
|
|
83
83
|
|
|
84
|
+
#### Option 1: API Key (Generative Language API)
|
|
85
|
+
|
|
86
|
+
```sh
|
|
87
|
+
export GOOGLE_API_KEY=your-api-key
|
|
88
|
+
|
|
89
|
+
export NANO_BOTS_ENCRYPTION_PASSWORD=UNSAFE
|
|
90
|
+
export NANO_BOTS_END_USER=your-user
|
|
91
|
+
|
|
92
|
+
# export NANO_BOTS_STATE_DIRECTORY=/home/user/.local/state/nano-bots
|
|
93
|
+
# export NANO_BOTS_CARTRIDGES_DIRECTORY=/home/user/.local/share/nano-bots/cartridges
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Alternatively, if your current directory has a `.env` file with the environment variables, they will be automatically loaded:
|
|
97
|
+
|
|
98
|
+
```sh
|
|
99
|
+
GOOGLE_API_KEY=your-api-key
|
|
100
|
+
|
|
101
|
+
NANO_BOTS_ENCRYPTION_PASSWORD=UNSAFE
|
|
102
|
+
NANO_BOTS_END_USER=your-user
|
|
103
|
+
|
|
104
|
+
# NANO_BOTS_STATE_DIRECTORY=/home/user/.local/state/nano-bots
|
|
105
|
+
# NANO_BOTS_CARTRIDGES_DIRECTORY=/home/user/.local/share/nano-bots/cartridges
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
#### Option 2: Service Account (Vertex AI API)
|
|
109
|
+
|
|
84
110
|
```sh
|
|
85
111
|
export GOOGLE_CREDENTIALS_FILE_PATH=google-credentials.json
|
|
86
112
|
export GOOGLE_PROJECT_ID=your-project-id
|
|
@@ -126,7 +152,7 @@ Set your provider credentials and choose your desired directory for the cartridg
|
|
|
126
152
|
services:
|
|
127
153
|
nano-bots:
|
|
128
154
|
image: ruby:3.2.2-slim-bookworm
|
|
129
|
-
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
|
|
155
|
+
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.0.0 && bash"
|
|
130
156
|
environment:
|
|
131
157
|
OPENAI_API_ADDRESS: https://api.openai.com
|
|
132
158
|
OPENAI_API_KEY: your-access-token
|
|
@@ -139,12 +165,31 @@ services:
|
|
|
139
165
|
|
|
140
166
|
### Google Gemini
|
|
141
167
|
|
|
168
|
+
#### Option 1: API Key (Generative Language API)
|
|
169
|
+
|
|
170
|
+
```yaml
|
|
171
|
+
---
|
|
172
|
+
services:
|
|
173
|
+
nano-bots:
|
|
174
|
+
image: ruby:3.2.2-slim-bookworm
|
|
175
|
+
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.0.0 && bash"
|
|
176
|
+
environment:
|
|
177
|
+
GOOGLE_API_KEY: your-api-key
|
|
178
|
+
NANO_BOTS_ENCRYPTION_PASSWORD: UNSAFE
|
|
179
|
+
NANO_BOTS_END_USER: your-user
|
|
180
|
+
volumes:
|
|
181
|
+
- ./your-cartridges:/root/.local/share/nano-bots/cartridges
|
|
182
|
+
- ./your-state-path:/root/.local/state/nano-bots
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
#### Option 2: Service Account (Vertex AI API)
|
|
186
|
+
|
|
142
187
|
```yaml
|
|
143
188
|
---
|
|
144
189
|
services:
|
|
145
190
|
nano-bots:
|
|
146
191
|
image: ruby:3.2.2-slim-bookworm
|
|
147
|
-
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
|
|
192
|
+
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.0.0 && bash"
|
|
148
193
|
environment:
|
|
149
194
|
GOOGLE_CREDENTIALS_FILE_PATH: /root/.config/google-credentials.json
|
|
150
195
|
GOOGLE_PROJECT_ID: your-project-id
|
|
@@ -346,6 +391,8 @@ provider:
|
|
|
346
391
|
|
|
347
392
|
Read the [full specification](https://spec.nbots.io/#/README?id=google-gemini) for Google Gemini.
|
|
348
393
|
|
|
394
|
+
#### Option 1: API Key (Generative Language API)
|
|
395
|
+
|
|
349
396
|
```yaml
|
|
350
397
|
---
|
|
351
398
|
meta:
|
|
@@ -363,8 +410,34 @@ behaviors:
|
|
|
363
410
|
provider:
|
|
364
411
|
id: google
|
|
365
412
|
credentials:
|
|
366
|
-
|
|
413
|
+
service: generative-language-api
|
|
414
|
+
api-key: ENV/GOOGLE_API_KEY
|
|
415
|
+
options:
|
|
416
|
+
model: gemini-pro
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
#### Option 2: Service Account (Vertex AI API)
|
|
420
|
+
|
|
421
|
+
```yaml
|
|
422
|
+
---
|
|
423
|
+
meta:
|
|
424
|
+
symbol: 🤖
|
|
425
|
+
name: Nano Bot Name
|
|
426
|
+
author: Your Name
|
|
427
|
+
version: 1.0.0
|
|
428
|
+
license: CC0-1.0
|
|
429
|
+
description: A helpful assistant.
|
|
430
|
+
|
|
431
|
+
behaviors:
|
|
432
|
+
interaction:
|
|
433
|
+
directive: You are a helpful assistant.
|
|
434
|
+
|
|
435
|
+
provider:
|
|
436
|
+
id: google
|
|
437
|
+
credentials:
|
|
438
|
+
service: vertex-ai-api
|
|
367
439
|
file-path: ENV/GOOGLE_CREDENTIALS_FILE_PATH
|
|
440
|
+
project-id: ENV/GOOGLE_PROJECT_ID
|
|
368
441
|
region: ENV/GOOGLE_REGION
|
|
369
442
|
options:
|
|
370
443
|
model: gemini-pro
|
|
@@ -395,7 +468,7 @@ The randomly generated number is 59.
|
|
|
395
468
|
|
|
396
469
|
🤖> |
|
|
397
470
|
```
|
|
398
|
-
To successfully use Tools (Functions), you need to specify a provider and a model that supports them. As of the writing of this README, the provider that supports them is [OpenAI](https://platform.openai.com/docs/models), with models `gpt-3.5-turbo-1106` and `gpt-4-1106-preview`, and [Google](https://cloud.google.com/vertex-ai/docs/generative-ai/multimodal/function-calling#supported_models), with the model `gemini-pro`.
|
|
471
|
+
To successfully use Tools (Functions), you need to specify a provider and a model that supports them. As of the writing of this README, the provider that supports them is [OpenAI](https://platform.openai.com/docs/models), with models `gpt-3.5-turbo-1106` and `gpt-4-1106-preview`, and [Google](https://cloud.google.com/vertex-ai/docs/generative-ai/multimodal/function-calling#supported_models), with the `vertex-ai-api` service and the model `gemini-pro`.
|
|
399
472
|
|
|
400
473
|
Check the [Nano Bots specification](https://spec.nbots.io/#/README?id=tools-functions-2) to learn more about Tools (Functions).
|
|
401
474
|
|
|
@@ -418,7 +491,7 @@ Unlike Lua and Fennel, Clojure support is not _embedded_ in this implementation.
|
|
|
418
491
|
Here's [how to install Babashka](https://github.com/babashka/babashka#quickstart):
|
|
419
492
|
|
|
420
493
|
```sh
|
|
421
|
-
curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | bash
|
|
494
|
+
curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | sudo bash
|
|
422
495
|
```
|
|
423
496
|
|
|
424
497
|
This is a quick check to ensure that it is available and working:
|
|
@@ -576,5 +649,5 @@ gem build nano-bots.gemspec
|
|
|
576
649
|
|
|
577
650
|
gem signin
|
|
578
651
|
|
|
579
|
-
gem push nano-bots-
|
|
652
|
+
gem push nano-bots-2.0.0.gem
|
|
580
653
|
```
|
data/components/provider.rb
CHANGED
|
@@ -9,7 +9,7 @@ module NanoBot
|
|
|
9
9
|
def self.new(provider, environment: {})
|
|
10
10
|
case provider[:id]
|
|
11
11
|
when 'openai'
|
|
12
|
-
Providers::OpenAI.new(provider[:settings], provider[:credentials], environment:)
|
|
12
|
+
Providers::OpenAI.new(nil, provider[:settings], provider[:credentials], environment:)
|
|
13
13
|
when 'google'
|
|
14
14
|
Providers::Google.new(provider[:options], provider[:settings], provider[:credentials], environment:)
|
|
15
15
|
else
|
|
@@ -6,7 +6,7 @@ module NanoBot
|
|
|
6
6
|
module Components
|
|
7
7
|
module Providers
|
|
8
8
|
class Base
|
|
9
|
-
def initialize(_settings, _credentials, _environment: {})
|
|
9
|
+
def initialize(_options, _settings, _credentials, _environment: {})
|
|
10
10
|
raise NoMethodError, "The 'initialize' method is not implemented for the current provider."
|
|
11
11
|
end
|
|
12
12
|
|
|
@@ -13,26 +13,38 @@ module NanoBot
|
|
|
13
13
|
module Components
|
|
14
14
|
module Providers
|
|
15
15
|
class Google < Base
|
|
16
|
+
SAFETY_SETTINGS = %i[category threshold].freeze
|
|
17
|
+
|
|
16
18
|
SETTINGS = {
|
|
17
19
|
generationConfig: %i[
|
|
18
20
|
temperature topP topK candidateCount maxOutputTokens stopSequences
|
|
19
21
|
].freeze
|
|
20
22
|
}.freeze
|
|
21
23
|
|
|
22
|
-
SAFETY_SETTINGS = %i[category threshold].freeze
|
|
23
|
-
|
|
24
24
|
attr_reader :settings
|
|
25
25
|
|
|
26
26
|
def initialize(options, settings, credentials, _environment)
|
|
27
27
|
@settings = settings
|
|
28
28
|
|
|
29
|
+
gemini_credentials = if credentials[:'api-key']
|
|
30
|
+
{
|
|
31
|
+
service: credentials[:service],
|
|
32
|
+
api_key: credentials[:'api-key'],
|
|
33
|
+
project_id: credentials[:'project-id'],
|
|
34
|
+
region: credentials[:region]
|
|
35
|
+
}
|
|
36
|
+
else
|
|
37
|
+
{
|
|
38
|
+
service: credentials[:service],
|
|
39
|
+
file_path: credentials[:'file-path'],
|
|
40
|
+
project_id: credentials[:'project-id'],
|
|
41
|
+
region: credentials[:region]
|
|
42
|
+
}
|
|
43
|
+
end
|
|
44
|
+
|
|
29
45
|
@client = Gemini.new(
|
|
30
|
-
credentials:
|
|
31
|
-
|
|
32
|
-
project_id: credentials[:'project-id'],
|
|
33
|
-
region: credentials[:region]
|
|
34
|
-
},
|
|
35
|
-
settings: { model: options[:model], stream: options[:stream] }
|
|
46
|
+
credentials: gemini_credentials,
|
|
47
|
+
options: { model: options[:model], stream: options[:stream] }
|
|
36
48
|
)
|
|
37
49
|
end
|
|
38
50
|
|
|
@@ -61,9 +73,15 @@ module NanoBot
|
|
|
61
73
|
%i[backdrop directive].each do |key|
|
|
62
74
|
next unless input[:behavior][key]
|
|
63
75
|
|
|
76
|
+
messages.prepend(
|
|
77
|
+
{ role: 'model',
|
|
78
|
+
parts: { text: 'Understood.' },
|
|
79
|
+
_meta: { at: Time.now } }
|
|
80
|
+
)
|
|
81
|
+
|
|
64
82
|
# TODO: Does Gemini have system messages?
|
|
65
83
|
messages.prepend(
|
|
66
|
-
{ role:
|
|
84
|
+
{ role: 'user',
|
|
67
85
|
parts: { text: input[:behavior][key] },
|
|
68
86
|
_meta: { at: Time.now } }
|
|
69
87
|
)
|
|
@@ -17,13 +17,14 @@ module NanoBot
|
|
|
17
17
|
DEFAULT_ADDRESS = 'https://api.openai.com'
|
|
18
18
|
|
|
19
19
|
CHAT_SETTINGS = %i[
|
|
20
|
-
model stream
|
|
21
|
-
presence_penalty
|
|
20
|
+
model stream frequency_penalty logit_bias logprobs top_logprobs
|
|
21
|
+
max_tokens n presence_penalty response_format seed stop temperature
|
|
22
|
+
top_p tool_choice
|
|
22
23
|
].freeze
|
|
23
24
|
|
|
24
25
|
attr_reader :settings
|
|
25
26
|
|
|
26
|
-
def initialize(settings, credentials, environment: {})
|
|
27
|
+
def initialize(_options, settings, credentials, environment: {})
|
|
27
28
|
@settings = settings
|
|
28
29
|
@credentials = credentials
|
|
29
30
|
@environment = environment
|
data/docker-compose.example.yml
CHANGED
|
@@ -2,12 +2,21 @@
|
|
|
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
|
|
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.0.0 && bash"
|
|
6
6
|
environment:
|
|
7
7
|
OPENAI_API_ADDRESS: https://api.openai.com
|
|
8
8
|
OPENAI_API_KEY: your-access-token
|
|
9
|
+
|
|
10
|
+
GOOGLE_API_KEY: your-api-key
|
|
11
|
+
|
|
12
|
+
GOOGLE_CREDENTIALS_FILE_PATH: /root/.config/google-credentials.json
|
|
13
|
+
GOOGLE_PROJECT_ID: your-project-id
|
|
14
|
+
GOOGLE_REGION: us-east4
|
|
15
|
+
|
|
9
16
|
NANO_BOTS_ENCRYPTION_PASSWORD: UNSAFE
|
|
10
17
|
NANO_BOTS_END_USER: your-user
|
|
18
|
+
|
|
11
19
|
volumes:
|
|
20
|
+
- ./google-credentials.json:/root/.config/google-credentials.json
|
|
12
21
|
- ./your-cartridges:/root/.local/share/nano-bots/cartridges
|
|
13
22
|
- ./your-state-path:/root/.local/state/nano-bots
|
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', '~>
|
|
37
|
+
spec.add_dependency 'gemini-ai', '~> 2.0'
|
|
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: '
|
|
6
|
+
version: '2.0.0',
|
|
7
7
|
author: 'icebaker',
|
|
8
8
|
summary: 'Ruby Implementation of Nano Bots: small, AI-powered bots for OpenAI ChatGPT and Google Gemini.',
|
|
9
9
|
description: 'Ruby Implementation of Nano Bots: small, AI-powered bots that can be easily shared as a single file, designed to support multiple providers such as OpenAI ChatGPT and Google Gemini, with support for calling Tools (Functions).',
|
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:
|
|
4
|
+
version: 2.0.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-16 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: '
|
|
73
|
+
version: '2.0'
|
|
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: '
|
|
80
|
+
version: '2.0'
|
|
81
81
|
- !ruby/object:Gem::Dependency
|
|
82
82
|
name: pry
|
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|