Skip to content

Ruby Implementation of Nano Bots: small, AI-powered bots easily shared as a single file, designed to support multiple providers such as Vicuna, OpenAI ChatGPT, Google PaLM, Alpaca, and LLaMA.

License

Notifications You must be signed in to change notification settings

hakersd504/ruby-nano-bots

 
 

Repository files navigation

Nano Bots 💎 🤖

A Ruby implementation of the Nano Bots specification.

Ruby Nano Bots Image artificially created by Midjourney through a prompt generated by a Nano Bot specialized in Midjourney.

Nano.Bot.mp4

Setup

For a system usage:

gem install nano-bots -v 0.0.1

To use it in a project, add it to your Gemfile:

gem 'nano-bots', '~> 0.0.1'
bundle install

For credentials and configurations, relevant environment variables can be set in your .bashrc, .zshrc, or equivalent files, as well as in your Docker Container or System Environment. Example:

export OPENAI_API_ADDRESS=https://api.openai.com
export OPENAI_API_ACCESS_TOKEN=your-token
export OPENAI_API_USER_IDENTIFIER=your-user

export NANO_BOTS_STATE_DIRECTORY=/home/user/.local/state/nano-bots
export NANO_BOTS_CARTRIDGES_DIRECTORY=/home/user/.local/share/nano-bots/cartridges

Alternatively, if your current directory has a .env file with the environment variables, they will be automatically loaded.

Docker

Clone the repository and copy the Docker Compose template:

git clone [email protected]:icebaker/ruby-nano-bots.git
cd ruby-nano-bots
cp docker-compose.example.yml docker-compose.yml

Set your provider credentials and choose your desired directory for the cartridges files:

version: '3.7'

services:
  nano-bots:
    image: ruby:3.2.2-slim-bullseye
    command: sh -c "gem install nano-bots -v 0.0.1 && bash"
    environment:
      OPENAI_API_ADDRESS: https://api.openai.com
      OPENAI_API_ACCESS_TOKEN: your-token
      OPENAI_API_USER_IDENTIFIER: your-user
    volumes:
      - ./your-cartridges:/cartridges

Enter the container:

docker compose run nano-bots

Start playing:

rnb cartridges/assistant.yml - repl

Usage

Command Line

After installing the gem, the rnb binary command will be available for your project or system.

Examples of usage:

rnb to-en-us-translator.yml - eval "Salut, comment ça va?"
# => Hello, how are you doing?

rnb midjourney.yml - eval "happy and friendly cyberpunk robot"
# => The robot exploring a bustling city, surrounded by neon lights
#    and high-rise buildings. The prompt should include colorful
#    lighting and a sense of excitement in the facial expression.

rnb lisp.yml - eval "(+ 1 2)"
# => 3

cat article.txt |
  rnb to-en-us-translator.yml - eval |
  rnb summarizer.yml - eval
# -> LLM stands for Large Language Model, which refers to an
#    artificial intelligence algorithm capable of processing
#    and understanding vast amounts of natural language data,
#    allowing it to generate human-like responses and perform
#    a range of language-related tasks.
rnb assistant.yml - repl

All of the commands above are stateless. If you want to preserve the history of your interactions, replace the - with a state key. You can use a simple key, such as your username, or a randomly generated one:

require 'securerandom'

SecureRandom.hex # => 6ea6c43c42a1c076b1e3c36fa349ac2c
rnb assistant.yml your-user eval "Salut, comment ça va?"
rnb assistant.yml your-user repl

rnb assistant.yml 6ea6c43c42a1c076b1e3c36fa349ac2c eval "Salut, comment ça va?"
rnb assistant.yml 6ea6c43c42a1c076b1e3c36fa349ac2c repl

Library

To use it as a library:

require 'nano-bots/cli' # Equivalent to the `rnb` command.
require 'nano-bots'

NanoBot.cli # Equivalent to the `rnb` command.

NanoBot.repl(cartridge: 'cartridge.yml') # Starts a new REPL.

bot = NanoBot.new(cartridge: 'cartridge.yml')

bot.eval('Hello')

bot.repl # Starts a new REPL.

NanoBot.repl(cartridge: 'cartridge.yml', state: '6ea6c43c42a1c076b1e3c36fa349ac2c')

bot = NanoBot.new(cartridge: 'cartridge.yml', state: '6ea6c43c42a1c076b1e3c36fa349ac2c')

Cartridges

Here's what a Nano Bot Cartridge looks like:

---
name: Assistant
version: 0.0.1

behaviors:
  interaction:
    directive: You are a helpful assistant.

interfaces:
  repl:
    prompt:
      - text: '🤖'
      - text: '> '
        color: blue

provider:
  name: openai
  settings:
    model: gpt-3.5-turbo
    credentials:
      address: ENV/OPENAI_API_ADDRESS
      access-token: ENV/OPENAI_API_ACCESS_TOKEN
      user-identifier: ENV/OPENAI_API_USER_IDENTIFIER

Check the Nano Bots specification to learn more about how to build cartridges.

Development

bundle
rubocop -A
rspec

Publish to RubyGems

gem build nano-bots.gemspec

gem signin

gem push nano-bots-0.0.1.gem

About

Ruby Implementation of Nano Bots: small, AI-powered bots easily shared as a single file, designed to support multiple providers such as Vicuna, OpenAI ChatGPT, Google PaLM, Alpaca, and LLaMA.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Ruby 100.0%