71 lines
2.2 KiB
Bash
71 lines
2.2 KiB
Bash
|
|
#!/usr/bin/env bash
|
|||
|
|
# 直接對比 OpenCode upstream 與本機 gateway 的原始 JSON/SSE,方便排查空回應
|
|||
|
|
#
|
|||
|
|
# 用法:
|
|||
|
|
# OPENCODE_TOKEN=sk-xxx ./scripts/debug-opencode-raw.sh
|
|||
|
|
|
|||
|
|
set -u
|
|||
|
|
|
|||
|
|
BASE_URL="${BASE_URL:-http://127.0.0.1:8890}"
|
|||
|
|
OPENCODE_TOKEN="${OPENCODE_TOKEN:-}"
|
|||
|
|
MODEL="${MODEL:-deepseek-v4-flash}"
|
|||
|
|
MESSAGE="${MESSAGE:-Introduce yourself in one sentence.}"
|
|||
|
|
|
|||
|
|
if [[ -z "$OPENCODE_TOKEN" ]]; then
|
|||
|
|
echo "OPENCODE_TOKEN is required"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
require_cmd() {
|
|||
|
|
command -v "$1" >/dev/null 2>&1 || { echo "missing command: $1"; exit 1; }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
require_cmd curl
|
|||
|
|
require_cmd jq
|
|||
|
|
|
|||
|
|
payload="$(jq -n \
|
|||
|
|
--arg model "$MODEL" \
|
|||
|
|
--arg message "$MESSAGE" \
|
|||
|
|
'{
|
|||
|
|
model: $model,
|
|||
|
|
messages: [{role: "user", content: $message}],
|
|||
|
|
max_tokens: 2048,
|
|||
|
|
thinking: {type: "disabled"}
|
|||
|
|
}')"
|
|||
|
|
|
|||
|
|
echo "=== OpenCode upstream (non-stream) ==="
|
|||
|
|
curl -sS -m 120 -X POST "https://opencode.ai/zen/go/v1/chat/completions" \
|
|||
|
|
-H "Authorization: Bearer ${OPENCODE_TOKEN}" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d "$payload" | jq .
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo "=== Local gateway (non-stream) ==="
|
|||
|
|
curl -sS -m 120 -X POST "${BASE_URL}/api/v1/ai/chat" \
|
|||
|
|
-H "Authorization: Bearer ${OPENCODE_TOKEN}" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d "$(jq -n \
|
|||
|
|
--arg provider "opencode-go" \
|
|||
|
|
--arg model "$MODEL" \
|
|||
|
|
--arg message "$MESSAGE" \
|
|||
|
|
'{provider:$provider,model:$model,messages:[{role:"user",content:$message}],max_tokens:2048}')" | jq .
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo "=== OpenCode upstream (stream, first 20 lines) ==="
|
|||
|
|
curl -sS -N -m 120 -X POST "https://opencode.ai/zen/go/v1/chat/completions" \
|
|||
|
|
-H "Authorization: Bearer ${OPENCODE_TOKEN}" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-H "Accept: text/event-stream" \
|
|||
|
|
-d "$(echo "$payload" | jq '.stream=true')" | head -n 20
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo "=== Local gateway (stream, first 20 lines) ==="
|
|||
|
|
curl -sS -N -m 120 -X POST "${BASE_URL}/api/v1/ai/chat/stream" \
|
|||
|
|
-H "Authorization: Bearer ${OPENCODE_TOKEN}" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-H "Accept: text/event-stream" \
|
|||
|
|
-d "$(jq -n \
|
|||
|
|
--arg provider "opencode-go" \
|
|||
|
|
--arg model "$MODEL" \
|
|||
|
|
--arg message "$MESSAGE" \
|
|||
|
|
'{provider:$provider,model:$model,messages:[{role:"user",content:$message}],max_tokens:2048}')" | head -n 20
|