Compare commits
4 Commits
caf5244d52
...
7a92ebe539
| Author | SHA1 | Date | |
|---|---|---|---|
| 7a92ebe539 | |||
| 9b6b13993c | |||
| c5c4a6628f | |||
| f8ed0e3636 |
@@ -113,6 +113,45 @@ 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
|
||||
```
|
||||
pip install pre-commit
|
||||
pre-commit install
|
||||
```
|
||||
### Execute tests before opening a PR
|
||||
```
|
||||
pytest
|
||||
```
|
||||
### Consider using `pyenv` / `pyenv-virtualenv`
|
||||
Short installation instructions:
|
||||
* install `pyenv`:
|
||||
```
|
||||
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`
|
||||
```
|
||||
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`:
|
||||
```
|
||||
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.
|
||||
|
||||
|
||||
|
||||
@@ -7,10 +7,13 @@ from typing import List, Dict, Any, Optional
|
||||
|
||||
def read_file(fname: pathlib.Path, tags_only: bool = False) -> Dict[str, Any]:
|
||||
with open(fname, "r") as fd:
|
||||
tagline = fd.readline().strip().split(':', maxsplit=1)[1].strip()
|
||||
# also support tags separated by ',' (old format)
|
||||
separator = ',' if ',' in tagline else ' '
|
||||
tags = [t.strip() for t in tagline.split(separator)]
|
||||
if tags_only:
|
||||
return {"tags": [x.strip() for x in fd.readline().strip().split(':')[1].strip().split(',')]}
|
||||
return {"tags": tags}
|
||||
text = fd.read().strip().split('\n')
|
||||
tags = [x.strip() for x in text.pop(0).split(':')[1].strip().split(',')]
|
||||
question_idx = text.index("=== QUESTION ===") + 1
|
||||
answer_idx = text.index("==== ANSWER ====")
|
||||
question = "\n".join(text[question_idx:answer_idx]).strip()
|
||||
@@ -21,7 +24,7 @@ def read_file(fname: pathlib.Path, tags_only: bool = False) -> Dict[str, Any]:
|
||||
|
||||
def dump_data(data: Dict[str, Any]) -> str:
|
||||
with io.StringIO() as fd:
|
||||
fd.write(f'TAGS: {", ".join(data["tags"])}\n')
|
||||
fd.write(f'TAGS: {" ".join(data["tags"])}\n')
|
||||
fd.write(f'=== QUESTION ===\n{data["question"]}\n')
|
||||
fd.write(f'==== ANSWER ====\n{data["answer"]}\n')
|
||||
return fd.getvalue()
|
||||
@@ -29,7 +32,7 @@ def dump_data(data: Dict[str, Any]) -> str:
|
||||
|
||||
def write_file(fname: str, data: Dict[str, Any]) -> None:
|
||||
with open(fname, "w") as fd:
|
||||
fd.write(f'TAGS: {", ".join(data["tags"])}\n')
|
||||
fd.write(f'TAGS: {" ".join(data["tags"])}\n')
|
||||
fd.write(f'=== QUESTION ===\n{data["question"]}\n')
|
||||
fd.write(f'==== ANSWER ====\n{data["answer"]}\n')
|
||||
|
||||
|
||||
@@ -15,11 +15,11 @@ def process_tags(tags: list[str], extags: list[str], otags: list[str]) -> None:
|
||||
printed_messages = []
|
||||
|
||||
if tags:
|
||||
printed_messages.append(f"Tags: {', '.join(tags)}")
|
||||
printed_messages.append(f"Tags: {' '.join(tags)}")
|
||||
if extags:
|
||||
printed_messages.append(f"Excluding tags: {', '.join(extags)}")
|
||||
printed_messages.append(f"Excluding tags: {' '.join(extags)}")
|
||||
if otags:
|
||||
printed_messages.append(f"Output tags: {', '.join(otags)}")
|
||||
printed_messages.append(f"Output tags: {' '.join(otags)}")
|
||||
|
||||
if printed_messages:
|
||||
print("\n".join(printed_messages))
|
||||
@@ -41,7 +41,7 @@ def message_to_chat(message: Dict[str, str],
|
||||
append_message(chat, 'user', message['question'])
|
||||
append_message(chat, 'assistant', message['answer'])
|
||||
if with_tags:
|
||||
tags = ", ".join(message['tags'])
|
||||
tags = " ".join(message['tags'])
|
||||
append_message(chat, 'tags', tags)
|
||||
if with_file:
|
||||
append_message(chat, 'file', message['file'])
|
||||
@@ -79,5 +79,5 @@ def display_tags_frequency(tags: List[str], dump=False) -> None:
|
||||
if dump:
|
||||
pp(tags)
|
||||
return
|
||||
for tag in set(tags):
|
||||
for tag in sorted(set(tags)):
|
||||
print(f"- {tag}: {tags.count(tag)}")
|
||||
|
||||
Reference in New Issue
Block a user