Linux Shell AI made easy with ChatGPT automation
Continuing the awesome and not so unique stream of ideas on what to do with ChatGPT, here's a bit modified take to my previous post on self-running ChatGPT generated Python code. This time, let's do a shell script that takes a description of what you want as a shell command, and returns just that command. Here's how it will work:
$ shai find latest 3 files
46 total tokens
ls -lt | head -n 3
$ ls -lt | head -n 3
total 1233
-rwxrwxrwx 1 root root 5505 huhti 4 2023 python-chatgpt-ai.md
-rwxrwxrwx 1 root root 10416 maalis 26 2023 golang-sveltekit-chatgpt.md
As seen, this time I'm not running the command automatically, but just returning the command. This is a bit safer, as you can inspect the command before running it. The script is quite simple:
#!/usr/bin/env python
import sys, os
from openai import OpenAI
from configparser import ConfigParser
# Read the config file openai.ini from same directory as this script
path = os.path.dirname(os.path.realpath(__file__))
config = ConfigParser()
config.read(path + '/openai.ini')
client = OpenAI(api_key=config['openai']['api_key'])
prompt = ' '.join(sys.argv[1:])
role = ('You are Ubuntu linux shell helper. Given a question, '
'answer with just a shell command, nothing else.')
chat_completion = client.chat.completions.create(
messages=[ { "role": "system", "content": role },
{ "role": "user", "content": prompt } ],
model = config['shai']['model']
)
print(chat_completion.usage.total_tokens, 'tokens:')
print(chat_completion.choices[0].message.content)
I decided GPT 3.5 Turbo is a good model for this, as it should be able to handle shell commands quite well. You also need to have a openai.ini
file in the same directory as the script, with the following content:
[openai]
api_key = sk-xxx
[shai]
model = gpt-3.5-turbo
To use it, just install the OpenAI Python package with pip install openai
, and then you can use the script like this:
$ chmod +x shai
$ ./shai find latest 3 files
And putting the script in your path, you can use it like any other shell command. Enjoy!