Документация
Подключение TokenOS
TokenOS — OpenAI-совместимый API. Если ваш код уже работает с OpenAI SDK, достаточно поменять base_url и ключ.
1. Быстрый старт
- Зарегистрируйтесь и создайте API-ключ TokenOS (
tok_…). Ключ показывается один раз. - Сразу доступны локальные модели
local/qwen2.5:7b-instructиlocal/qwen2.5:1.5b-instruct(300 запросов в день). Это песочница для проверки интеграции и оптимизаций: небольшая модель может ошибаться в фактах — для рабочих задач подключите своего провайдера. - Чтобы работать со своим провайдером, добавьте подключение в разделе «Провайдеры»: GigaChat (ключ авторизации) или любой OpenAI-совместимый API (HTTPS base_url + ключ).
curl https://tokenos.workforceai.ru/v1/chat/completions \
-H "Authorization: Bearer tok_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"model": "local/qwen2.5:7b-instruct", "temperature": 0,
"messages": [{"role": "user", "content": "Привет!"}]}'from openai import OpenAI
client = OpenAI(base_url="https://tokenos.workforceai.ru/v1", api_key="tok_ВАШ_КЛЮЧ")
r = client.chat.completions.create(
model="local/qwen2.5:7b-instruct", # бесплатная модель, работает сразу после регистрации
# model="giga/GigaChat-2-Pro", # после подключения своего GigaChat в кабинете: <имя подключения>/<модель>
messages=[{"role": "user", "content": "Сколько дней на возврат товара?"}],
temperature=0, # детерминированные запросы попадают в кэш
)
print(r.choices[0].message.content, r.usage)import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://tokenos.workforceai.ru/v1", apiKey: process.env.TOKENOS_KEY });
const stream = await client.chat.completions.create({
model: "local/qwen2.5:7b-instruct", stream: true,
messages: [{ role: "user", content: "Расскажи коротко о TokenOS" }],
});
for await (const chunk of stream) process.stdout.write(chunk.choices[0]?.delta?.content ?? "");2. Модели
Имя модели — <подключение>/<модель>. Подключение — имя, которое вы дали провайдеру в кабинете (например giga). Список доступных: GET /v1/models.
- GigaChat — проверено:
GigaChat-2,GigaChat-2-Pro,GigaChat-2-Max. Tools и response_format через TokenOS пока не поддерживаются (вернётся 400). - Локальные — проверено:
local/qwen2.5:7b-instruct,local/qwen2.5:1.5b-instruct. Цена за токен — 0 ₽ (экономия показывается в токенах). - OpenAI-совместимые (OpenAI, DeepSeek, OpenRouter, RouterAI, ProxyAPI, ваш vLLM) — совместимо по протоколу, не проверено с реальным ключом. Цена неизвестна → экономия в рублях: «Недостаточно данных».
- Claude Code / Codex — интеграция не проверена. Claude Code требует Anthropic Messages API, которого пока нет.
3. Режимы оптимизации
| Режим | Что делает | Потери |
|---|---|---|
| safe | Запрос уходит без изменений. Точный кэш детерминированных запросов. | нет |
| balanced | Дословные повторы ≥ 300 символов заменяются ссылкой на первое вхождение — только в результатах инструментов (role: tool) и в ролях из заголовка X-TokenOS-Dedupe-Roles. | нет (дубли) |
| aggressive | Плюс: результаты инструментов длиннее 2000 символов сокращаются (начало и конец сохраняются), в диалоге длиннее 10 сообщений остаются системные, первое и последние 8. | да |
GigaChat: контекст не меняется ни в каком режиме — провайдер сам кэширует начало промпта, и в контрольном прогоне 23.10.2026 удаление повторов уменьшило входной текст на 37%, но увеличило оплачиваемые токены на 33%. Для GigaChat работают точный кэш и (по согласию) маршрутизация; в ответе — tokenos.notes: context_skipped.
Всегда: системные сообщения и последнее сообщение пользователя не меняются; вызовы инструментов и их ответы сохраняются парами.
4. Заголовки
X-TokenOS-Mode: safe|balanced|aggressive— режим для одного запроса (по умолчанию — из настроек аккаунта).X-TokenOS-Cache: on|off—offотключает кэш;onразрешает кэш для недетерминированных запросов (temperature > 0) — на ваш риск.X-TokenOS-Dedupe-Roles: user,assistant— разрешить удаление дословных повторов в этих ролях (BALANCED/AGGRESSIVE).X-TokenOS-Routing: pin— запретить маршрутизацию для этого запроса (критичные запросы).Idempotency-Key: <до 200 символов>— повтор с тем же ключом вернёт сохранённый ответ без нового вызова и списания.- Ответ:
X-TokenOS-Request-Id,X-TokenOS-Cache: hit|miss|bypass,X-TokenOS-Model; в JSON — полеtokenosс применёнными оптимизациями.
5. Маршрутизация
Выключена по умолчанию. Если вы включили её в настройках и режим BALANCED или AGGRESSIVE, явно простые запросы (короткие, без инструментов, без JSON-формата, без признаков анализа/кода) уходят в более дешёвую модель того же провайдера: GigaChat-2-Max/Pro → GigaChat-2, qwen 7B → 1.5B. При ошибке дешёвой модели запрос повторяется в исходной.
6. Как считается экономия
- Измеренная — ответ из кэша; стоимость оригинального вызова записана по фактическим токенам. Провайдер не вызывался.
- Оценочная — запрос выполнен, но базовая стоимость рассчитана: входные токены × (длина исходного текста / длина отправленного) или цена запрошенной модели × фактические токены при маршрутизации.
- Потенциальная — простые запросы, которые можно было бы удешевить маршрутизацией (если она выключена).
- Дополнительные расходы — если оптимизированный ответ не прошёл проверку (невалидный JSON) и был повторён исходный запрос, стоимость первой попытки добавляется к фактической — экономия может быть отрицательной.
- Нет цены или токенов — «Недостаточно данных». Цены GigaChat — пакетные тарифы Сбера для физлиц с 01.09.2026 (Lite 65 ₽, Pro 500 ₽, Max 650 ₽ за 1 млн токенов).
GET /v1/usage?days=30 и GET /v1/savings?days=30 возвращают ту же статистику, что и кабинет.
7. Лимиты и ошибки
- 120 запросов в минуту на ключ; тело запроса до 1 МБ; до 400 сообщений; только
n=1. - Бесплатные локальные модели (
local/…): до 16 000 символов контекста (иначе400 context_too_long); ответ до 1024 токенов (большийmax_tokensуменьшается, в ответе —tokenos.notes: max_tokens_clamped); до 2 одновременных запросов на аккаунт (429 local_concurrency_limit); при полной загрузке GPU —503 local_capacityсRetry-After; 300 запросов в день на аккаунт. Запросы к вашим провайдерам (GigaChat и др.) этими лимитами не ограничиваются. - Месячный лимит бюджета в кабинете →
402 budget_exceeded. - Защита от зацикливания агентов: более 8 одинаковых некэшируемых запросов за 2 минуты →
429 loop_detected(отключается в настройках). - Ошибки провайдера: 5xx/429/таймаут — до 2 повторов с паузой, 4xx не повторяются. Формат ошибок — как у OpenAI:
{"error": {"code", "message", "request_id"}}.
8. Данные
Тексты запросов и ответов не сохраняются в истории запросов. В историю пишутся модель, токены, стоимость, задержка и типы оптимизаций. Ответы, подходящие для кэша, хранятся до 7 дней в Redis в пространстве вашего аккаунта (кэш можно выключить). Ключи провайдеров зашифрованы.