{"id":22372130,"url":"https://github.com/ryan-m-smith/quinton-voiceassistant","last_synced_at":"2025-03-26T17:18:00.382Z","repository":{"id":48675083,"uuid":"310931665","full_name":"Ryan-M-Smith/Quinton-VoiceAssistant","owner":"Ryan-M-Smith","description":"A voice assistant, similar to Siri, Google Assistant, and Amazon Alexa, but with many differences and limitations. ","archived":false,"fork":false,"pushed_at":"2021-09-01T04:10:20.000Z","size":3585,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-31T22:08:58.191Z","etag":null,"topics":["houndify","speech-recognition","voice-assistant","voice-control"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ryan-M-Smith.png","metadata":{"files":{"readme":"README-EXT.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-11-07T21:04:52.000Z","updated_at":"2022-10-07T22:29:44.000Z","dependencies_parsed_at":"2022-08-27T09:40:21.149Z","dependency_job_id":null,"html_url":"https://github.com/Ryan-M-Smith/Quinton-VoiceAssistant","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ryan-M-Smith%2FQuinton-VoiceAssistant","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ryan-M-Smith%2FQuinton-VoiceAssistant/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ryan-M-Smith%2FQuinton-VoiceAssistant/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ryan-M-Smith%2FQuinton-VoiceAssistant/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ryan-M-Smith","download_url":"https://codeload.github.com/Ryan-M-Smith/Quinton-VoiceAssistant/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245699261,"owners_count":20657987,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["houndify","speech-recognition","voice-assistant","voice-control"],"created_at":"2024-12-04T20:33:32.192Z","updated_at":"2025-03-26T17:18:00.336Z","avatar_url":"https://github.com/Ryan-M-Smith.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Quinton-VoiceAssistant\n\n## This is Quinton; a voice assistant, similar to Siri, Google Assistant, and Amazon Alexa, but with many differences and limitations\n\n---\n\n## Table of Contents\n\n1. [Basic Information](#basic-information)\n    * [About the Name](#about-the-name)\n    * [Features and Limitations](#features-and-limitations)\n        * [Features](#features)\n        * [Limitations](#limitations)\n    * [Recognizable Commands](#recognizable-commands)\n\n2. [How Quinton Works](#how-quinton-works)\n\n3. [Installation Prerequisites](#installation-prerequisites)\n    * [Requirements](#requirements)\n        * [Python Version](#python-version)\n        * [PyPI Requirements (`pip` requirements)](#pypi-requirements-pip-requirements)\n        * [Other Requirements](#other-requirements)\n        * [API Keys](#api-keys)\n    * [Houndify Sign-up Instructions](#houndify-sign-up-instructions)\n        * [How to Sign Up for a Houndify account](#how-to-sign-up-for-a-houndify-account)\n        * [How to Register a Client ID and Key](#how-to-register-a-client-id-and-key)\n        * [How to Test Out the Houndify API Online](#how-to-test-out-the-houndify-api-online)\n        * [Houndify Credit Usage Info and Account Upgrading](#houndify-credit-usage-info-and-account-upgrading)\n    * [OpenWeatherMap Sign-up Instructions](#openweathermap-sign-up-instructions)\n        * [How to Sign Up for an OpenWeatherMap account](#how-to-sign-up-for-an-openweathermap-account)\n        * [Finding Your Default API Key](#finding-your-default-api-key)\n        * [Registering a New API Key](#registering-a-new-api-key)\n        * [Changing the Name of a Key](#changing-the-name-of-a-key)\n        * [How to Test Out the OpenWeatherMap API Online](#how-to-test-out-the-openweathermap-api-online)\n        * [OpenWeatherMap Usage Info and Account Upgrading](#openweathermap-usage-info-and-account-upgrading)\n\n4. [Actually installing the software](#actually-installing-the-software)\n    * [Manual Dependency Installation](#manual-dependency-installation)\n      * [With the Build Functionality](#with-the-build-functionality)\n      * [Without the Build Functionality](#without-the-build-functionality)\n    * [Running](#running)\n\n5. [Future Inclusions](#future-inclusions)\n    * [Windows Support](#windows-support)\n    * [Different Versions](#different-versions)\n    * [ToolKits](#toolkits)\n    * [More Build Support](#more-build-support)\n\n6. [Miscellaneous](#miscellaneous)\n    * [Using the `pyowm.caching` Module](#using-the-pyowm.caching-module)\n\n7. [Contributing](#contributing)\n    * [Code Modifications](#code-modifications)\n    * [Creating ToolKits](#creating-toolkits)\n\n8. [Software Information](#software-information)\n    * [License](#license)\n    * [Copyright](#copyright)\n    * [Finding the Software](#finding-the-software)\n    * [Reporting Bugs](#reporting-bugs)\n    * [Feature Requests](#feature-requests)\n\n9. [Resources](#resources)\n\n---\n\n## Basic Information\n\n### About the Name\n\nAs you've probably already figured out, the voice assistant's name is Quinton. If you don't like the name and want to change it, just\nmodify the wake word in [config.yaml](data/config/config.yaml).\n\n### Features and Limitations\n\n#### Features\n\n* Listen to commands\n* Reply to commands\n* Record command data (history, audio responses)\n* Recall previously used commands from a cache\n* Log error data\n* Is highly customizable\n\n#### Limitations\n\n* Small dictionary - can only recognize 47 words\n* Task count - can only perform 9 tasks, 2 of which currently don't work\n* Not the fastest - replies can take from 6-9 seconds to be spoken\n* Not the most elegant to set up\n  * No companion app (yet)\n  * Doesn't have the most intuitive setup wizard\n\n### Recognizable Commands\n\n#### As of now, Quinton can recognize and reply to the following commands\n\n* Asking the time\n  * ex. \"What time is it?\"; \"Tell me the time\"\n\n* Getting the date\n  * ex. \"What is the date?\"; \"Tell me the date\"\n\n* Getting the weather\n  * ex. \"What is the weather like?\"; \"Tell me the weather\"\n\n* Recording information (such as your favorite animal)\n  * ex. \"My favorite animal is a/an `animal name`\"\n\n* **Future Inclusion:** Smart home control\n  * \"Turn on/off the light\"\n\n    _NOTE: As of now, these kinds of commands are recognized, but they give an \"operation not permitted\" message_\n\n## How Quinton Works\n\nAll of Quinton's text to speech is done by the Houndify API, but everything is called via [Uberi's](https://www.github.com/Uberi)\n[SpeechRecognition library](https://www.github.com/Uberi/speech_recognition). A Houndify home automation client is used to receive the\ncommands. After the speech is converted to text, it is processed and replied to locally (as opposed to having a reply transmitted\nfrom the internet).\n\n## Installation Prerequisites\n\n### Requirements\n\n#### Python Version\n\nYou will need to install and run Quinton-VoiceAssistant with Python 3.8 or newer. Download and install the correct\nbuild and version of Python for your operating system [here](https://python.org/downloads).\n\n**macOS Users:** If you'd prefer, you can install Python via Homebrew rather than from source.\n\n#### PyPI Requirements (`pip` requirements)\n\n* `omxplayer-wrapper`\n* `phonetics`\n* `pyalsaaudio`\n* `pyaudio`\n* `pyowm`\n* `pytz`\n* `pyyaml`\n* `speechrecognition`\n* `tinytag`\n\n#### Other Requirements\n\nThere are some non-PyPI packages that Quinton-VoiceAssistant requires that need to be installed from your package manager.\nThese dependencies are installed by running the setup script, so there is not need to install them separately unless\nyou choose to. A table of the required packages for Debian, Ubuntu, Fedora, and Manjaro systems is provided below. If you use\na different distribution or package manager, you can search for packages for your system [here](https://pkgs.org).\n\n| Debian/Ubuntu     | Fedora                                 | Manjaro          |\n| ---------------   | ------                                 | -------          |\n| `portaudio19-dev` | `portaudio-devel`; `redhat-rmp-config` | `portaudio`      |\n| `python3-espeak`  | `espeak-devel`                         | `python-pyaudio` |\n| `python3-pyaudio` | `python3-pyaudio`                      | -                |\n| `espeak`          | `espeak`                               | `espeak`         |\n| `libbz2-dev`      | `bzip2-devel`                          | `bzip2`          |\n| `sox`             | `sox`                                  | `sox`            |\n| `ffmpeg`          | `ffmpeg`                               | `ffmpeg`         |\n\n**NOTE:** `omxplayer` can be used instead of `ffmpeg` on a Raspberry Pi running Raspberry Pi OS.\n\n**NOTE:** If you try to run the software and get an error involving one of these packages, (such as a `ModuleNotFoundError`\nfor `_bz2`), you may need to rebuild your Python installation. See [this](https://stackoverflow.com/questions/12806122/missing-python-bz2-module)\nStackOverflow thread for more information.\n\n#### API Keys\n\nIn order for Quinton to run with 100% functionality, you will need to have a Houndify and OpenWeatherMap accounts with valid API keys.\nThe good news is, all of this is free. Both services offer premium subscription options if you decide you want to upgrade your account\nin the future (to increase your daily API call/credit allotment), but it's completely optional. In addition, both accounts can be signed up\nfor without the use of a credit card.\n\n**NOTE:** You only need both accounts for _100%_ functionality. If you don't plan to use the weather features, you can use the software with\nonly Houndify keys.\n\n**NOTE:** You must put all API keys in the [credentials.yaml](credentials.yaml) file for everything to work properly!\n\n---\n\nContinue reading for sign-up/setup instructions. If you want to wait until later to sign up, click [here](#actually-installing-the-software)\nto skip to the software installation instructions (i.e., the section after the next one).\n\n---\n\n### Houndify Sign-up Instructions\n\n#### How to Sign Up for a Houndify account\n\n1. Navigate to [houndify.com](https://www.houndify.com)\n2. Click on the blue button labeled \"Try it Free\" in the upper right\n3. Make sure you're selected on \"Create a developer account\"\n4. Fill out all of the required fields and agree to the terms of service\n5. Click \"Get Started\"\n\n#### How to Register a Client ID and Key\n\n1. On the dashboard, under \"My Clients\", select \"New Client\"\n2. Enter a name for the client (any name; it doesn't matter)\n3. For the platform, select \"Home Automation\"\n4. In the Enabled Domains section, start typing \"speech to text only\", and select it when it appears. Don't select any other domains.\n5. Click \"Save \u0026 Continue\"\n6. Your client ID and key should appear as well as some statistics about your Houndify speech-to-text activity.\n\nFor more information about how you use your Houndify client, click on \"View Analytics page\" to see information about how you use\ncredits, how often you utilize speech-to-text, domain usage information, and query usage.\n\n**NOTE:** the section labeled \"Domain Distribution\" will most likely only display \"Speech To Text Only\" as 100% of the distribution unless\nyou make a text query (e.g., typing in a command on the website's API tester).\n\n#### How to Test Out the Houndify API Online\n\n1. If you aren't already on the \"Overview \u0026 API Keys\" page, click on \"Dashboard\" at the top of the page. Otherwise, skip to step 3.\n2. Select your client\n3. On the left-hand side of the page, select \"Try the Houndify API\"\n4. Type or speak a command. If you're speaking, make sure you allow microphone acccess\n5. Because the \"Speech To Text Only\" domain is enabled, the only response you'll get is what you typed/spoke spoken back to you,\n   but this is expected.\n\nIf you want to play around with some other domains to get actual responses, just create another client. As far as I know, there is no\nlimit to how many clients you can have.\n\n#### Houndify Credit Usage Info and Account Upgrading\n\nFor free users, Houndify imposes a limit of 100 credits per day per client, with a limit of 10 queries per second.\nYou can gain more credits by upgrading your account. To do this, select the \"Pricing\" tab at the top of the page to view\nthe prices for each tier and to see what is included in each. Note that you must verify your account before you are\nallowed to upgrade, and all tiers except Enterprise limit you to 10 queries per second.\n\nFor more information on how credits are used and how credit usage is calculated, scroll down a little bit on the Pricing page or\njust click [here](https://www.houndify.com/pricing#how-do-credits-work).\n\n### OpenWeatherMap Sign-up Instructions\n\n#### How to Sign Up for an OpenWeatherMap account\n\n1. Navigate to [openweathermap.org](https://openweathermap.org)\n2. Click on \"Sign in\" in the upper right\n3. Click on \"Create an Account\"\n4. Fill out all fields, verify your age, agree to the terms and conditions, customize your mail preferences, and complete the\n   reCAPTCHA.\n5. Click \"Create Account\"\n\n#### Finding Your Default API Key\n\nAll OpenWeatherMap accounts come with a default API key named \"Default\" (but the name can be changed, see [below](#changing-the-name-of-a-key)).\n\nTo find your default API Key:\n\n1. On the lower navigation bar (under the one with the search bar) click on \"API Keys\". If this step is causing you some trouble (it was confusing\n   for me at first), the link is [here](https://home.openweathermap.org/api_keys). Note that this link only works if you're signed in.\n2. A default key should be pre-generated for you.\n\n#### Registering a New API Key\n\nAccording to OpenWeatherMap:\n\n\u003e You can generate as many API keys as needed for your subscription. We accumulate the total load from all of them.\n\nSo to do it:\n\n1. Make sure you're on the \"API Keys\" tab (step 1 above)\n2. Under \"Create Key\", type in a name for your key\n3. Click \"Generate\"\n\n#### Changing the Name of a Key\n\nNote that for any API key (even the default one), you can change its name by clicking on the little pencil and paper icon to the right\nof the current name. If you have multiple keys, you can delete any of them by clicking the \"x\" next to the change-name icon. Press \"OK\"\nif a box pops up asking to verify the key deletion (I know this happens in Chrome).\n\n#### How to Test Out the OpenWeatherMap API Online\n\nTo test the OpenWeatherMap API, just type the name of your city, county, or country in the search bar at the top. When you select your\ncorrect result, you should see the weather data in your area that you are allowed to see with your account. Note that clicking on your result\nmay redirect you the first time you try to search, and your data won't show up. If this happens, search again in the white search bar that appears\na bit further down on the page (not the gray one at the top you searched in before). In order from left to right, the buttons to the right of the search\nbar are: a pointer button to see weather for your predicted location, a button labeled \"Different Weather?\" to report incorrect weather forecasts and\nsubmit a correct one, and buttons to switch between Fahrenheit and Celsius. Note that the location prediction might get your location wrong. Also, from\nmy experience, OpenWeatherMap has been very accurate, so I don't think you would need to use the \"Different Weather?\" feature often if at all.\n\n#### OpenWeatherMap Usage Info and Account Upgrading\n\nFor OpenWeatherMap, there isn't a credit system or any kind of longer-term usage cap. The only restriction is that you can only make 60\ncalls per minute. This is probably more than any one person would need, but upgrading does allow you to get forecasts further ahead (for example,\na 16-day daily forecast reading). You can also sign up for specialized APIs that give you data like weather forecasts from up to 40 years ago.\n\n## Actually installing the software\n\nBefore running any commands, make sure you're in the source directory. Also, be sure to use the correct Python versions/commands\nfor your system. For example, your Python interpreter may be run by calling `python3.9` rather than `python3`. In these examples,\nI will be using `python3`.\n\nIn certain cases, you may have to run `setup.py install` as root. If you don't want to use `sudo`, you can use the `--user` argument:\n\n```bash\nsudo setup.py install \u003cargs\u003e\n# --- OR --- #\nsetup.py install \u003cargs\u003e --user # Will install in the current user's site-package directory\n```\n\nWith the modified build behavior, one command can be used to install all dependencies as well as the software for Linux and macOS.\nAs of now the supported package managers are:\n\n* Homebrew (`brew`)\n* `apt-get`\n* `yum`\n* `dnf`\n* `pacman`\n\n**If your system meets these requirements, you can install by running:**\n\n```bash\n# NOTE: `True` must be capitalized for the command(s) to work properly.\npython3 setup.py install --pkg-install=True\n# --- OR --- #\npython3 setup.py install -k True # An alternative to the above command\n```\n\n**If your system meets these requirements, you can install by running:**\n\n```bash\n# NOTE: `True` must be capitalized for the command(s) to work properly.\npython3.9 setup.py install --pkg-install=True\n\npython3.9 setup.py install -k True # An alternative to the above command\n```\n\nIf your system doesn't meet these requirements or you want to install the dependencies separately, see\n[README-EXT.md](README-EXT.md#manual-dependency-installation).\n\n### Manual dependency installation\n\nIf you can't install using the new command(s) because of your Linux distribution, or you'd just prefer to install the\nnon-Python dependencies youself, you will need a few more steps. Note that the follwing steps will work on both Linux\nand macOS.\n\n#### With the Build Functionality\n\nIf you are on macOS or a supported Linux distribution, you can opt to install non-Python dependencies separately from\nthe rest of the software. This can be done with the following:\n\n```bash\npython3.9 setup.py pkg_install  # Install non-Python dependencies\npython3.9 setup.py orig_install # Install everything else (default `setup.py install` behavior)\n```\n\n#### Without the Build Functionality\n\nIf your Linux distribution is not supported, you will first have to install all non-Python dependencies using your\npackage manager. To find the correct packages for your system, see [pkgs.org](https://pkgs.org). Then, install as\nusual.\n\n```bash\n# An example for RPM users\nsudo rpm -i ... # Packages\n```\n\nAfter that, run the following to install everything else:\n\n```bash\npython3.9 setup.py orig_install\n```\n\n### Running\n\nOnce everything is installed, type `voiceassistant` in your terminal to run the program.\n\n## Future Inclusions\n\n### Windows Support\n\nAt some point, I would love to have official Windows binaries of Quinton-VoiceAssistant so anyone on Windows could use the\nsoftware. This way, no one will have to poke around with installing it in Linux on Windows.\n\n### Different versions\n\nIn the future, my hope is that there would be a few different versions of Quinton-VoiceAssistant. The one you have downloaded right now\nwould be the regular version, which would be used like a normal voice assistant. In addition, there would be a CLI version (Quinton-CLI)\nwhich would work without a microphone or an audio output device (speakers, headphones, etc.), and a dedicated developer version (Quinton-VA-Dev)\nwhich would contain templates for developing Quinton ToolKits.\n\nThese alternate versions are still waiting to be worked on and don't have set release dates. As of now, Quinton-CLI is very likely to be\neventually released, and Quinton-VA-Dev is still largely conceptual due to the fact that I am currently integrating ToolKits _and_ their\ndevelopment templates into Quinton-VoiceAssistant (not partially into Quinton-VoiceAssistant and partially into Quinton-VA-Dev).\n\n### ToolKits\n\nIn future versions of Quinton, there will be support for Quinton ToolKits - special Python classes designed to\nadd functionality to Quinton without modifying its source code directly. Instead, a Python module is put in a\ndirectory and data from the class in the module is read by Quinton and incorporated into the software. This type\nof functionality would be used to expand Quinton's skill set, such as allowing it to answer math questions or get\nyour current location; stuff that isn't built in by default. This approach allows Quinton to be nearly infinitely\nexpandable.\n\nWhen the feature is released, official documentation will be written here. If you are interested in the idea of\nQuinton ToolKits and want to read about the current working ideas for the feature, please see [doc/toolkits.md](doc/toolkits.md).\n\nMy hope is that this feature will be available by Quinton-VoiceAssistant release 1.0.0, and software betas including\nexperimental versions of the functionality will be released prior to that.\n\n### More build support\n\nIn the future, I would like to support more package managers so that everyone can have a single-command installation experience\nwith Quinton-VoiceAssistant, no matter what operating system they use.\n\n## Miscellaneous\n\n### Using the `pyowm.caching` Module\n\nAs of v0.2.3, the `pyowm.caching` module is no longer used in the code because the feature has been depricated\nin PyOWM v3.0.0. However, if you still wish to use the feature, you can do so using either of following methods:\n\n1. Clone the whole repository\n\n   Here, you'll be cloning the entire repository but immediately doing a `checkout` to branch `old-pyowm-caches` and\n   building the software from there. This is done with the following\n\n   \u003c!-- A 3-space indent satifies my markdown linter, so... --\u003e\n   ```bash\n   git clone https://github.com/Ryan-M/Smith.Quinton-VoiceAssistant.git\n   git checkout old-pyowm-caches\n   python3.8 setup.py install # Build/install Quinton-VoiceAssistant\n   ```\n\n2. Clone only the `old-pyowm-caches` branch\n\n   If you'd prefer, you can instead clone the repository but _only_ the branch you want. This can be done with\n   the following:\n\n   ```bash\n   # --branch is the long form of the -b argument\n   git clone --branch old-pyowm-caches https://github.com/Ryan-M/Smith.Quinton-VoiceAssistant.git\n   python3.8 setup.py install\n   ```\n\n   Notes:\n      1. The above clone will still track other remote braches, such as master. If you truly _only_\n         want the `old-pyowm-caches` branch, use the `--single-branch` flag as well.\n      2. This branch is not under active development, and will not have the software's latest features,\n         especially since bringing in changes from master would override the legacy functionality.\n\n## Contributing\n\n### Code Modifications\n\nFeel free to modify Quinton-VoiceAssistant. Just abide by the rules in the [license](#license).\n\n### Creating ToolKits\n\nOnce the ToolKit feature is released, users will (hopefully) be able to build their own ToolKits to expand Quinton's\ncapabilities. This will be another way users/outsiders can contribute to the project.\n\n## Software Information\n\n### License\n\nQuinton-VoiceAssistant is licensed under the GNU General Public License v3+. For more information, see [LICENSE.txt](LICENSE.txt).\n\n### Copyright\n\nQuinton-VoiceAssistant is Copyright (c) 2020-2021 by Ryan Smith\n\n### Finding the Software\n\nQuinton-VoiceAssistant is free and open-source software. You can find the code on\n[GitHub](https://www.github.com/Ryan-M-Smith/Quinton-VoiceAssistant).\n\n### Reporting Bugs\n\nTo report any bugs, contact me by email at \u003crysmith2113@gmail.com\u003e or raise an\n[issue on Github](https://www.github.com/Ryan-M-Smith/Quinton-VoiceAssistant/issues).\n\n### Feature Requests\n\nFeature requests for Quinton-VoiceAssistant are welcome! You can send them in by email or\nraise an issue on the repo. When you do, choose the feature request issue template and follow\nthe directions to fill everything out.\n\n## Resources\n\n* [Uberi's Github](https://www.github.com/Uberi)\n* [Uberi's SpeechRecognition Library](https://www.github.com/Uberi/speech_recognition)\n* [Houndify](https://www.houndify.com)\n  * [How Houndify Credits Work](https://www.houndify.com/pricing#how-do-credits-work)\n* [OpenWeatherMap](https://www.openweathermap.org)\n  * [OpenWeatherMap API Keys](https://home.openweathermap.org/api_keys)\n* [Python Downloads Page](https://python.org/downloads)\n* [Homebrew Installation Instructions](https://brew.sh)\n* [Linux/Unix Package Search](https://pkgs.org)\n* [My GitHub](https://www.github.com/Ryan-M-Smith)\n* [The Quinton-VoiceAssistant Repository](https://www.github.com/Ryan-M-Smith/Quinton-VoiceAssistant)\n* [Issues Page](https://www.github.com/Ryan-M-Smith/Quinton-VoiceAssistant/issues)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryan-m-smith%2Fquinton-voiceassistant","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryan-m-smith%2Fquinton-voiceassistant","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryan-m-smith%2Fquinton-voiceassistant/lists"}