b: use /generate endpoint for foreground mode, sessions only for -bg

This commit is contained in:
Ollie Agent 2026-07-18 23:20:15 +02:00
parent 6cda0a1f96
commit 8fe10813ee
1 changed files with 53 additions and 23 deletions

View File

@ -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