/ReAIterator

Reiterate text file through AI

Primary LanguagePythonMIT LicenseMIT

ReAIterator: reiterate text file through AI

Simple script to call the text editor to edit prompt for the model. Editor is configured by $EDITOR env var(vim is default).

Options: --backend, -b Backend to use. Supported: exllama(default), exllama2, autogptq, transformers, vllm, llama_cpp --model, -m (mandatory) Path to the model. E.g. /home/user/models/llama2.gptq/gptq/model-4bit-128g.safetensors --prompt, -p (default: /tmp/prompt.ptxt) Path to write the story to --n_gens, -g (default: 4) Number of responses to generate --n_tokens, -t (default: 128) Number of tokens to generate --max_len, -x Maximum number of tokens in prompt --g_temperature, --g_repetition_penalty, --g_top_p, --g_top_k Generator parameters

Example:

$ python reAIterator.py --model ~/models/MythoMix-L2-13B-GPTQ/gptq_model-4bit-128g.safetensors --prompt /tmp/a.ptxt -g 4 -t 120 --g_temperature=0.69 --g_repetition_penalty=1.13 --g_top_p=0.95 -x 4000

$ python reAIterator.py --model ~/models/mistral-7b-v0.1.Q4_K_M.gguf --prompt /tmp/a.ptxt

Features are

  • It allows to mark blocks of text to be excluded from generation.
  • It generates 4 responses one by one to preserve precious VRAM
  • Responses are generated with randomized setting (each setting is +/- 5%)
  • It has token count threshold. After threshold is reached, script will commplain and ask to edit the prompt.
  • Goes with even simpler script roll.py to roll dice in another session
  • (Currently exLlama backend only): randomizes parameters every N tokens during single generation to shake text generation

Caveats:

  • vim adds EOL. Use :set noeol / add ;;;- at the end to remove it
  • vllm doesn't support models with headsizes not divisible by 8. openllama3b will not work

Blocks of text are separated by marker ;;; ;;;--- means exclude all further blocks ;;;- means exclude block until the next ;;;

For example you had

You are an AI. Write cool story.
### Instruction:
Write touhou story.

### Response:
(Cool adventures)
Remilia: Sakuya, lets start danmaku
[The fight starts]

And now you want to know what characters are in this setting. So you change the story to

You are an expert TTRPG game-master. Describe NPC characters.
### Instruction:
Write character description for Koakuma
(Copy paste background information for Koakuma from wiki)

### Response:
{"Koakuma":
  {"STR":;;;---
### Instruction:
Write touhou story.

### Response:
(Cool adventures)
Remilia: Sakuya, lets start danmaku
[The fight starts]

Old instruction after ;;;--- will be discarded for the next generation. After that you can use the result to describe the fight scene.

Possible TODO: [ ] parametrize finetune step and explore it so it works rather than hinder experience [ ] figure out is it possible/feasable to finetune on the go for gptq/exllama [ ] Add --remove-last-eol-because-i-am-too-lazy-to-configure-vim option
[ ] use input() instead of system, so VS code in different window can be used
[ ] nested structure.
[ ] better markers for "remove N whitespaces from the last section"