64 lines
2.8 KiB
Bash
Executable File
64 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# the patch itself
|
|
F="$1"
|
|
shift
|
|
|
|
# if non-empty, force to redo the patch
|
|
FORCE="${FORCE:-}"
|
|
|
|
CPU="${CPU:-$(nproc)}"
|
|
MODEL="${MODEL:-../models/airoboros-l2-13b-gpt4-1.4.1.Q5_K_M.gguf}"
|
|
PROMPT_PFX="${PROMPT_PFX:-prompt14-airo14-pfx.txt}"
|
|
PROMPT_SFX="${PROMPT_SFX:-prompt14-airo14-sfx.txt}"
|
|
CACHE="${CACHE:-prompt-airo14.cache}"
|
|
CACHE_RO="${CACHE_RO- --prompt-cache-ro}"
|
|
EXT="${EXT:-airo14.txt}"
|
|
OUTPUT="${OUTPUT:-$(set -- "$F"."$EXT"; echo $1)}"
|
|
MAINPROG="${MAINPROG:-./main}"
|
|
|
|
# switch to interactive mode with this reverse-prompt at the end if set.
|
|
# Typically: INTERACTIVE="Developer".
|
|
INTERACTIVE=${INTERACTIVE:-""}
|
|
|
|
# Compute the full prompt
|
|
#
|
|
# Input format for "$F": git-format-patch with lines in this order:
|
|
# 1: From cid ...
|
|
# 2: From: author user@...
|
|
# 3: Date:
|
|
# 4: Subject:
|
|
# ...
|
|
# n: ^---$
|
|
# It will emit a preliminary line with the commit ID, the author, the date,
|
|
# the subject, then the whole commit message indented. The output can be
|
|
# searched using grep '^\(Bot:\|#id:\)'
|
|
|
|
PROMPT="$(cat "$PROMPT_PFX"; cat "$F" | sed -e '/^---/,$d' -e '/^Signed-off-by:/d' -e '/^Cc:/d' -e '/^Reported-by:/d' -e '/^Acked-by:/d' -e '1s/From \([0-9a-f]\{8\}\)\([0-9a-f]\{32\}\).*/\1/' -e '2s/^From: .*<\([^<@>]*\)@\([^<.>]*\).*/\1@\2/' -e '3s/^Date:[^,]*, \([^ ]*\) \([^ ]*\) 20\([^ ]*\).*/\1-\2\3/' | sed -ne '1h;1d;2x;2G;2h;2d;3x;3G;3h;3d;4x;4G;4s/^\([^\n]*\)\n\([^\n]*\)\n\([^\n]*\)\nSubject: \(.*\)/#id: \1 \2 \3 \4\n\nSubject: \4/;p' | sed -e '3,$s/^/ \0/'; echo; cat "$PROMPT_SFX")"
|
|
|
|
# already done: don't do it again. Note that /dev/null is OK
|
|
if [ -z "$FORCE" -a -s "$OUTPUT" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
# In order to rebuild the prompt cache:
|
|
# OUTPUT=blah CACHE_RO= ./$0 /dev/null
|
|
#
|
|
# Note: airoboros is able to carefully isolate an entire context, tests show
|
|
# that it's possible to ask it to repeat the entire commit message and it does
|
|
# so correctly. However its logic is sometimes bizarre
|
|
|
|
|
|
if [ -z "$INTERACTIVE" ]; then
|
|
LANG=C "$MAINPROG" --log-disable --model "$MODEL" --threads "$CPU" --ctx_size 4096 --temp 0.36 --top_k 12 --top_p 1 --repeat_last_n 256 --batch_size 16384 --repeat_penalty 1.1 --n_predict 200 --multiline-input --prompt "$PROMPT" --prompt-cache "$CACHE" $CACHE_RO "$@" 2>&1 | grep -v ^llama_model_loader | grep -v ^llm_load_ > "${OUTPUT}"
|
|
if [ "$?" != 0 ]; then
|
|
# failed: this is likely because the text is too long
|
|
(echo "$PROMPT"; echo
|
|
echo "Explanation: the commit message was way too long, couldn't analyse it."
|
|
echo "Conclusion: uncertain"
|
|
echo) > "${OUTPUT}"
|
|
fi
|
|
else
|
|
LANG=C "$MAINPROG" --log-disable --model "$MODEL" --threads "$CPU" --ctx_size 4096 --temp 0.36 --repeat_penalty 1.1 --n_predict 200 --multiline-input --prompt "$PROMPT" --prompt-cache "$CACHE" $CACHE_RO -n -1 -i --color --in-prefix ' ' --reverse-prompt "$INTERACTIVE:" "$@"
|
|
fi
|