To install OpenAI CLI in Python virtual environment, run:
pip install openai-cli
OpenAI API requires authentication token, which can be obtained on this page: https://beta.openai.com/account/api-keys
Provide token to the CLI either through a command-line argument (-t/--token <TOKEN>
) or through an environment variable (OPENAI_API_TOKEN
).
Currently only text completion API is supported.
Example usage:
$ echo "Are cats faster than dogs?" | openai complete -
It depends on the breed of the cat and dog. Generally,
cats are faster than dogs over short distances,
but dogs are better at sustained running.
Interactive mode supported (Press Ctrl+C to exit):
$ openai repl
Prompt: Can generative AI replace humans?
No, generative AI cannot replace humans.
While generative AI can be used to automate certain tasks,
it cannot replace the creativity, intuition, and problem-solving
skills that humans possess.
Generative AI can be used to supplement human efforts,
but it cannot replace them.
Prompt: ^C
Run without arguments to get a short help message:
$ openai
Usage: openai [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
complete Return OpenAI completion for a prompt from SOURCE.
repl Start interactive shell session for OpenAI completion API.
Build a standalone binary using pex and move it into PATH:
$ make openai && mv openai ~/bin/
$ openai repl
Prompt:
CLI invokes https://api.openai.com/v1/completions by default. To override the endpoint URL, set OPENAI_API_URL
environment variable.
Here's an example usage scenario, where we first create a Python module with a Fibonacci function implementation, and then generate a unit test for it:
$ mkdir examples
$ touch examples/__init__.py
$ echo "Write Python function to calculate Fibonacci numbers" | openai complete - | black - > examples/fib.py
$ (echo 'Write unit tests for this Python module named "fib":\n'; cat examples/fib.py) | openai complete - | black - > examples/test_fib.py
$ pytest -v examples/test_fib.py
============================== test session starts ==============================
examples/test_fib.py::TestFibonacci::test_eighth_fibonacci_number PASSED [ 10%]
examples/test_fib.py::TestFibonacci::test_fifth_fibonacci_number PASSED [ 20%]
examples/test_fib.py::TestFibonacci::test_first_fibonacci_number PASSED [ 30%]
examples/test_fib.py::TestFibonacci::test_fourth_fibonacci_number PASSED [ 40%]
examples/test_fib.py::TestFibonacci::test_negative_input PASSED [ 50%]
examples/test_fib.py::TestFibonacci::test_ninth_fibonacci_number PASSED [ 60%]
examples/test_fib.py::TestFibonacci::test_second_fibonacci_number PASSED [ 70%]
examples/test_fib.py::TestFibonacci::test_seventh_fibonacci_number PASSED [ 80%]
examples/test_fib.py::TestFibonacci::test_sixth_fibonacci_number PASSED [ 90%]
examples/test_fib.py::TestFibonacci::test_third_fibonacci_number PASSED [100%]
=============================== 10 passed in 0.02s ==============================
$ cat examples/fib.py
import unittest
from .fib import Fibonacci
class TestFibonacci(unittest.TestCase):
def test_negative_input(self):
self.assertEqual(Fibonacci(-1), None)
def test_first_fibonacci_number(self):
self.assertEqual(Fibonacci(1), 0)
def test_second_fibonacci_number(self):
self.assertEqual(Fibonacci(2), 1)
def test_third_fibonacci_number(self):
self.assertEqual(Fibonacci(3), 1)
def test_fourth_fibonacci_number(self):
self.assertEqual(Fibonacci(4), 2)
def test_fifth_fibonacci_number(self):
self.assertEqual(Fibonacci(5), 3)
def test_sixth_fibonacci_number(self):
self.assertEqual(Fibonacci(6), 5)
def test_seventh_fibonacci_number(self):
self.assertEqual(Fibonacci(7), 8)
def test_eighth_fibonacci_number(self):
self.assertEqual(Fibonacci(8), 13)
def test_ninth_fibonacci_number(self):
self.assertEqual(Fibonacci(9), 21)
if __name__ == "__main__":
unittest.main()