3.1 KiB
3.1 KiB
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