Metadata-Version: 2.1
Name: cli-chat
Version: 0.2.1
Summary: 
License: GPLv3
Author: Zhu Zhaomeng
Author-email: zhaomeng.zhu@ntu.edu.sg
Requires-Python: >=3.11,<4.0
Classifier: License :: Other/Proprietary License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Requires-Dist: appdirs (>=1.4.4,<2.0.0)
Requires-Dist: openai (>=0.27.0,<0.28.0)
Requires-Dist: prompt-toolkit (>=3.0.38,<4.0.0)
Requires-Dist: rich (>=13.3.1,<14.0.0)
Requires-Dist: typer (>=0.7.0,<0.8.0)
Description-Content-Type: text/markdown

## `cli-chat`

`cli-chat` is a command-line tool that allows you to have a conversation with ChatGPT from your terminal. Follow the simple steps below to install and use this tool.

### Installation

#### Mac

`cli-chat` can be installed on Mac using [Homebrew](https://brew.sh/). To install `cli-chat` using Homebrew, 
simply execute the following command in your terminal:

```bash
brew tap tefx/tap
brew install cli-chat
```

#### Other Platforms

To install `cli-chat`, execute the following command in your terminal:

```bash
pip install cli-chat
```

Alternatively, you can clone the repository and install the dependencies using `poetry`. Here are the steps to follow:

1. Install [poetry](https://python-poetry.org/docs/#installation).
2. Clone the repository.
3. Navigate to the repository's root directory.
4. Execute `poetry install`.

### Usage

To start a conversation with ChatGPT, execute the following command in your terminal:

```bash
cli-chat
```

Alternatively, you can start the script by executing the following command in your terminal:

```bash
poetry run cli-chat
```

Here are a few things to keep in mind when using `cli-chat`:

- Before being able to use the tool, you must obtain an API key by registering for it [here](https://platform.openai.com/account/api-keys).
- To end the conversation, type "thanks", "thx", or a similar phrase.
- You can navigate through your conversation history with the arrow keys.
- Common key-bindings and auto-suggestions are supported, thanks to [prompt_toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit).

### Control Commands

You can use special control commands to modify `cli-chat`'s behavior. These commands should be placed at the beginning of your question string and should start with a backslash `\\`.

The supported control commands are listed below:

| Command       | Arguments | Tags             | Description                                                                                                                                                     |
|---------------|-----------|-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `\no-render`  |           |                 | Prevent the answer from being rendered in markdown.                                                                                                             |
| `\load-file`  |           |                 | Load a file and use the contents as the remaining part of your question.                                                                                         |
| `\long`       |           |                 | Accept multi-line inputs from now on. Use <kbd>Meta</kbd>+<kbd>Enter</kbd> or <kbd>ESC</kbd> followed by <kbd>Enter</kbd> to finish.                            |
| `\save`       |           | `append`        | Save the last answer to a file.                                                                                                                                 |
| `\hide-answer`|           |                 | Do not show the answer. **WARNING: Always check the answer first to avoid losing it if you want to save it later.**                                           |
| `\continue`   | `idx`     |                 | Resume the conversation from a previous answer. `idx` should be a negative number as shown by the `\history` command.                                          |
| `\forget`     |           |                 | Delete your conversation history.                                                                                                                               |
| `\history`    |           |                 | Show your entire conversation history.                                                                                                                          |

You can combine multiple control commands by separating them with `|`. For instance, `\no-render|load-file` will load a file and prevent the answer from being rendered in markdown.

For some commands, additional arguments and tags may be specified by using the syntax `command(arg1, arg2, ...){tag1, tag2, ..}`. For example, `\save{append}` will append the answer to the file instead of overwriting it, while `\continue(-1)` will resume the conversation from the answer with index `-1` in the history.

### Example

Here are a few examples of what a conversation with `cli-chat` might look like:

![Example 1](./docs/example-1.png)

![Example 2](./docs/example-2.png)

![Example 3](./docs/example-3.png)

![Example 4](./docs/example-4.png)

## Configuration

Use `cli-chat-config` to manage key and input history.
