-
Notifications
You must be signed in to change notification settings - Fork 41
1. Index
📓 Wiki updated on June 29, 2024
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.
Jarvis is a CPU intense service. 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
- 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
- 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 an in house OS-agnostic module to enable Wi-Fi and connect to a given SSID (stored as env vars).
Jarvis' versioning follows the same pattern as python's symantec versioning. 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.
-
- A
Telegram
bot has to be created usingBotFather
- Token has to be added to the env var
BOT_TOKEN
- List of chat ids have to be added to the env var
BOT_CHAT_IDS
- List of bot usernames have to be added to the env var
BOT_USERS
- A
-
- Hosts the offline communicator on
localhost
. - Requires a port number added to the env var
OFFLINE_PORT
. Defaults to4483
- Requires a password for authentication added to the env var
OFFLINE_PASS
. Defaults toOfflineComm
- Hosts the offline communicator on
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 to0
, 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
- 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
- Use this QR code for the env var
ROBINHOOD_QR
The telegram bot integration is implemented in two ways.
- Telegram Webhooks - Requires a public URL backed by a reverse proxy such as ngrok or cloudflare
- 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 tunnel is 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.