Add files via upload
This commit is contained in:
parent
367455706c
commit
9ad1b91540
5 changed files with 377 additions and 2 deletions
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2024 The AI Brain Project
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
79
README.md
79
README.md
|
@ -1,2 +1,77 @@
|
|||
# ai-brain
|
||||
updates for the ai brain
|
||||
# The AI Brain Project
|
||||
|
||||
The AI Brain Project is a Python program that demonstrates how to use OpenAI's GPT-3 language model to upload your brain to the cloud. The program asks the user for a name and generates random actions every 5 seconds, along with a random sentence using the GPT-3 model based on certain context. The program also allows the user to load custom context from a file. Think of it as [HLE](https://en.wikipedia.org/wiki/UltraHLE) for [brain emulation/mind uploading](https://en.wikipedia.org/wiki/Mind_uploading).
|
||||
|
||||
## Installation
|
||||
|
||||
To install the program, follow these steps:
|
||||
|
||||
Clone the repository:
|
||||
|
||||
```
|
||||
git clone https://github.com/yourusername/ai-brain-project.git
|
||||
```
|
||||
|
||||
Install the required Python packages:
|
||||
|
||||
```
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
Set up your OpenAI API key and name using the OpenAI Secret Manager. See the section on "Using the OpenAI Secret Manager" for more information.
|
||||
|
||||
Run the program:
|
||||
|
||||
```
|
||||
python main.py
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
When you run the program, it will ask you for a name. Enter your name and press Enter. The program will then start generating actions and GPT-3 sentences every 5 seconds.
|
||||
|
||||
You can also load custom context from a file by placing a file named custom-context.txt in the same directory as main.py. The program will automatically load the context from the file if it exists.
|
||||
|
||||
Using the OpenAI Secret Manager
|
||||
To keep your OpenAI API key and name secure, you can use the OpenAI Secret Manager to store them securely. To do this, follow these steps:
|
||||
|
||||
Create an account on the OpenAI website if you haven't already done so.
|
||||
|
||||
Log in to the OpenAI website and go to the "API keys" page.
|
||||
|
||||
Click "Generate new API key" to create a new API key.
|
||||
|
||||
Install the openai_secret_manager Python package:
|
||||
|
||||
```
|
||||
pip install openai_secret_manager
|
||||
```
|
||||
|
||||
Import the openai_secret_manager module in your Python code:
|
||||
|
||||
```
|
||||
import openai_secret_manager
|
||||
```
|
||||
|
||||
Use the openai_secret_manager.get_secret function to retrieve your API key and name (already in the code):
|
||||
|
||||
```
|
||||
secrets = openai_secret_manager.get_secret("my_app_name")
|
||||
openai.api_key = secrets["api_key"]
|
||||
name = secrets["name"]
|
||||
```
|
||||
|
||||
In the OpenAI Secret Manager, create a new secret with the name my_app_name and your API key and name as the values. You can also add other keys if needed.
|
||||
|
||||
Creating a new secret in the OpenAI Secret Manager
|
||||
|
||||
Save the secret in the OpenAI Secret Manager.
|
||||
|
||||
## License
|
||||
|
||||
The AI Brain Project is licensed under the MIT License. See the LICENSE file for more information.
|
||||
|
||||
## Possible future impementations (for people who would like to contrib!)
|
||||
|
||||
* An semi-decentralized API for the AI using GUN-DB?
|
||||
* A ROBLOX Metaverse based on the API?
|
||||
|
|
4
install-requirements-debian.sh
Normal file
4
install-requirements-debian.sh
Normal file
|
@ -0,0 +1,4 @@
|
|||
curl https://ollama.ai/install.sh | sh
|
||||
pip3 install -r requirements.txt
|
||||
ollama pull sparksammy/samai
|
||||
ollama pull llama2
|
273
main.py
Normal file
273
main.py
Normal file
|
@ -0,0 +1,273 @@
|
|||
import asyncio
|
||||
import random
|
||||
import os
|
||||
import subprocess
|
||||
import datetime
|
||||
import sys
|
||||
import requests
|
||||
import subprocess
|
||||
from fastapi import FastAPI
|
||||
from typing import Union
|
||||
app = FastAPI()
|
||||
subprocess.run(["ollama", "serve"]) #make sure that our ollama server is started
|
||||
|
||||
from langchain.callbacks.manager import CallbackManager
|
||||
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
|
||||
from langchain_community.llms import Ollama
|
||||
|
||||
# replace model with the downloaded model you want to use
|
||||
llm = Ollama(
|
||||
model="sparksammy/samai",
|
||||
callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]),
|
||||
)
|
||||
|
||||
completeContext = ""
|
||||
# Define URLs for requirements.txt and main.py
|
||||
#REQS_URL = 'https://raw.githubusercontent.com/The-AI-Brain/ai-brain/main/requirements.txt'
|
||||
#MAIN_URL = 'https://raw.githubusercontent.com/The-AI-Brain/ai-brain/main/main.py'
|
||||
|
||||
# Define paths for local requirements.txt and main.py files
|
||||
REQS_PATH = 'requirements.txt'
|
||||
MAIN_PATH = 'main.py'
|
||||
List = {}
|
||||
|
||||
|
||||
# Check for updates
|
||||
def check_updates():
|
||||
# Download remote requirements.txt file
|
||||
remote_reqs = requests.get(REQS_URL).text
|
||||
|
||||
# Compare local and remote requirements.txt files
|
||||
with open(REQS_PATH, 'r') as f:
|
||||
local_reqs = f.read()
|
||||
|
||||
if local_reqs != remote_reqs:
|
||||
# Install updated requirements
|
||||
subprocess.run(['pip', 'install', '-r', REQS_PATH])
|
||||
|
||||
# Download updated main.py file
|
||||
remote_main = requests.get(MAIN_URL).text
|
||||
|
||||
# Write updated main.py file
|
||||
with open(MAIN_PATH, 'w') as f:
|
||||
f.write(remote_main)
|
||||
|
||||
# Restart the script
|
||||
os.execv(sys.argv[0], sys.argv)
|
||||
|
||||
|
||||
emotions = [
|
||||
"happy", "sad", "angry", "surprised", "disgusted", "fearful",
|
||||
"excited", "nostalgic", "hopeful", "anxious", "relaxed", "curious",
|
||||
"confused", "amused", "bored", "ecstatic", "exhausted", "grateful",
|
||||
"guilty", "embarrassed", "envious", "proud", "ashamed", "content",
|
||||
"depressed", "fascinated", "frustrated", "inspired", "irritated",
|
||||
"jealous", "lonely", "melancholic", "optimistic", "overwhelmed",
|
||||
"peaceful", "playful", "reflective", "remorseful", "restless",
|
||||
"satisfied", "sympathetic", "tense", "terrified", "triumphant",
|
||||
"uncomfortable", "vulnerable", "wistful", "yearning", "zealous"
|
||||
]
|
||||
|
||||
# Array of human actions
|
||||
actions = [
|
||||
"walked the dog",
|
||||
"cooked dinner",
|
||||
"read a book",
|
||||
"went swimming",
|
||||
"played soccer",
|
||||
"listened to music",
|
||||
"watched a movie",
|
||||
"painted a picture",
|
||||
"wrote a story",
|
||||
"rode a bike",
|
||||
"danced in the rain",
|
||||
"visited a museum",
|
||||
"went on a road trip",
|
||||
"went to a concert",
|
||||
"built a sandcastle",
|
||||
"went to the beach",
|
||||
"played video games",
|
||||
"climbed a mountain",
|
||||
"played with a pet",
|
||||
"went for a run",
|
||||
"did yoga",
|
||||
"went camping",
|
||||
"visited a new city",
|
||||
"went to a party",
|
||||
"took a nap",
|
||||
"had a picnic",
|
||||
"played a musical instrument",
|
||||
"tried a new food",
|
||||
"went on a hike",
|
||||
"took a bath",
|
||||
"visited a friend",
|
||||
"went to a theme park",
|
||||
"went to a zoo",
|
||||
"went to a sporting event",
|
||||
"went to a play",
|
||||
"went to a comedy show",
|
||||
"went to a ballet",
|
||||
"went to a musical",
|
||||
"went to a poetry reading",
|
||||
"went to a book club meeting",
|
||||
"went to a cooking class",
|
||||
"went to a painting class",
|
||||
"went to a wine tasting",
|
||||
"went to a beer festival",
|
||||
"went to a farmers' market",
|
||||
"went to a flea market",
|
||||
"went shopping",
|
||||
"went to a garage sale",
|
||||
"went to a thrift store",
|
||||
"volunteered at a charity",
|
||||
"went to a political rally",
|
||||
"went to a religious service",
|
||||
"attended a wedding",
|
||||
"attended a funeral",
|
||||
"graduated from school",
|
||||
"started a new job",
|
||||
"retired from a job",
|
||||
"got married",
|
||||
"got divorced",
|
||||
"had a baby",
|
||||
"raised a child",
|
||||
"adopted a pet",
|
||||
"moved to a new city",
|
||||
"bought a house",
|
||||
"rented an apartment",
|
||||
"remodeled a home",
|
||||
"gardened",
|
||||
"landscaped a yard",
|
||||
"went on a cruise",
|
||||
"went on a safari",
|
||||
"went on a skiing trip",
|
||||
"went on a snowboarding trip",
|
||||
"went on a fishing trip",
|
||||
"went on a hunting trip",
|
||||
"went on a scuba diving trip",
|
||||
"went on a surfing trip",
|
||||
"went on a kayaking trip",
|
||||
"went on a canoeing trip",
|
||||
"went on a rafting trip",
|
||||
"went on a hot air balloon ride",
|
||||
"went on a helicopter ride",
|
||||
"went on a plane ride",
|
||||
"went on a train ride",
|
||||
"went on a road trip",
|
||||
"went skydiving",
|
||||
"went bungee jumping",
|
||||
"went zip lining",
|
||||
"went rock climbing",
|
||||
"went to a spa",
|
||||
"got a massage",
|
||||
"got a facial",
|
||||
"got a manicure",
|
||||
"got a pedicure",
|
||||
"went to a chiropractor",
|
||||
"went to a physical therapist",
|
||||
"went to a dentist",
|
||||
"went to a doctor",
|
||||
"got surgery",
|
||||
"recovered from an illness",
|
||||
"overcame an addiction",
|
||||
"learned a new skill",
|
||||
"learned a new language",
|
||||
"took a class",
|
||||
"ate",
|
||||
"played the piano",
|
||||
"went for a walk"
|
||||
]
|
||||
|
||||
|
||||
# Array of places for the actions
|
||||
places = [
|
||||
"in the park",
|
||||
"at home",
|
||||
"in the library",
|
||||
"on the beach",
|
||||
"in the movie theater",
|
||||
"at the doctor's office",
|
||||
"at school",
|
||||
"at the spa",
|
||||
"at the airport",
|
||||
"at the gym",
|
||||
"in a cafe",
|
||||
"in a museum",
|
||||
"in a grocery store",
|
||||
"in a restaurant",
|
||||
"at a concert",
|
||||
"at a stadium",
|
||||
"in a hospital",
|
||||
"in a church",
|
||||
"in a mosque",
|
||||
"in a temple",
|
||||
"in a theater",
|
||||
"in a nightclub",
|
||||
"in a casino",
|
||||
"at a zoo",
|
||||
"at a theme park",
|
||||
"at a water park",
|
||||
"in a shopping mall",
|
||||
"in a department store",
|
||||
"at a gas station",
|
||||
"in a parking lot",
|
||||
"in a hotel",
|
||||
"in a motel",
|
||||
"in a hostel",
|
||||
"in a campground",
|
||||
"in a forest",
|
||||
"on a mountain",
|
||||
"in a desert",
|
||||
"in a valley",
|
||||
"by a river",
|
||||
"by a lake",
|
||||
"at sea",
|
||||
"in the ocean",
|
||||
"in a cave",
|
||||
"at a train station",
|
||||
"at a bus station",
|
||||
"at a subway station",
|
||||
"at a ferry terminal",
|
||||
"at a harbor",
|
||||
"in a space station",
|
||||
"in a laboratory"
|
||||
]
|
||||
|
||||
|
||||
|
||||
# Asynchronous function to print actions
|
||||
def createContext():
|
||||
action = random.choice(actions)
|
||||
place = random.choice(places)
|
||||
completeContext = f"you just did \"{action}\" and did it \"{place}\""
|
||||
return complete
|
||||
|
||||
@app.get("/context")
|
||||
async def get_emote():
|
||||
return await createContext()
|
||||
|
||||
@app.get("/chatin/{chatText}")
|
||||
async def get_chatin(chatText: str):
|
||||
return await main(chatText)
|
||||
|
||||
# Main function to run the program
|
||||
def main(chatin):
|
||||
#check_updates()
|
||||
chatin = "Guest:" + chatin
|
||||
|
||||
# Get response from ollama
|
||||
message = llm(f"(Additional context for reply: {completeContext}), reply to this: {chatin}")
|
||||
|
||||
# Print ollama response and what it said
|
||||
print(f"You: {chatin}")
|
||||
print(f"{name}: {message}")
|
||||
|
||||
return f"You: {chatin}\n${name}: ${message}"
|
||||
|
||||
# Run the cli function
|
||||
|
||||
def cli():
|
||||
while True:
|
||||
toChat = input("brain@localhost:~$ ")
|
||||
main(f"{toChat}")
|
||||
cli()
|
2
requirements.txt
Normal file
2
requirements.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
langchain
|
||||
fastapi
|
Loading…
Reference in a new issue