https://github.com/jamster3000/joan-smart-assistant
A smart assistant built purly in python. Uses different machine learning models to keep up speed and efficiency for lower resourced devices.
https://github.com/jamster3000/joan-smart-assistant
machine-learning python python-3 smart-assistant
Last synced: 11 months ago
JSON representation
A smart assistant built purly in python. Uses different machine learning models to keep up speed and efficiency for lower resourced devices.
- Host: GitHub
- URL: https://github.com/jamster3000/joan-smart-assistant
- Owner: Jamster3000
- Created: 2023-10-23T09:28:30.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-12-26T10:49:33.000Z (over 1 year ago)
- Last Synced: 2025-04-30T08:13:26.109Z (about 1 year ago)
- Topics: machine-learning, python, python-3, smart-assistant
- Language: Python
- Homepage:
- Size: 2.7 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 40
-
Metadata Files:
- Readme: README.md
- Changelog: news.py
Awesome Lists containing this project
README
(Still working on)
# Joan 🤖 - Your smart assistant
Welcome to **Joan**, a lightweight and resource-efficient smart assistant designed to run seamlessly on low-resource systems like Raspberry Pi. **Joan** leverages machine learning (scikit-learn) for speed and control, making it a user-friendly alternative to traditional chatbot frameworks. Unlike typical AI frameworks, **Joan** prioritizes transparency and simplicity for easy understanding.
## Features 🚀
- **Game Time:** Play blackjack, rock-paper-scissors, or a number guessing game.
- Ask it to open a specific video on `Youtube`
- **Entertainment:** **Joan** can tell jokes, riddles, trivia questions, and even gives facts and advice (Do not follow)
- **open Websites:** Open's random [XKCD](https://xkcd.com/) With a random image; akinator and the wiki game.
- **Wikihow:** Can search for wikihow articles and either read them to you or show you the webpage.
- **news:** Can give the latest news articles
- **Passcode:** A Passcode can be set up. This can be used to confirm you asked for certain commands, such as a factory reset (e.g. "factory reset [passcode]")
- **recipes:** Has built in dataset of recipes allowing you to ask for a specific one.
- **Factory rest:** This will remove any data that it has collected from the user, but it still remembers what it has learned from **wolfram Alpha**
- **weather:** Can ask for the current weather, what the weather will be like tomorrow or on a specific day.
- **Time/date:** Can tell the time, full date, the day, the month, and the year.
- **Security:** **Joan** can scan a website to determine whether it's safe, proceed with caution, or dangerous. you must have the website open or copy the URL of the website for this to work.
> [!NOTE]
> In addition to all these features, there are also ***Easter Eggs*** if you can find them 🥚
## API's and Services 🌐
**Joan** integrates seamlessly with various APIs:
- **Wolfram Alpha** - Used to respond to anything that **Joan** can't or doesn't have a response for. **Joan** saves the answer allowing it to do "Live Learning".
- **Accuweather** - Used to get weather data from a location (The user doesn't need to give **Joan** their location, It just knows).
- **omdbapi** - (Open Movie Database) API for getting data about movies, although Wolfram Alpha also knows information about movies.
- **spaceflightnewsapi** - Gets news about space flights and events in relation to it.
- **currentsapi** - Gets general news which also contains keywords to each article allowing the user to filter news sources.
- **genderize** - This is used to determine what gener the user is, this seems to work pretty well.
- **totalvirus** - this is used to scan a website, whether that be the website that is open or a link that was last copied.
- **ipapi** - This is used to get the user's IP data, which includes their current location.
> [!WARNING]
> While in the development phase the API keys are visible in the code and can be used easily. Many of these API's have limited usage every `week/month`.
## Prerequisites 🛠️
Ensure the following libraries are installed:
- Pandas
- Scikit-learn
- pywikihow
- joblib
- youtube-search-python
- nltk
- inflect
- fuzzywuzzy
- requests
- pyperclip
- pyautogui
- word2number
- ipinfo
- elevenlabs
- huggingface_hub
`pip3 install pandas, scikit-learn pywikihow joblib youtube-search-python nltk inflect fuzzywuzzy requests pyperclip pyautogui word2number ipinfo elevenlabs huggingface_hub`
> [!NOTE]
> Since this is being developed to run on devices such as a raspberry pi, the modules and libraries above should all install and work as expected, even on 32-bit system.
## How To Use 🚀
Run **Joan.py**, and within 3 to 5 seconds, you're ready to explore the capabilities.
## **Response** Tags 🏷️
Each tag is surrounded by "<" and ">"
- user-name - can include the user's name
- date - Includes the date whether that is current date or some other date
- emotion - a type of emotion
- F-food - The users favourite food
- game-name - Name of the game (used for user peference when game has multiple names).
- riddle-answe - the answer to the riddle
- correct-answer - The correct answer to a trivia question
- list-games - a list of games that can be played with **joan**
- unsafe-scans - the amount of scans that returned as a dangerous website
- food - food
- sure-name - the surename of the user
## Data Files 📂:
- datasets/ET.csv - Entity tag, this is the main file for recognizing what the user has inputted.
- datasets/ER.csv - Emotion recognition, used to detect the user's emotins based on their input.
- Expected content.txt - This includes what sort of input is expected next.
- last time used.txt - The last time **Joan** was used, which is used within the code.
- responses.csv - A long list in each row containing different variations of outputs.
- user data.json - all the user's data for **Joan** to remember.


