Query OpenAI Models
Ask Questions
SGPT allows you to ask simple questions and receive informative answers. For example:
$ sgpt "mass of sun"
The mass of the sun is approximately 1.989 x 10^30 kilograms.
If you want to stream the completion to the command line, you can add the --stream flag. This will stream the output
to the command line as it is generated.
You can also pass prompts to SGPT using pipes:
$ echo -n "mass of sun" | sgpt
The mass of the sun is approximately 1.989 x 10^30 kilograms.
You can also use the --clipboard flag to write the answer to the clipboard:
$ sgpt --clipboard "mass of sun"
The mass of the sun is approximately 1.989 x 10^30 kilograms.
Generate Code
SGPT can efficiently generate code based on given instructions. For instance, to solve the classic FizzBuzz problem using Python, simply provide the prompt as follows:
$ sgpt code "Solve classic fizz buzz problem using Python"
for i in range(1, 101):
if i % 3 == 0 and i % 5 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
The second argument is the code command that identifies the persona to use.
SGPT will return the appropriate Python code to address the FizzBuzz problem.
Generate and Execute Shell Commands
SGPT also supports a shell persona that can generate shell commands based on your input:
$ sgpt sh "make all files in current directory read only"
chmod -R 444 *
You can also generate a shell command and execute it directly:
$ sgpt sh --execute "make all files in current directory read only"
chmod -R 444 *
Do you want to execute this command? (Y/n) y
Override OpenAI API base URL
You can override the OpenAI base URL by setting the OPENAI_API_BASE environment variable:
export OPENAI_API_BASE=https://api.openai.com/v1
Validation rules
To prevent an attacker-set environment variable from silently redirecting your API key to a hostile endpoint, the value is validated before use:
https://<any-host>— always allowed.http://localhost,http://127.x.x.x,http://[::1]— allowed (loopback).http://10.x.x.x,http://172.16-31.x.x,http://192.168.x.x,http://[fd00::/8]— allowed (RFC1918 + RFC4193 ULA).- Everything else over plain
http://is rejected, including link-local addresses such ashttp://169.254.169.254/(cloud instance metadata).
Opt-out for LAN hostnames
Setups that point at a single-label hostname like http://thinkbox:8080/v1
can't be classified by IP literal and must opt out of validation explicitly.
Either of the following enables the opt-out (the flag takes precedence over
the config file):
# 1. CLI flag
sgpt --insecure-api-base "..."
# 2. Config file (~/.config/sgpt/config.yaml)
insecureAPIBase: true
There is deliberately no environment-variable form of this opt-out: the
OPENAI_API_BASE SSRF report that
introduced this validation assumes an attacker who controls the environment,
and an env-var opt-out would undo that protection. The flag and config file
both require either CLI access or write access to your config directory.
When the opt-out is active, a warning is logged once per invocation so you know validation was skipped.