ChatGPT Wrapper is an open-source unofficial Power CLI, Python API and Flask API that lets you interact programmatically with ChatGPT.
π€ Programmable ChatGPT. The ChatGPT Wrapper lets you use the powerful ChatGPT bot in your Python scripts or on the command line, making it easy to leverage its functionality into your projects.
π¬ Runs in Shell. You can call and interact with ChatGPT in the terminal.
π» Supports official ChatGPT API. Make API calls directly to the OpenAI ChatGPT endpoint.
π Python API. The ChatGPT Wrapper is a Python library that lets you use ChatGPT in your Python scripts.
π³ Docker image. The ChatGPT Wrapper is also available as a docker image. (experimental)
π§ͺ Flask API. You can use the ChatGPT Wrapper as an API. (experimental)
Run an interactive CLI in the terminal:
Or just get a quick response for one question:
See below for details on using ChatGPT as an API from Python.
To use this repository, you need setuptools
installed. You can install it using pip install setuptools
. Make sure that you have the last version of pip: pip install --upgrade pip
To use the 'chatgpt-api' backend, you need a database backend (SQLite by default, any configurable in SQLAlchemy allowed).
Install the latest version of this software directly from github with pip:
pip install git+https://github.com/mmabrouk/chatgpt-wrapper
- Install the latest version of this software directly from git:
git clone https://github.com/mmabrouk/chatgpt-wrapper.git
- Install the the development package:
cd chatgpt-wrapper pip install -e .
The wrapper works with several differnt backends to connect to the ChatGPT models, and installation is different for each backend.
- Pros:
- Free or paid version available (as of this writing)
- Fairly easy to set up for non-technical users
- Cons:
- Slow (runs a full browser session)
- Clunky authentication method
- No model customizations
- Third party controls your data
Install a browser in playwright (if you haven't already). The program will use firefox by default.
playwright install firefox
Start up the program in install
mode:
chatgpt install
This opens up a browser window. Log in to ChatGPT in the browser window, walk through all the intro screens, then exit program.
1> /exit
Restart the program without the install
parameter to begin using it.
chatgpt
- Pros:
- Fast (many operations run locally for speed)
- Simple API authentication
- Full model customizations
- You control your data
- Cons:
- Only paid version available (as of this writing)
- More commplex setup suitable for technical users
Grab an API key from https://platform.openai.com/account/api-keys
Export the key into your local environment:
export OPENAI_API_KEY=<API_KEY>
Run the program with the 'config' command:
chatgpt config
This will show all the current configuration settings, the most important ones for installation are:
- Config dir: Where configuration files are stored
- Current profile: (shown in the 'Profile configuration' section)
- Config file: The configuration file current being used
- Data dir: The data storage directory
Find the 'Config file' setting, and copy the config.sample.yaml there:
mkdir -p ~/.config/chatgpt-wrapper/profiles/default
cp config.sample.yaml ~/.config/chatgpt-wrapper/profiles/default/config.yaml
Then edit the settings in that file to taste. You'll want to make sure backend
is set to chatgpt-api
in order to use the API.
The API backend requires a database server to store conversation data. The wrapper leverages SQLAlchemy for this.
The simplest supported database is SQLite (which is already installed on most modern operating systems), but you can use any database that is supported by SQLAlchemy.
Check the database
setting from the config
command above, which will show you the currently configured connection string for a default SQLite database.
If you're happy with that setting, nothing else needs to be done -- the database will be created automatically in that location when you run the program.
Once the database is configured, run the program with no arguments:
chatgpt
It will recognize no users have been created, and prompt you to create the first user:
- Username: Required, no spaces or special characters
- Email: Optional
- Password: Optional, if not provided the user can log in without a password
Once the user is created, execute the /login
command with the username:
/login [username]
Once you're logged in, you have full access to all commands.
IMPORTANT NOTE: The user authorization system from the command line is 'admin party' -- meaning every logged in user has admin privileges, including editing and deleting other users.
From a running chatgpt
instance, execute /config
to view the current configuration.
The output will show the location of the configuration directory, the name of the configuration file (called a 'profile'), and the current configuration.
Configuration is optional, default values will be used if no configuration profile is provided. The default configuation settings can be seen in config.sample.yaml -- the file is commented with descriptions of the settings.
NOTE: Not all settings are available on all backends. See the example config for more information.
Command line arguments overrride custom configuration settings, which override default configuration settings.
The wrapper comes with a full template management system.
Templates allow storing text in template files, and quickly leveraging the contents as your user input.
Features:
- Per-profile templates
- Create/edit templates
{{ variable }}
syntax substitution- Five different workflows for collecting variable values, editing, and running
See the various /help template
commands for more information.
The wrapper exposes some builtin variables that can be used in templates:
{{ clipboard }}
- Insert the contents of the clipboard
- Youtube Tutorial: How To Use ChatGPT With Unity: Python And API Setup #2 includes a step by step guide to installing this repository on a windows machine
- This Blog post provides a visual step-by-step guide for installing this library.
Run chatgpt --help
To run the CLI in one-shot mode, simply follow the command with the prompt you want to send to ChatGPT:
chatgpt Hello World!
To run the CLI in interactive mode, execute it with no additional arguments:
chatgpt
Once the interactive shell is running, you can see a list of all commands with:
/help
...or get help for a specific command with:
/help <command>
To use the ChatGPT
class as an API for talking to ChatGPT, create an instance of the class and use the ask
method to send a message to OpenAI and receive the response. For example:
from chatgpt_wrapper import ChatGPT
bot = ChatGPT()
success, response, message = bot.ask("Hello, world!")
if success:
print(response)
else:
raise RuntimeError(message)
The say method takes a string argument representing the message to send to ChatGPT, and returns a string representing the response received from ChatGPT.
You may also stream the response as it comes in from ChatGPT in chunks using the ask_stream
generator.
To pass custom configuration to ChatGPT, use the Config class:
from chatgpt_wrapper import ChatGPT
from chatgpt_wrapper.config import Config
config = Config()
config.set('browser.debug', True)
bot = ChatGPT(config)
success, response, message = bot.ask("Hello, world!")
if success:
print(response)
else:
raise RuntimeError(message)
- Run
python chatgpt_wrapper/gpt_api.py --port 5000
(default port is 5000) to start the server - Test whether it is working using
python -m unittest tests/api_test.py
- See an example of interaction with api in
tests/example_api_call.py
Build a image for testing chatgpt-wrapper
with following commands.
docker-compose build && docker-compose up -d
docker exec -it chatgpt-wrapper-container /bin/bash -c "chatgpt install"
Then, visit http://localhost:6901/vnc.html with password headless
and login ChatGPT.
Then, turn back to terminal and enjoy the chat!
We welcome contributions to ChatGPT Wrapper! If you have an idea for a new feature or have found a bug, please open an issue on the GitHub repository.
This project is licensed under the MIT License - see the LICENSE file for details.
- This project is a modification from Taranjeet code which is a modification of Daniel Gross code.