Your personal voice assistant.
"Hey Athena" is a 100% open-source, cross-platform, modular voice assistant framework. It aims to do everything that Siri, Cortana, and Echo can do - and more.
Written in Python 3
- "Athena (double beep) tweet What's good Twitter homies?" (IFTTT key required)
- "Athena (double beep) what's the weather like in DFW?"
- "Athena (double beep) what is the capital of Tanzania?"
- "Athena (double beep) turn up (plays music)"
- "Athena (double beep) open facebook.com"
Our modular templates make it easy to add new "skills" to Athena. Write a simple Python "skill" module to control your house with your voice. Write a module to post a tweet with your voice.
Don't like the name "Athena"? Change it to anything you want, like "Swagger Bot" or "Home Slice".
- Download and install Hey Athena using the directions below
- Write your own modules so Athena can respond to different commands
- Write modules and contribute them by submitting a pull request to this repository
- Find errors and post issues
- If you modify the framework software, submit a pull request
- Give feedback and help us build a community!
- Python 3
- Pocketsphinx (SWIG required in your PATH during installation)
- SpeechRecognition
- Pyglet (AVBin required)
- PyAudio (unofficial windows build: http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio)
- gTTS
- PyYAML
- Selenium
For installation notes, please use: http://heyathena.com/docs/intro/install.html
An active module is simply a collection of tasks. Tasks look for patterns in user text input (generally through "regular expressions"). If a pattern is matched, the task executes its action. Note: module priority is taken into account first, then task priority.
"""
File Name: hello_world.py
Finds and returns the latest bitcoin price
Usage Examples:
- "What is the price of bitcoin?"
- "How much is a bitcoin worth?"
"""
from athena.classes.module import Module
from athena.classes.task import ActiveTask
from athena.api_library import bitcoin_api
class GetValueTask(ActiveTask):
def __init__(self):
# Matches any statement with the word "bitcoin"
super().__init__(words=['bitcoin'])
# This default match method can be overridden
# def match(self, text):
# # "text" is the STT translated input string
# # Return True if the text matches any word or pattern
# return self.match_any(text)
def action(self, text):
# If 'bitcoin' was found in text, speak the bitcoin price
bitcoin_price = str(bitcoin_api.get_data('last'))
self.speak(bitcoin_price)
# This is a bare-minimum module
class Bitcoin(Module):
def __init__(self):
tasks = [GetValueTask()]
super().__init__('bitcoin', tasks, priority=2)
- Context module (remembers location and important stuff)
- Smart Home API/modules (Hook outlets)
- IFTTT Maker recipe modules
- RESTful API services
- Oauth API
- Canvas module (for college grades/assignments info)
- Gmail (and other google modules)
- Calender (regular)
- Cooking module (hands-free cooking)
- Movies/Showing Times
- Sports-related modules
- Phone Texting (for multiple carriers)
- Text-based Games (zork, etc.)
- Movement (passive, active, API)
- Play music based on mood (and weather)
If you create a module, submit a pull request! We'd love to add it to the repository. You can also email it to connor@heyathena.com
(not implemented yet)
- Passive modules will be scheduled tasks run in the background.
- Useful for notifications (e.g. - Twitter, Facebook, GMail updates).
- Future versions may have event triggers for modules as well.