diff --git a/scripts/s/b b/scripts/s/b index b07c430..92d01b1 100755 --- a/scripts/s/b +++ b/scripts/s/b @@ -78,6 +78,21 @@ fi cwd=${cwd:-$(pwd)} base=${name:-$(date +%s%N)-$$} +# JSON-escape a string for embedding in a JSON value. +jsonesc() { + printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g; s/\t/\\t/g' | tr '\n' '\1' | sed 's/\x01/\\n/g' +} + +# Foreground generation via /generate (net/dns pattern). +fn_generate() { + local json='{"prompt":"'$(jsonesc "$prompt")'"' + [ -n "$backend" ] && json="$json,\"backend\":\"$backend\"" + [ -n "$model" ] && json="$json,\"model\":\"$model\"" + json="$json}" + + printf '%s' "$json" | 9p rdwr ollie/generate || die "generate failed (is olliesrv running?)" +} + fn_run_one() { local id=$1 local B="$MOUNT/s/$id" @@ -132,30 +147,45 @@ model=${model}" rc=0 -if [ "$parallel" -gt 1 ]; then - abort=$(mktemp) - trap 'rm -f "$abort"' EXIT - pids=() - for i in $(seq 1 "$parallel"); do - id="${base}-${i}" - ( - [ -s "$abort" ] && exit 1 - fn_run_one "$id" || { - if [ "$failfast" -eq 1 ]; then - echo 1 > "$abort" - for j in $(seq 1 "$parallel"); do - jid="${base}-${j}" - [ "$jid" != "$id" ] && rm -r "$MOUNT/s/$jid" 2>/dev/null || true - done - fi - exit 1 - } - ) & - pids+=($!) - done - for pid in "${pids[@]}"; do wait "$pid" || rc=1; done +if [ "$bg" -eq 1 ]; then + # Background mode: must use sessions (persistent state to poll later). + if [ "$parallel" -gt 1 ]; then + abort=$(mktemp) + trap 'rm -f "$abort"' EXIT + pids=() + for i in $(seq 1 "$parallel"); do + id="${base}-${i}" + ( + [ -s "$abort" ] && exit 1 + fn_run_one "$id" || { + if [ "$failfast" -eq 1 ]; then + echo 1 > "$abort" + for j in $(seq 1 "$parallel"); do + jid="${base}-${j}" + [ "$jid" != "$id" ] && rm -r "$MOUNT/s/$jid" 2>/dev/null || true + done + fi + exit 1 + } + ) & + pids+=($!) + done + for pid in "${pids[@]}"; do wait "$pid" || rc=1; done + else + fn_run_one "$base" || rc=1 + fi else - fn_run_one "$base" || rc=1 + # Foreground mode: use /generate (stateless, no session). + if [ "$parallel" -gt 1 ]; then + pids=() + for i in $(seq 1 "$parallel"); do + fn_generate & + pids+=($!) + done + for pid in "${pids[@]}"; do wait "$pid" || rc=1; done + else + fn_generate || rc=1 + fi fi exit $rc