45 lines
1.2 KiB
Bash
Executable file
45 lines
1.2 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# rabbithole chat helper — talkative defaults (temperature 1.05)
|
|
set -euo pipefail
|
|
MODEL="${1:?model}"
|
|
SYSTEM_FILE="${2:?system file or -}"
|
|
USER_MSG="${3:?user message}"
|
|
OUT="${4:?out path}"
|
|
TEMP="${TEMP:-1.05}"
|
|
TOP_P="${TOP_P:-0.95}"
|
|
NUM_PREDICT="${NUM_PREDICT:-900}"
|
|
BASE="${OLLAMA_HOST:-http://127.0.0.1:11436}"
|
|
|
|
if [[ "$SYSTEM_FILE" == "-" ]]; then
|
|
SYS=$(cat)
|
|
else
|
|
SYS=$(cat "$SYSTEM_FILE")
|
|
fi
|
|
|
|
python3 - "$MODEL" "$SYS" "$USER_MSG" "$OUT" "$TEMP" "$TOP_P" "$NUM_PREDICT" "$BASE" <<'PY'
|
|
import json, sys, urllib.request
|
|
model, system, user, out, temp, top_p, num_predict, base = sys.argv[1:9]
|
|
body = {
|
|
"model": model,
|
|
"stream": False,
|
|
"options": {
|
|
"temperature": float(temp),
|
|
"top_p": float(top_p),
|
|
"num_predict": int(num_predict),
|
|
},
|
|
"messages": [
|
|
{"role": "system", "content": system},
|
|
{"role": "user", "content": user},
|
|
],
|
|
}
|
|
req = urllib.request.Request(
|
|
base.rstrip("/") + "/api/chat",
|
|
data=json.dumps(body).encode(),
|
|
headers={"Content-Type": "application/json"},
|
|
method="POST",
|
|
)
|
|
with urllib.request.urlopen(req, timeout=300) as r:
|
|
text = (json.load(r).get("message") or {}).get("content") or ""
|
|
open(out, "w").write(text.strip() + "\n")
|
|
print("ok", out, "chars", len(text), "temp", temp)
|
|
PY
|