npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@genie-ai/genie-router

v3.0.0

Published

A generic platform that will route commands and conversations from voice or text-based clients to 3rd party backends.

Downloads

14

Readme

genie-router

Build Status

A generic platform that routes commands and conversations from voice or text-based clients to 3rd party backends. Functionality is added via plugins, checkout the Plugins section for more information.

View online demo.

Installation and running

Globally

npm install -g genie-router

This will make genie-router globally available on the system.

genie-router and its plugins must be configured with the configuration file. It must be provided at startup:

genie-router -c config.json

See config.json.dist for more details.

Via git

git clone https://github.com/genie-ai/genie-router.git
cd genie-router
npm install

This will make genie-router available in the directory you cloned the repository in. Run genie-router using ./bin/genie-router -c config.json.

As a module

genie-router can also be used as a module in your existing project.

npm install --save genie-router

Then you can initialize the router via:

const app = new Router(config)

Here you need to parse and provide the configuration object yourself.

Configuration

Copy config.json.dist and update the values to your liking. See read-config documentation for more details on how values can be declared.

Plugin location

When genie-router starts it will attempt to load its plugins. The default location is $HOME/.genie-router, if that location does not exist, it will be created, the echo and cli-local plugin will be installed by default.

You can override the default plugin location, by using the pluginStore configuration attribute. When you override the location, make sure that the configured path exists, genie-router will not attempt to create it.

"pluginStore": {
  "location": "/home/user/.config/genie-router"
}

Storage location

It is possible for plugins to store data persistently, such as authorized sessions and other small amounts of data. The data is all stored in a JSON file, namespaced per plugin. By default it is stored in ${USER}/.genie-router/storage.json but the location of the file can be configured.

"storage": {
    "location": "/etc/genie-router/store.json"
}

HTTP

To enable HTTP support in general (plugins can use the http library to handle HTTP requests themselves), add a http attribute to the config:

"http": {
  "enabled": true,
  "port": 3001
}

You need to set enabled to true and configure the port on which to listen on. The default is 3001. When http is enabled, you can install plugins exposing HTTP urls.

There is a HTTP API plugin available that exposes a way for external clients to send a message using genie-router.

Brains

defaultBrain is the brain that should be selected by default when no brainSelector returns a brain suggestion. The brainStickiness is the time period (in seconds) when a previously selected brain in a client overrides the configured default brain. The default value for the stickiness is 120 seconds.

A small example to explain it some more:

  1. The brain-mentions plugin is used to be able to select a different brain by using its name
  2. The default brain is echo, but the google-assistant is also used.
  3. When the user inputs something, the input is simply echood by the echo plugin
  4. The user types ask google-assistant what is so special about 42?
  5. The stickiness of the brain now dictates that any input received that is not picked up by a brainSelector is then handled by the google_assistant plugin, not the default echo.

Plugins

Plugins can be installed by running npm install --save <plugin-identifier> in the plugins folder. Then create an entry in the config.json file in the plugins attribute with the key of the plugin. Include any additional configuration information as explained in the plugin readme.

Implementing your own is simple. You need to implement a npm module of which the index returned is an object with a client, brain or brainSelector attribute, which is a function. See the cli-local or echo plugins for simple examples.

Types

There are four types of plugins: clients, brains, listeners and brain selectors. One plugin must be at least one of these four types, but can also be a combination of them.

A client takes input and echoes the resulting output. A brain takes text as input, does something with it, and returns an output. Brain selectors parse the input text and return the name of a brain to use for processing the input. Listeners can listen to events, currently only input.heard and output.reply are supported.

Overview

| Name | Type | Key | Description | Installation | URL | | ---- |----- |---- | ----------- | ------------ | --- | | HTTP Api | Client | api-http | Provides a generic HTTP API for external clients. | npm install @genie-ai/genie-router-plugin-api-http | genie-router-plugin-api-http | | Brain Mentions | BrainSelector | brain-mentions | selects a brain if its name is mentioned in the first words of an input, or an alias is defined | npm install @genie-ai/genie-router-plugin-brain-mentions | genie-router-plugin-brain-mentions | | Google Assistant | Brain | google-assistant | Enables google-assistant to supply the answers in genie-router | npm install @genie-ai/genie-router-plugin-google-assistant | genie-router-plugin-google-assistant | | Telegram Bot | Client | telegram-bot | Enables a bot with the Telegram Bot API for input/output. | npm install @genie-ai/genie-router-plugin-telegram-bot | genie-router-plugin-telegram-bot | | Web Client | Client | web-client | Provides a webpage where input can be send | npm install @genie-ai/genie-router-plugin-web-client | genie-router-plugin-web-client | | Rivescript | Brain | rivescript | Allows genie-router to use rivescript as a brain. | npm install @genie-ai/genie-router-plugin-rivescript | genie-router-plugin-rivescript | | Facebook Messenger | Client | facebook-messenger | Enables the use of FB Messenger as a client. | npm install @genie-ai/genie-router-plugin-facebook-messenger | genie-router-plugin-facebook-messenger | | Dialogflow (Api.ai) | Brain | dialogflow | Use Dialogflow as a brain to handle input | npm install @genie-ai/genie-router-plugin-dialogflow | genie-router-plugin-dialogflow | | Dashbot | Listener | dashbot | Log transcripts to dashbot.io | npm install @genie-ai/genie-router-plugin-dashbot | genie-router-plugin-dashbot | | Sentry | HTTP | sentry | Log any error to sentry.io | npm install @genie-ai/genie-router-plugin-sentry | genie-router-plugin-sentry | | CLI Local | Client | cli-local | Send input in the terminal where genie-router was started | npm install @genie-ai/genie-router-plugin-cli-local | genie-router-plugin-cli-local | | Echo | Brain | echo | Echoes all input back | npm install @genie-ai/genie-router-plugin-echo | genie-router-plugin-echo |

Want your plugin added here? Update the readme and create a Pull Request.