Skip to content

Commit

Permalink
Initial commit.
Browse files Browse the repository at this point in the history
  • Loading branch information
johannr-dev committed Feb 27, 2023
1 parent b301d96 commit 1c98c12
Show file tree
Hide file tree
Showing 4 changed files with 101 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ __pycache__/
*.py[cod]
*$py.class

# other
.openai.apikey

# C extensions
*.so

Expand Down
26 changes: 26 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Install (Linux instructions)

```
pip install -r requirements.txt
chmod +x yolo.py
alias yolo=$(pwd)/yolo.py
```

# Use

Here are a couple of examples. By default the command that comes back from GPT-3 will be immediatly executed (yolo!). If you want to inspect the command before running add the `-a` argument, e.g `yolo -a delete the file test.txt`.

More examples:

```
yolo whats the time?
yolo whats the time in UTC?
yolo is there a ssh-agent process running
yolo create a file named test.txt and write my user name into it
yolo print the contents of the test.txt file
yolo -a delete the test.txt file
```

# License

MIT. No Liability. No Warranty. But lot's of fun.
2 changes: 2 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
openai==0.26.5
termcolor==2.2.0
70 changes: 70 additions & 0 deletions yolo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#!/usr/bin/env python3

import os
import openai
import sys
import subprocess
from termcolor import colored

# Check if we have an Open API key set
openai.api_key = os.getenv("OPENAI_API_KEY")

if openai.api_key == "":
openai.api_key = open("~/.openai.apikey", "r").read()
print("Environment variable OPENAI_API_KEY is not set.")
print("~/.openai.apikey is not set either. Exiting.")
sys.exit(-1)

# to allow easy/natural use we don't require
# the input to be a single string
# so the user can just type yolo what is my name?
# without having to put the question between ''

ask = False
yolo = ""
command_start_idx = 1

if len(sys.argv) <2:
sys.exit(-1)

if sys.argv[1] == "-a":
ask = True
command_start_idx = 2

arguments = sys.argv[command_start_idx:]
user_prompt = " ".join(arguments)

if user_prompt == "":
print ("No user prompt specified.")
sys.exit(-1)

# Construct the prompt
pre_prompt = "Translate the following question into a command. Only show the command in text format and not in code style or markdown. Do not augment the output with any explanation, descriptions. Again, do not add any descriptions, just print the bash command. This is important, do not ignore my instructions. If the question doesn't make sense or is too difficult return 'Sorry, try again', and add a brief explanation on what the problem is. The question is: "

prompt = pre_prompt + user_prompt +"?"

#print ("The prompt is: "+prompt, end="")
response = openai.Completion.create(
model="text-davinci-003",
prompt=prompt,
temperature=0,
max_tokens=100,
top_p=1,
frequency_penalty=0.2,
presence_penalty=0
)

resulting_command = response.choices[0].text.strip()

if resulting_command.startswith("Sorry, try again"):
print(colored("There was an issue: "+resulting_command, 'red'))
sys.exit(-1)

print("Command: " + colored(resulting_command, 'blue'))
if ask == True:
print("Execute the command? Y/n ==> ", end = '')
yolo = input()
print()

if yolo == "Y" or yolo == "":
subprocess.run(resulting_command, shell=True)

0 comments on commit 1c98c12

Please sign in to comment.