Files

3.1 KiB
Raw Permalink Blame History

Gateway Verification Checklist

После создания/перезапуска шлюза — полный цикл проверки всех endpoint-ов.

1. Health Check

curl -s http://127.0.0.1:PORT/health \
  -H "Authorization: Bearer $KEY" | python -m json.tool

Ожидаемый ответ: pool.total_accounts, pool.available, models, gateway_key.

2. Non-Streaming Chat (N запросов = размер пула)

for i in $(seq 1 N); do
  curl -s -X POST http://127.0.0.1:PORT/v1/chat/completions \
    -H "Authorization: Bearer $KEY" \
    -H "Content-Type: application/json" \
    -d '{"model":"gpt-5-nano","messages":[{"role":"user","content":"Say OK"}],"max_tokens":5}' \
    | python -c "import sys,json; print(json.load(sys.stdin)['choices'][0]['message']['content'][:30])"
done

Проверяем: все N запросов возвращают 200 + контент (ротация работает).

3. Streaming

curl -s -N -X POST http://127.0.0.1:PORT/v1/chat/completions \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5-nano","messages":[{"role":"user","content":"Say hi"}],"max_tokens":10,"stream":true}' \
  --max-time 20

Проверяем: NDJSON/SSE чанки с data: + завершающий data: [DONE].

ВАЖНО: не тестировать streaming через execute_code (Python resp.read() вешает инструмент). Только curl -N.

4. Tool Use

curl -s -X POST http://127.0.0.1:PORT/v1/chat/completions \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5-nano","messages":[{"role":"user","content":"What is 15+27? Use calculator."}],"tools":[{"type":"function","function":{"name":"calculator","parameters":{"type":"object","properties":{"expr":{"type":"string"}}}}}],"tool_choice":"auto","max_tokens":100}'

Проверяем: finish_reason: "tool_calls" + tool_calls[] с именем функции и аргументами.

5. Pool Stats

curl -s http://127.0.0.1:PORT/health \
  -H "Authorization: Bearer $KEY" \
  | python -c "import sys,json; d=json.load(sys.stdin); [print(f'{a[\"name\"]}: {a[\"requests\"]} reqs, {a[\"errors\"]} errs, avail={a[\"available\"]}') for a in d['pool']['accounts']]"

Проверяем: все аккаунты available=true, ошибок нет, запросы распределены.

6. Models

curl -s http://127.0.0.1:PORT/v1/models \
  -H "Authorization: Bearer $KEY" \
  | python -c "import sys,json; d=json.load(sys.stdin); print(f'{len(d[\"data\"])} models')"

7. Gateway Key Recovery

Если 401 — ключ не в коде, а в state-файле:

python -c "import json; print(json.load(open('PROJECT_gateway_state.json'))['gateway_key'])"

Expected Full Output

HEALTH: 200 | pool: 10 total, 10 avail
NON-STREAMING: 10/10 passed
STREAMING: chunks > 0, text: "Hi there!..."
TOOL USE: 1 tool call, calculator({"expr":"15+27"})
POOL: guest-1..N: 1-2 reqs, 0 errs, avail=True
MODELS: 35