Inspired by Jasper Client but built from scratch to be smarter and more powerful.
- MUCH Less coupling between the brain & the client interface
- Easier plugin interface
- Better security between plugins
- Simpler API
- More efficient brain
- Everything is testable
Clone the repo: git clone [email protected]:androbwebb/JenniferVirtualAssistant.git
CD into the folder cd JenniferVirtualAssistant
Make sure you're using python 3.6+
python --version
Python 3.7.6
Install Dependencies (Needs to be done every time a plugin is added) python install_requirements.py
Run a test client with python quick_run.py
Active modules that are triggered by input
Name | Status | Description |
---|---|---|
Time | Here | Ask Jennifer what the time or date is and she responds. |
Find My iPhone | Here | Jennifer can use the apple find my iphone API to make your iPhone ring |
GMail | Here | Jennifer will read new Gmail emails if you ask. |
Conversions | Here | Convert units of measurement |
(In dev) | Read new instagram notifications if you ask | |
(In dev) | Jennifer will read new Facebook notifications if you ask. | |
Yelp | (Planned) | Jennifer can search yelp for restaurants and answer questions about them |
Fandango | (Planned) | Find out when movies are playing near you |
Passive modules that act similar to push notifications
Name | Status | Description |
---|---|---|
GMail | Here | Jennifer will alert you when you have new gmail notifications. |
(In dev) | Alert you of new instagram notifications | |
(In dev) | Jennifer will alert you when you have new facebook notifications. | |
CouchPotato | (Planned) | Jennifer will alert you when new movies are downloaded with couch potato. |
Alarm | (Planned) | Jennifer can act as your alarm clock. |
Slack | (Planned) | Read slack messages outloud |
Pushover | (Planned) | A proxy to receive notifications as a Pushover Open Client and pass them through to Jennifer |
IO sources, various ways of interacting with Jennifer
Client | Status | Description |
---|---|---|
Terminal | Done | Interact with Jennifer via a text-based command line prompt |
iPhone | (Planned) | Interact with Jennifer via STT in an iPhone app. |
Google STT | (Planned) | Interact with Jennifer via any device you can install Google STT on (rPi, Mac OSX) |
- Respect quiet hours for notifications
- Bite the bullet and make an actual client with STT
- Make a music-based plugin
- Use a response type other than JenniferReponseTextSegment
- Make a news plugin (or something that is actually interesting)
- Make an alarm clock
- Think about how this would play into hardware (Tie a button to alarm clock?)
- Control Plex?
The MIT License (MIT)
Copyright (c) 2016 Andrew Webb
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
SOUNDS: The sound files in /ioclients/assets/
are under Creative Commons 3 License thanks to dev_tones
I welcome all contributions as long as they adhere to the principals listed in the Goals section. If you contribute a client or plugin, expect to be tagged in future PR's that affect your code.
Jennifer is a brain
and clients
. The brain
does processing of input and returns output. client
s are
responsible for all IO. A client can be any type and combination of input and output. Imagine Amazon's Alexa: it has
microphone input and speaker output. I didn't want to lock Jennifer to only audible IO however. Included in this package
is a terminal-based client for pure text input and output. You could also connect a raspberry PI to a screen, and show
only output in visual formats.
A lesson
is a set of related functionality that extends the capability of the brain
to complete some tasks.
For example, JenniferGmailPlugin
brings 3 functions:
- Count the number of unread emails in GMail account
- Read my unread emails outloud
- Notify me when I have new emails
Type | Class | Description |
---|---|---|
Response | JenniferResponsePlugin |
A plugin that responds when triggered by a set of commands: examples: JenniferTimePlugin , JenniferFindMyIphonePlugin ) |
Notification | JenniferNotificationPlugin |
A wrapper for a background task. Upon initiation, creates a task that runs on an interval or at a specified time. Examples: JenniferGmailNotificationPlugin |
All response plugins must implement at least three things:
VERBOSE_NAME
property must be set with a short description of what it does. For example,JenniferTimePlugin
would haveVERBOSE_NAME = 'Tell the time or date'
can_respond(**kwargs)
must return a boolean indicating if the plugin wants control. kwarg specifics belowrespond(**kwargs)
should run the commands. kwarg specifics below. You can callclient.give_output
(or the shortcutclient.give_output_string
) for output, but don'treturn
unless you are ready for the plugin to give up control.
kwarg | Info |
---|---|
tags |
a set of NLTK parsed tags. Each word is matched with it's best guess part of speech. |
plain_text |
the plain text that was given from the client |
client |
- the client currently running. |
brain |
the brain. likely won't be used.. might be deprecated later. |
todo
Types of clients