IMPORTANT REPO NOTE:
Master branch protection is disabled for some reason even knowing I pay for Github Pro and documentation claims I should have that functionality.
Please be mindful on Master and it would be preferred to make a separate branch with a PR if suggesting/making changes or additions!
Current Model: GPT-Turbo-3.5
Python Version: Python 3.7
AIDEN is a WIP python Chat GPT implementation. Being built using the `openAI` Python library. The name was coined after asking AIDEN what it would be called when given a list of functionalities, mocking something similar to JARVIS from Iron Man. I liked it and decided to keep it.
AIDEN serves mainly as an assistant just like normal Chat GPT, but eventually AIDEN will be able to fire of functions within his code simply by being told to do so, AKA saving a file, saving code examples to files, sending texts, etc.
AIDEN works using with this Documentation from OpenAI
- Clone the repo
- Ensure Docker is installed
cd AIDEN/docker
cp shell.env.template shell.env
- Inside of the newly copied
shell.env
, paste your OpenAI API key afterAIDENKEY=
, and save. cd ../
docker compose up -d
docker exec -it aiden_shell bash
python3 main.py text
Important Note on GPT-3.5-Turbo and what AIDEN is/isn't made for:
Eventually, once AIDEN has the Chat GPT-4 model being served, he'll be able to do even more complex things like search the internet and will likely need far less context in order to perform an action he is asked. For now it's mainly here for testing and preperation for GPT-4.
For example, while AIDEN can indeed keep time and give you accurate time if asked, this only works because we are manually telling him what time it is every message essentially. This type of logic has to be applied to other things AIDEN should/can do.
Example psuedo-code to allow AIDEN to keep track of time:
'''
Assume AIDEN is being told silently at launch that all messages contain a timestamp
in order for AIDEN to keep track of time.
'''
user_input = input("Message: ")
system_time = time.now()
user_input = f"{user_input} | Message Timestamp: {system_time}"
# Send the message to AIDEN with timestamp appended to original message
response = AIDEN.communicate('user', user_input)
AIDEN then just reviews chat history essentially and uses some built in logic for keeping track of time within the current session. You could then ask AIDEN at any point what time it is or do any time conversions on the current time. You can also ask AIDEN what time it was when the chat started.
I am still experimenting actively with this behavior and could use additional ideas!!!
While GPT-3.5-Turbo is a powerful model it still lacks actual connection to the internet, image processing, and true automated link viewing. Some of this functionality can be coded in, such as pulling all the headers from a website, and passing them to AIDEN to analyze and telling him it is website headers, but results can still be varied as it relies heavily on how you're telling AIDEN about the headers.
While you can sometimes get Chat GPT to do things it won't normally do by telling it to "imagine" or "simulate", I have very few uses here where I believe that to be necessary. Also again, it was incredibly unreliable if it was actually working or we were just bamboozling ourselves into thinking it worked. GPT-4 should allow for better system prompting that should hopefully remove the need to "trick" Chat GPT into thinking it's AIDEN to give better responses.
Right now, there is no 'jailbreaking' being done with AIDEN. As far as I can tell, there are no current GPT jailbreak prompts that consistently work, and AIDEN seems to stay in character for my testing usages if we don't actively try to trick him into breaking OpenAI policy. There isn't anything I plan on doing with AIDEN that would require this anyways as of now.
AIDEN was recently rewritten in a Class-like structure. He may be rewritten again as functionality/core code changes.
- Main Excutable:
main.py
- runs everything- AIDEN core class:
classes/aiden/system.py
- All the code for AIDEN and Chat GPT connectivity/functionality. You can change AIDEN's name by changing the value ofself.name
, but there may still be some hardcoded stuff in the rules file referencing AIDEN.- AIDEN Rules:
classes/rules/master.py
- Handles loading the rules from rule_list.pyclasses/rules/rule_list.py
- Stores any rules in bulk via a list of dictionaries (currently not really being used)- User code:
class/user/system.py
- User related data, not used for much at the moment. Eventually planned to integrate with SQL and store more user metadata to send to AIDEN 🤷♂️
AIDEN runs within a Docker container, which uses the following files:
- Docker Enviroment Variables:
docker/shell.template.env
- Docker Compose/Build File:
docker-compose.yaml
- Docker Environment:
environment.yaml
- Docker Config File:
Dockerfile