Tom-the-AI - A compound artificial intelligence software for Linux systems.

Overview

Tom the AI (version 0.82)

WARNING: This software is not yet ready to use, I'm still setting up the GitHub repository. Should be ready in a few days.

Tom is an open source AI desktop assistant for Linux systems, built using a series of independent response modules to generate replies to any input.

Tom uses natural language processing to determine which response module is best suited to generate a response for each input, thus avoiding the need for precise syntax.

Tom the AI

By Analogy

Tom the AI is designed as a Linux alternative to software such as Apple's Siri, or Microsoft's Cortana.

Set Up

Step 1 - Update repositories:

Update apt package repositories using sudo apt update to ensure that the apt package manager has access to the latest versions of the below dependencies.

Step 2 - Install APT dependencies:

First, install python by running sudo apt install python3.9 in a terminal. Tom is tested on python 3.9, but any newer version should (probably) also work just fine.

Next, install the latest version of VLC Media player using sudo apt install vlc.

Step 3 - Download Tom:

Download Tom by cloning the GitHub repository into your home folder using git clone https://github.com/Mblizzard/Tom-the-AI.

Step 4 - Install Python dependencies:

Open a terminal inside Tom's application folder, or navigate using cd ~/Tom-the-AI/. Now run sudo pip3 install requirements.txt. Some systems may use pip in place of pip3.

Next, we need to download the required NLTK libraries by running the following code in a python shell:

>>> import nltk
>>> nltk.download('all')

Step 5 - Running Tom:

Go ahead and run python3.9 ~/Tom-the-AI/tom.py. Tom will boot up, and after a minute or so of loading, you'll be ready to go! If you feel inclined, go ahead and make a desktop launcher of this command, link Tom into your Application Menu, or create a dock shortcut.

Mission

The mission of Tom is to provide an open source compound AI for which anyone can program and contribute response modules, expanding Tom's capabilities to create a useful and entertaining artificial intelligence software.

Examples

Tom generates outputs to any input by using natural language processing to determine the most suitable response module from which to source the reply.

Give Tom natural language input, either via voice recognition or text input, for instance Hey Tom, what is petrichor?, and he'll respond in the most appropriate way. Note that the 'Hey Tom' activation phrase is only required of voice inputs.

The following is a non-exhaustive list of things you can do:

Hey Tom, I'm in an optimistic mood. I'm not sure if this is a good thing or not. Emotions (Using sentiment analysis + NLTK chatbots): ~> Hey Tom, you are a brilliant individual! I am but one, you are but one more. ~> Hey Tom, thou art a fool. Become more interesting before I die of fatal boredom. Fact Memory & Recall: ~> Hey Tom, the answer to life, the universe, and everything is 42. Ok. ~> Hey Tom, what is the answer to life, the universe, and everything?. The answer to life, the universe, and everything is 42. Playing music (From device or web, includes UI controls for the former): ~> Hey Tom, play up the shard. Playing /home/murray/Music/Dr Who/Up The Shard.webm. ~> Hey Tom, stop the music. Media stopped. *NOTE: File names do not have to match exactly.* ~> Hey Tom, open my English essay. Alright. *NOTE: File names do not have to match exactly.* Opening websites: ~> Hey Tom, open Reddit. Alright. Jokes (From PyJokes): ~> Hey Tom, tell me a joke. I went to a street where the houses were numbered 8k, 16k, 32k, 64k, 128k, 256k and 512k. It was a trip down Memory Lane. Trivia: ~> Hey Tom, ask me a trivia question. Question: What is "Sealed crustless sandwich"? 1) The part of Yellowstone National Park in Idaho, where any crime can technically be committed without punishment – but don't tempt fate! 2) I got a fever, and the only prescription... is more cowbell! 3) The only nuclear reactor in a 17th-century building. 4) A patented peanut butter and jelly sandwich. ~> 4. Correct! Colossal Cave Adventure (Willie Crowther's ADVENT-350): ~> Hey Tom, let's go on an adventure! Welcome to adventure!! would you like instructions? Fun facts: ~> Hey Tom, make me smarter. Spices were not used to mask the flavor of rotting meat before refrigeration. Spices were an expensive luxury item; those who could afford them could afford good meat, and there are no contemporaneous documents calling for spices to disguise the taste of bad meat. Dice Rolls (great for D&D): ~> Hey Tom, roll me a d20. I rolled a 14. Word generation (great for Articulate) ~> Hey Tom, give me a random action word. Your word is 'winning'. Complex Mathematics (using SymPy): ~> Hey Tom, integrate (tan(x))^1/2 ∫f(x) = -ln(cos(x))/2 + c Code generation (using howdoi): ~> Hey Tom, write a hello world script in C++. #include <\iostream> int main() { std::cout << "Hello World!" << std::endl; return 0; } Most of Betty's functionality (From https://github.com/pickhardt/betty): ~> Hey Tom, what time is it? Running date +"%r (%T)" ... 02:34:46 PM (14:34:46). ~> Hey Tom, what day is it? Running date +"%A" ... Saturday. ~> Hey Tom, whats my username? Running whoami ... murray ~> Hey Tom, what is my ip address? Wlo1: flags=4163 mtu 1500 inet 192.168.43.9 netmask 255.255.255.0 broadcast 192.168.43.255 inet6 fe80::5c61:caf:5614:7b82 prefixlen 64 scopeid 0x20 ether 54:35:30:60:a8:b9 txqueuelen 1000 (Ethernet) RX packets 401121 bytes 523184185 (523.1 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 235650 bytes 23471151 (23.4 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0.">
Objective Response (From anywhere on the internet):
~> Hey Tom, what is petrichor?
According to en.wikipedia.org... Petrichor is the earthy scent produced when rain falls on dry soil. The word is constructed from the Greek petra, "rock", or petros, "stone", and ichor, the fluid that flows in the veins of the gods in Greek mythology.

Subjective Response (From Cleverbot):
~> Hey Tom, I'm in an optimistic mood.
I'm not sure if this is a good thing or not.

Emotions (Using sentiment analysis + NLTK chatbots):
~> Hey Tom, you are a brilliant individual!
I am but one, you are but one more.
~> Hey Tom, thou art a fool.
Become more interesting before I die of fatal boredom.

Fact Memory & Recall:
~> Hey Tom, the answer to life, the universe, and everything is 42.
Ok.
~> Hey Tom, what is the answer to life, the universe, and everything?.
The answer to life, the universe, and everything is 42.

Playing music (From device or web, includes UI controls for the former):
~> Hey Tom, play up the shard.
Playing /home/murray/Music/Dr Who/Up The Shard.webm.
~> Hey Tom, stop the music.
Media stopped.
*NOTE: File names do not have to match exactly.*

~> Hey Tom, open my English essay.
Alright.
*NOTE: File names do not have to match exactly.*

Opening websites:
~> Hey Tom, open Reddit.
Alright.

Jokes (From PyJokes):
~> Hey Tom, tell me a joke.
I went to a street where the houses were numbered 8k, 16k, 32k, 64k, 128k, 256k and 512k. It was a trip down Memory Lane.

Trivia:
~> Hey Tom, ask me a trivia question.
Question: What is "Sealed crustless sandwich"?
1) The part of Yellowstone National Park in Idaho, where any crime can technically be committed without punishment – but don't tempt fate!
2) I got a fever, and the only prescription... is more cowbell!
3) The only nuclear reactor in a 17th-century building.
4) A patented peanut butter and jelly sandwich.
~> 4.
Correct!

Colossal Cave Adventure (Willie Crowther's ADVENT-350):
~> Hey Tom, let's go on an adventure!
Welcome to adventure!! would you like instructions?

Fun facts:
~> Hey Tom, make me smarter.
Spices were not used to mask the flavor of rotting meat before refrigeration. Spices were an expensive luxury item; those who could afford them could afford good meat, and there are no contemporaneous documents calling for spices to disguise the taste of bad meat.

Dice Rolls (great for D&D):
~> Hey Tom, roll me a d20.
I rolled a 14.

Word generation (great for Articulate)
~> Hey Tom, give me a random action word.
Your word is 'winning'.

Complex Mathematics (using SymPy):
~> Hey Tom, integrate (tan(x))^1/2
∫f(x) = -ln(cos(x))/2 + c

Code generation (using howdoi):
~> Hey Tom, write a hello world script in C++.
#include <\iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
return 0;
}

Most of Betty's functionality (From https://github.com/pickhardt/betty):
~> Hey Tom, what time is it?
Running date +"%r (%T)" ...
02:34:46 PM (14:34:46).
~> Hey Tom, what day is it?
Running date +"%A" ...
Saturday.
~> Hey Tom, whats my username?
Running whoami ...
murray
~> Hey Tom, what is my ip address?
Wlo1: flags=4163
    
      mtu 1500
    inet 192.168.43.9 netmask 255.255.255.0 broadcast 192.168.43.255
    inet6 fe80::5c61:caf:5614:7b82 prefixlen 64 scopeid 0x20
     
    ether 54:35:30:60:a8:b9 txqueuelen 1000 (Ethernet)
    RX packets 401121 bytes 523184185 (523.1 MB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 235650 bytes 23471151 (23.4 MB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0.

    

This is a fair representation of Tom's capabilities as they currently stand. See the following section on contributing for a guide of how to create your own response modules for Tom, and expand upon the above abilities.

Contributing

How to write a custom response module for Tom:

Step 1 - Understanding how Tom will treat your module:

Tom is programmed in Python. Response modules are imported into Tom using the python import statement, and the response is retrieved from the module using output = .respond( ) . The output is then returned to the user.

Step 2 - Programming the response module:

Go ahead and program your response. Your script should have a main function def respond(inp):, where inp is the user input parameter that will be passed to your function by Tom. Your function should provide it's output through a return statement (NOT a print() statement).

Step 3 - Testing your module:

Paste the following bit of code at the end of your python script, then run your program:

")))">
if __name__ == "__main__":
    while True:
        print(respond(input("~> ")))

If this works as expected, and you can type inputs on the ~> prompts and receive your output printed in the console, then continue to step 4.

Step 4 - Relative imports:

Rename your main response script to __init__.py, and make sure it's at the first level of your project folder (not nested in other folders). Next, rename the folder containing your script to the name of your module (no white-space or special characters). Now, if you are importing any functions from other scripts (does not include dependencies installed through pip), you will need to change the import statement by placing a '.' in front of the location. For example, from myOtherScript import customFunction becomes from .myOtherScript import customFunction, but import requests would remain unchanged.

Step 5 - Dependencies:

If your response module requires python packages from PyPi, make sure it includes a requirements.txt file. Any dependencies not available from PyPi should bundled with project, located in the project folder alongside __init__.py.

Step 6 - Using your module:

Paste the folder containing your response module into Tom's /responses directory. You will then need to activate the response module within Tom's modules interface, or by manually adding the name of your module to responseOrder.txt.

Step 7 - Creating a pull request:

If you feel inclined to share your module with the world, go ahead and create a pull request for your module on Tom's GitHub repository (https://github.com/Mblizzard/Tom-the-AI).

Planned Features

New response modules & capabilities to look forward to in future versions of Tom:

  • Timers & stopwatch capabilities.
  • Ability execute terminal commands.
  • Automated module installation.
  • Releases and updates available on the Ubuntu apt repositories.

Features I'm not currently planning to include in Tom, but that I'll consider adding if enough people are interested:

  • Windows support.

Versioning

Releases will follow a semantic versioning format:

. .

For more information on SemVer, visit http://semver.org/.

License

Tom the AI: A compound AI for Linux systems.
Copyright (C) 2021  Murray Jones

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see 
   .
Code and data for ACL2021 paper Cross-Lingual Abstractive Summarization with Limited Parallel Resources.

Multi-Task Framework for Cross-Lingual Abstractive Summarization (MCLAS) The code for ACL2021 paper Cross-Lingual Abstractive Summarization with Limit

Yu Bai 43 Nov 07, 2022
[NeurIPS '21] Adversarial Attacks on Graph Classification via Bayesian Optimisation (GRABNEL)

Adversarial Attacks on Graph Classification via Bayesian Optimisation @ NeurIPS 2021 This repository contains the official implementation of GRABNEL,

Xingchen Wan 12 Dec 23, 2022
Reducing Information Bottleneck for Weakly Supervised Semantic Segmentation (NeurIPS 2021)

Reducing Information Bottleneck for Weakly Supervised Semantic Segmentation (NeurIPS 2021) The implementation of Reducing Infromation Bottleneck for W

Jungbeom Lee 81 Dec 16, 2022
Public repository of the 3DV 2021 paper "Generative Zero-Shot Learning for Semantic Segmentation of 3D Point Clouds"

Generative Zero-Shot Learning for Semantic Segmentation of 3D Point Clouds Björn Michele1), Alexandre Boulch1), Gilles Puy1), Maxime Bucher1) and Rena

valeo.ai 15 Dec 22, 2022
Modelisation on galaxy evolution using PEGASE-HR

model_galaxy Modelisation on galaxy evolution using PEGASE-HR This is a labwork done in internship at IAP directed by Damien Le Borgne (https://github

Adrien Anthore 1 Jan 14, 2022
Dataset VSD4K includes 6 popular categories: game, sport, dance, vlog, interview and city.

CaFM-pytorch ICCV ACCEPT Introduction of dataset VSD4K Our dataset VSD4K includes 6 popular categories: game, sport, dance, vlog, interview and city.

96 Jul 05, 2022
Deep Inertial Prediction (DIPr)

Deep Inertial Prediction For more information and context related to this repo, please refer to our website. Getting Started (non Docker) Note: you wi

Arcturus Industries 12 Nov 11, 2022
DiAne is a smart fuzzer for IoT devices

Diane Diane is a fuzzer for IoT devices. Diane works by identifying fuzzing triggers in the IoT companion apps to produce valid yet under-constrained

seclab 28 Jan 04, 2023
Autonomous Ground Vehicle Navigation and Control Simulation Examples in Python

Autonomous Ground Vehicle Navigation and Control Simulation Examples in Python THIS PROJECT IS CURRENTLY A WORK IN PROGRESS AND THUS THIS REPOSITORY I

Joshua Marshall 14 Dec 31, 2022
Aspect-Sentiment-Multiple-Opinion Triplet Extraction (NLPCC 2021)

The code and data for the paper "Aspect-Sentiment-Multiple-Opinion Triplet Extraction" Requirements Python 3.6.8 torch==1.2.0 pytorch-transformers==1.

慢半拍 5 Jul 02, 2022
Selective Wavelet Attention Learning for Single Image Deraining

SWAL Code for Paper "Selective Wavelet Attention Learning for Single Image Deraining" Prerequisites Python 3 PyTorch Models We provide the models trai

Bobo 9 Jun 17, 2022
Implementation of Perceiver, General Perception with Iterative Attention in TensorFlow

Perceiver This Python package implements Perceiver: General Perception with Iterative Attention by Andrew Jaegle in TensorFlow. This model builds on t

Rishit Dagli 84 Oct 15, 2022
Large scale and asynchronous Hyperparameter Optimization at your fingertip.

Syne Tune This package provides state-of-the-art distributed hyperparameter optimizers (HPO) where trials can be evaluated with several backend option

Amazon Web Services - Labs 236 Jan 01, 2023
[EMNLP 2021] Distantly-Supervised Named Entity Recognition with Noise-Robust Learning and Language Model Augmented Self-Training

RoSTER The source code used for Distantly-Supervised Named Entity Recognition with Noise-Robust Learning and Language Model Augmented Self-Training, p

Yu Meng 60 Dec 30, 2022
Accurate Phylogenetic Inference with Symmetry-Preserving Neural Networks

Accurate Phylogenetic Inference with a Symmetry-preserving Neural Network Model Claudia Solis-Lemus Shengwen Yang Leonardo Zepeda-Núñez This repositor

Leonardo Zepeda-Núñez 2 Feb 11, 2022
Neuralnetwork - Basic Multilayer Perceptron Neural Network for deep learning

Neural Network Just a basic Neural Network module Usage Example Importing Module

andreecy 0 Nov 01, 2022
SwinTrack: A Simple and Strong Baseline for Transformer Tracking

SwinTrack This is the official repo for SwinTrack. A Simple and Strong Baseline Prerequisites Environment conda (recommended) conda create -y -n SwinT

LitingLin 196 Jan 04, 2023
Source code for TACL paper "KEPLER: A Unified Model for Knowledge Embedding and Pre-trained Language Representation".

KEPLER: A Unified Model for Knowledge Embedding and Pre-trained Language Representation Source code for TACL 2021 paper KEPLER: A Unified Model for Kn

THU-KEG 138 Dec 22, 2022
Codes for CVPR2021 paper "PWCLO-Net: Deep LiDAR Odometry in 3D Point Clouds Using Hierarchical Embedding Mask Optimization"

PWCLO-Net: Deep LiDAR Odometry in 3D Point Clouds Using Hierarchical Embedding Mask Optimization (CVPR 2021) This is the official implementation of PW

Intelligent Robotics and Machine Vision Lab 42 Dec 18, 2022
PyTorch implementation of DreamerV2 model-based RL algorithm

PyDreamer Reimplementation of DreamerV2 model-based RL algorithm in PyTorch. The official DreamerV2 implementation can be found here. Features ... Run

118 Dec 15, 2022