Перейти к содержанию

Sandbox-ключи#

Команда /new_test_token [имя] в боте создаёт ключ с префиксом orb_test_….

Главное: такой ключ не дёргает реальные модели и не списывает деньги. Любой запрос возвращает заглушку в OpenAI-совместимом формате.

Зачем#

  • Отладить SDK-интеграцию без расходов (запустил CI, прогнал 1000 тестов — $0)
  • Проверить error-handling твоего кода без выкручивания моделей
  • Smoke-тест в production без использования боевого ключа

Что возвращается#

Запросы к /v1/chat/completions с orb_test_ ключом отдают:

json { "id": "chatcmpl-mock-…", "object": "chat.completion", "created": 1714291200, "model": "<твой запрошенный model>", "choices": [{ "index": 0, "message": { "role": "assistant", "content": "[mock] <первое сообщение пользователя, ≤300 символов>" }, "finish_reason": "stop" }], "usage": { "prompt_tokens": 12, "completion_tokens": 4, "total_tokens": 16, "cost": 0 }, "x_mock": true }

Поле x_mock: true — подсказка тестам, что это заглушка (отсутствует на боевых).

Pong-easter-egg#

Если последнее user-сообщение содержит «ping» — заглушка ответит ровно pong. Удобно для бинарных smoke-тестов:

python resp = test_client.chat.completions.create( model="openai/gpt-4o-mini", messages=[{"role": "user", "content": "ping"}], ) assert resp.choices[0].message.content == "pong"

Streaming тоже работает#

"stream": true на тестовом ключе вернёт корректные SSE-кадры (роль, контент по 6 символов, finish, optional usage, [DONE]) — твой стрим-парсер проверится на полностью совместимом ответе.

Любая модель#

Sandbox-ключ принимает любое значение model — даже несуществующее. Это специально, чтобы менять только api_key в существующем коде:

```python client = OpenAI( base_url="https://api.ml-router.su/v1", api_key="orb_test_…", # ← поменяли только эту строку )

дальше всё как обычно — модели любые, ответы — заглушки#

```

Лимиты#

Чтобы sandbox-ключи нельзя было использовать как бесплатный DDoS-вектор:

Лимит Значение
Per-key RPM 30 req/min
Per-user RPM 20 req/min (суммарно по всем sandbox-ключам)
Per-key daily 1 000 req/day

При превышении — 429 rate_limit. Реальное число запросов сегодня видно в /limits в боте.