Skip to content
Vignesh Rao edited this page Oct 16, 2023 · 78 revisions

Everything Jarvis

📓   Wiki updated on October 16, 2023

Demo videos were recorded back in 2020, which are way outdated but will give a basic idea.

Jarvis uses specific keywords to trigger the respective function which performs a specific task. It is not 100% foolproof but most of the common errors are caught and responses are configured accordingly. If there are any unexpected exceptions please raise an issue.

Restrictions

Jarvis is a heavy and processor intense package. To make sure the host machine doesn't suffer Jarvis' wrath, it runs on LIMITED mode if the machine is low on CPU cores. This will disable all background processes. Although it may limit Jarvis' ability to communicate offline, it will still be fully functional on voice commands (except to set alarms and reminders as they require functional background processes).

Currently, Jarvis can run only on Linux, macOS and Windows.

Tested on macOS High Sierra and later, Windows 10 and Ubuntu 22.0 LTS

Usage

  • Jarvis works by automatically detecting the Operating System it is being run on.
  • Some key features require API keys, but they can be generated for free.
  • None of the features in Jarvis require paid subscriptions.

**Features that require API keys are available only based on their hardware availability

Stability

  • There are broad exception clauses implemented to prevent Jarvis from crashing.
  • To make sure Jarvis is always connected to the internet, it runs a connection checker in the background.
  • The connection checker uses a built-in OS-agnostic module to enable Wi-Fi and connect to a given SSID (stored as env vars).

Versioning

Jarvis' versioning follows the same pattern as python's. major, minor and micro

  • Major version change (eg: 1.* to 2.*) means there are major changes (requires an immediate update)
  • Minor version change (eg: 1.2 to 1.3) means the changes have considerable enhancements/feature updates or a break-fix on a single feature.
  • Micro version change (eg: 1.2 to 1.2.4) means the changes have very little enhancements/feature updates or improvement on a single feature.

Offline Communication with Jarvis

  • TelegramBot

    1. A Telegram bot has to be created using BotFather
    2. Token has to be added to the env var BOT_TOKEN
    3. List of chat ids have to be added to the env var BOT_CHAT_IDS
    4. List of bot usernames have to be added to the env var BOT_USERS
  • JarvisAPI

    1. Hosts the offline communicator on localhost.
    2. Requires a port number added to the env var OFFLINE_PORT. Defaults to 4483
    3. Requires a password for authentication added to the env var OFFLINE_PASS. Defaults to OfflineComm
Conditional API Endpoints

There are some conditional endpoints (/surveillance and /investment) in Jarvis API.
The availability of these endpoints depend on the environment variables setup in the host machine.
Please refer to the Features section in the readme document under the topic API Features

If the LIMITED mode is disabled, Jarvis will automatically try to launch speech-synthesis in a docker container.

If this launch fails or the SPEECH_SYNTHESIS_TIMEOUT is set to 0, this part will be skipped

To enable independent speech-synthesis
docker run \
    -it \
    -p 5002:5002 \
    -e "HOME=${HOME}" \
    -v "$HOME:${HOME}" \
    -v /usr/share/ca-certificates:/usr/share/ca-certificates \
    -v /etc/ssl/certs:/etc/ssl/certs \
    -w "${PWD}" \
    --user "$(id -u):$(id -g)" \
    thevickypedia/speech-synthesis

To test speech synthesis running locally

curl -X POST \
 -H "Content-Type: text/plain" \
 -d 'Welcome to the world of speech synthesis' \
 'http://localhost:5002/api/tts?voice=en-us_northern_english_male-glow_tts&vocoder=medium' \
 --output temp.wav && open temp.wav

💡   Speech Synthesis can run on a docker container for better voices but, response might be negligibly slower. If you don't have docker installed or simply don't want to use it, set the SPEECH_SYNTHESIS_TIMEOUT env var to 0. This is also done automatically if failed to launch a docker container upon startup.

Feature Specific Gotchas

Investment Details

  • Login to your Robinhood Web App
  • Go to Account -> Settings or click me
  • Turn on Two-Factor Authentication
    • Select “Authentication App”
    • Click “Can’t Scan It?”, and copy the 16-character QR code

Telegram API

The telegram bot integration is implemented in two ways.

  1. Telegram Webhooks - Requires a public URL backed by a reverse proxy such as nginx or ngrok
  2. Telegram API polling - Uses long polling to check for any new events (messages)

By default, Jarvis will attempt to launch the Telegram API via webhooks, if there is an ngrok connection active.

Why webhooks are prioritized?
  • Since Jarvis is a CPU intense application, it is better to setup webhooks for telegram bot instead of using long polling.
  • This will also avoid spinning up a dedicated processes for Telegram API, since Jarvis API can handle webhooks.
  • Note that, the function of an API is a push model, and it is almost always idle until an event is received.

Refer telegram-webhook for more details.

Clone this wiki locally