237 lines
6.6 KiB
Markdown
237 lines
6.6 KiB
Markdown
# ChatMastermind
|
|
|
|
ChatMastermind is a Python application that automates conversation with AI, stores question-answer pairs with tags, and composes relevant chat history for the next question.
|
|
|
|
The project uses the OpenAI API to generate responses and stores the data in YAML files. It also allows you to filter chat history based on tags and supports autocompletion for tags.
|
|
|
|
Official repository URL: https://kaizenkodo.no/gitea/kaizenkodo/ChatMastermind.git
|
|
|
|
## Requirements
|
|
|
|
- Python 3.9 or higher
|
|
- openai
|
|
- PyYAML
|
|
- argcomplete
|
|
|
|
You can install these requirements using `pip`:
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
## Installation
|
|
|
|
You can install the package with the requirements using `pip`:
|
|
|
|
```bash
|
|
pip install .
|
|
```
|
|
|
|
## Usage
|
|
|
|
The `cmm` script has global options, a list of commands, and options per command:
|
|
|
|
```bash
|
|
cmm [global options] command [command options]
|
|
```
|
|
|
|
### Global Options
|
|
|
|
- `-C`, `--config`: Config file name (defaults to `.config.yaml`).
|
|
|
|
### Command Options
|
|
|
|
#### Question
|
|
|
|
The `question` command is used to ask, create, and process questions.
|
|
|
|
```bash
|
|
cmm question [-t OTAGS]... [-k ATAGS]... [-x XTAGS]... [-o OUTTAGS]... [-A AI_ID] [-M MODEL] [-n NUM] [-m MAX] [-T TEMP] (-a QUESTION | -c QUESTION | -r [MESSAGE ...] | -p [MESSAGE ...]) [-O] [-s FILE]... [-S FILE]...
|
|
```
|
|
|
|
* `-t, --or-tags OTAGS`: List of tags (one must match)
|
|
* `-k, --and-tags ATAGS`: List of tags (all must match)
|
|
* `-x, --exclude-tags XTAGS`: List of tags to exclude
|
|
* `-o, --output-tags OUTTAGS`: List of output tags (default: use input tags)
|
|
* `-A, --AI AI_ID`: AI ID to use
|
|
* `-M, --model MODEL`: Model to use
|
|
* `-n, --num-answers NUM`: Number of answers to request
|
|
* `-m, --max-tokens MAX`: Max. number of tokens
|
|
* `-T, --temperature TEMP`: Temperature value
|
|
* `-a, --ask QUESTION`: Ask a question
|
|
* `-c, --create QUESTION`: Create a question
|
|
* `-r, --repeat [MESSAGE ...]`: Repeat a question
|
|
* `-p, --process [MESSAGE ...]`: Process existing questions
|
|
* `-O, --overwrite`: Overwrite existing messages when repeating them
|
|
* `-s, --source-text FILE`: Add content of a file to the query
|
|
* `-S, --source-code FILE`: Add source code file content to the chat history
|
|
|
|
#### Hist
|
|
|
|
The `hist` command is used to print and manage the chat history.
|
|
|
|
```bash
|
|
cmm hist [--print | --convert FORMAT] [-t OTAGS]... [-k ATAGS]... [-x XTAGS]... [-w] [-W] [-S] [-A SUBSTRING] [-Q SUBSTRING]
|
|
```
|
|
|
|
* `-p, --print`: Print the DB chat history
|
|
* `-c, --convert FORMAT`: Convert all messages to the given format
|
|
* `-t, --or-tags OTAGS`: List of tags (one must match)
|
|
* `-k, --and-tags ATAGS`: List of tags (all must match)
|
|
* `-x, --exclude-tags XTAGS`: List of tags to exclude
|
|
* `-w, --with-metadata`: Print chat history with metadata (tags, filenames, AI, etc.)
|
|
* `-S, --source-code-only`: Only print embedded source code
|
|
* `-A, --answer SUBSTRING`: Filter for answer substring
|
|
* `-Q, --question SUBSTRING`: Filter for question substring
|
|
|
|
#### Tags
|
|
|
|
The `tags` command is used to manage tags.
|
|
|
|
```bash
|
|
cmm tags (-l | -p PREFIX | -c SUBSTRING)
|
|
```
|
|
|
|
* `-l, --list`: List all tags and their frequency
|
|
* `-p, --prefix PREFIX`: Filter tags by prefix
|
|
* `-c, --contain SUBSTRING`: Filter tags by contained substring
|
|
|
|
#### Config
|
|
|
|
The `config` command is used to manage the configuration.
|
|
|
|
```bash
|
|
cmm config (-l | -m | -c FILE)
|
|
```
|
|
|
|
* `-l, --list-models`: List all available models
|
|
* `-m, --print-model`: Print the currently configured model
|
|
* `-c, --create FILE`: Create config with default settings in the given file
|
|
|
|
#### Print
|
|
|
|
The `print` command is used to print message files.
|
|
|
|
```bash
|
|
cmm print (-f FILE | -l) [-q | -a | -S]
|
|
```
|
|
|
|
* `-f, --file FILE`: Print given file
|
|
* `-l, --latest`: Print latest message
|
|
* `-q, --question`: Only print the question
|
|
* `-a, --answer`: Only print the answer
|
|
* `-S, --only-source-code`: Only print embedded source code
|
|
|
|
### Examples
|
|
|
|
1. Ask a question:
|
|
|
|
```bash
|
|
cmm question -a "What is the meaning of life?" -t philosophy -x religion
|
|
```
|
|
|
|
2. Display the chat history:
|
|
|
|
```bash
|
|
cmm hist
|
|
```
|
|
|
|
3. Filter chat history by tags:
|
|
|
|
```bash
|
|
cmm hist --or-tags tag1 tag2
|
|
```
|
|
|
|
4. Exclude chat history by tags:
|
|
|
|
```bash
|
|
cmm hist --exclude-tags tag3 tag4
|
|
```
|
|
|
|
5. List all tags and their frequency:
|
|
|
|
```bash
|
|
cmm tags -l
|
|
```
|
|
|
|
6. Print the contents of a file:
|
|
|
|
```bash
|
|
cmm print -f example.yaml
|
|
```
|
|
|
|
## Configuration
|
|
|
|
The default configuration filename is `.config.yaml` (it is searched in the current working directory).
|
|
Use the command `cmm config --create <FILENAME>` to create a default configuration:
|
|
|
|
```
|
|
cache: .
|
|
db: ./db/
|
|
ais:
|
|
myopenai:
|
|
name: openai
|
|
model: gpt-3.5-turbo-16k
|
|
api_key: 0123456789
|
|
temperature: 1.0
|
|
max_tokens: 4000
|
|
top_p: 1.0
|
|
frequency_penalty: 0.0
|
|
presence_penalty: 0.0
|
|
system: You are an assistant
|
|
```
|
|
|
|
Each AI has its own section and the name of that section is called the 'AI ID' (in the example above it is `myopenai`).
|
|
The AI ID can be any string, as long as it's unique within the `ais` section. The AI ID is used for all commands that support the `AI` parameter and it's also stored within each message file.
|
|
|
|
## Autocompletion
|
|
|
|
To activate autocompletion for tags, add the following line to your shell's configuration file (e.g., `.bashrc`, `.zshrc`, or `.profile`):
|
|
|
|
```bash
|
|
eval "$(register-python-argcomplete cmm)"
|
|
```
|
|
|
|
After adding this line, restart your shell or run `source <your-shell-config-file>` to enable autocompletion for the `cmm` script.
|
|
|
|
## Contributing
|
|
|
|
### Enable commit hooks
|
|
```bash
|
|
pip install pre-commit
|
|
pre-commit install
|
|
```
|
|
### Execute tests before opening a PR
|
|
```bash
|
|
pytest
|
|
```
|
|
### Consider using `pyenv` / `pyenv-virtualenv`
|
|
Short installation instructions:
|
|
* install `pyenv`:
|
|
```bash
|
|
cd ~
|
|
git clone https://github.com/pyenv/pyenv .pyenv
|
|
cd ~/.pyenv && src/configure && make -C src
|
|
```
|
|
* make sure that `~/.pyenv/shims` and `~/.pyenv/bin` are the first entries in your `PATH`, e.g., by setting it in `~/.bashrc`
|
|
* add the following to your `~/.bashrc` (after setting `PATH`): `eval "$(pyenv init -)"`
|
|
* create a new terminal or source the changes (e.g., `source ~/.bashrc`)
|
|
* install `virtualenv`
|
|
```bash
|
|
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
|
|
```
|
|
* add the following to your `~/.bashrc` (after the commands above): `eval "$(pyenv virtualenv-init -)`
|
|
* create a new terminal or source the changes (e.g., `source ~/.bashrc`)
|
|
* go back to the `ChatMasterMind` repo and create a virtual environment with the latest `Python`, e.g., `3.11.4`:
|
|
```bash
|
|
cd <CMM_REPO_PATH>
|
|
pyenv install 3.11.4
|
|
pyenv virtualenv 3.11.4 py311
|
|
pyenv activate py311
|
|
```
|
|
* see also the [official pyenv documentation](https://github.com/pyenv/pyenv#readme)
|
|
|
|
## License
|
|
|
|
This project is licensed under the terms of the WTFPL License.
|