65 lines
2.1 KiB
Bash
Executable file
65 lines
2.1 KiB
Bash
Executable file
#!/bin/sh
|
|
set -eu
|
|
|
|
if [ "$#" -ne 2 ]; then
|
|
echo "usage: $0 SERVER_STREAM_PROBE FAKE_SERVER" >&2
|
|
exit 2
|
|
fi
|
|
|
|
probe=$1
|
|
server=$2
|
|
port=$((40000 + $$ % 15000))
|
|
prompt=$(mktemp /private/tmp/gem-stream-probe-prompt.XXXXXX)
|
|
response=$(mktemp /private/tmp/gem-stream-probe-response.XXXXXX)
|
|
summary=$(mktemp /private/tmp/gem-stream-probe-summary.XXXXXX)
|
|
request=$(mktemp /private/tmp/gem-stream-probe-request.XXXXXX)
|
|
request_response=$(mktemp /private/tmp/gem-stream-probe-request-response.XXXXXX)
|
|
request_summary=$(mktemp /private/tmp/gem-stream-probe-request-summary.XXXXXX)
|
|
server_pid=
|
|
cleanup()
|
|
{
|
|
if [ -n "$server_pid" ]; then
|
|
kill "$server_pid" 2>/dev/null || true
|
|
wait "$server_pid" 2>/dev/null || true
|
|
fi
|
|
rm -f "$prompt" "$response" "$summary" "$request" "$request_response" \
|
|
"$request_summary"
|
|
}
|
|
trap cleanup EXIT INT TERM HUP
|
|
|
|
printf 'quote " slash \\\nline' > "$prompt"
|
|
"$server" --port "$port" &
|
|
server_pid=$!
|
|
ready=0
|
|
for _attempt in 1 2 3 4 5 6 7 8 9 10; do
|
|
if curl --fail --silent "http://127.0.0.1:$port/health" >/dev/null; then
|
|
ready=1
|
|
break
|
|
fi
|
|
sleep 0.1
|
|
done
|
|
[ "$ready" -eq 1 ]
|
|
|
|
GEM_STREAM_MAX_TOKENS=8 "$probe" "http://127.0.0.1:$port/v1" gemma-4-31b \
|
|
"$prompt" "$response" "$summary" >/dev/null
|
|
|
|
jq -e '
|
|
.schema_version == 1 and .http_code == 200 and
|
|
.requested_max_tokens == 8 and
|
|
.first_visible_event_seconds >= 0.15 and
|
|
.visible_event_count == 2 and .finish_reason == "stop" and
|
|
.usage.total_tokens == 5
|
|
' "$summary" >/dev/null
|
|
|
|
jq -n --rawfile prompt "$prompt" \
|
|
'{model: "gemma-4-31b", messages: [
|
|
{role: "user", content: $prompt},
|
|
{role: "assistant", content: "answer"},
|
|
{role: "user", content: "continue"}], max_tokens: 7}' > "$request"
|
|
"$probe" --request "http://127.0.0.1:$port/v1" "$request" \
|
|
"$request_response" "$request_summary" >/dev/null
|
|
jq -e '
|
|
.schema_version == 1 and .http_code == 200 and
|
|
.requested_max_tokens == 7 and .visible_event_count == 2 and
|
|
.finish_reason == "stop" and .usage.prompt_tokens == 3
|
|
' "$request_summary" >/dev/null
|