Skip to content

Open source virtual assistant brain. (Could be used to make a siri/alexa alternative)

License

Notifications You must be signed in to change notification settings

androbwebb/JenniferVirtualAssistant

Repository files navigation

Jennifer

An open source virtual Assistant (Only OSX is supported)

Build Status Codacy Badge Codacy Badge

Inspired by Jasper Client but built from scratch to be smarter and more powerful.

🏁 Goals & Reasons for building Jennifer

  • MUCH Less coupling between the brain & the client interface
  • Easier plugin interface
  • Better security between plugins
  • Simpler API
  • More efficient brain
  • Everything is testable

💾 Installation

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

💬 Responding Modules:

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
Instagram (In dev) Read new instagram notifications if you ask
Facebook (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

👂 Notification Modules

Passive modules that act similar to push notifications

Name Status Description
GMail Here Jennifer will alert you when you have new gmail notifications.
Instagram (In dev) Alert you of new instagram notifications
Facebook (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

💻 Clients

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)

📬 Major Todos:

  • 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

🆒 Smaller Todos:

  • 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?

📄 License

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

👯 Contributing:

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.

📒 API Guide

Overview

Jennifer is a brain and clients. The brain does processing of input and returns output. clients 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.

Lessons (Plugins)

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:

  1. Count the number of unread emails in GMail account
  2. Read my unread emails outloud
  3. 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

ResponsePlugin

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 have VERBOSE_NAME = 'Tell the time or date'
  • can_respond(**kwargs) must return a boolean indicating if the plugin wants control. kwarg specifics below
  • respond(**kwargs) should run the commands. kwarg specifics below. You can call client.give_output (or the shortcut client.give_output_string) for output, but don't return 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

Clients

Types of clients

About

Open source virtual assistant brain. (Could be used to make a siri/alexa alternative)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages