TokenOS

Документация

Подключение TokenOS

TokenOS — OpenAI-совместимый API. Если ваш код уже работает с OpenAI SDK, достаточно поменять base_url и ключ.

1. Быстрый старт

  1. Зарегистрируйтесь и создайте API-ключ TokenOS (tok_…). Ключ показывается один раз.
  2. Сразу доступны локальные модели local/qwen2.5:7b-instruct и local/qwen2.5:1.5b-instruct (300 запросов в день). Это песочница для проверки интеграции и оптимизаций: небольшая модель может ошибаться в фактах — для рабочих задач подключите своего провайдера.
  3. Чтобы работать со своим провайдером, добавьте подключение в разделе «Провайдеры»: 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.

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. Заголовки

5. Маршрутизация

Выключена по умолчанию. Если вы включили её в настройках и режим BALANCED или AGGRESSIVE, явно простые запросы (короткие, без инструментов, без JSON-формата, без признаков анализа/кода) уходят в более дешёвую модель того же провайдера: GigaChat-2-Max/Pro → GigaChat-2, qwen 7B → 1.5B. При ошибке дешёвой модели запрос повторяется в исходной.

6. Как считается экономия

GET /v1/usage?days=30 и GET /v1/savings?days=30 возвращают ту же статистику, что и кабинет.

7. Лимиты и ошибки

8. Данные

Тексты запросов и ответов не сохраняются в истории запросов. В историю пишутся модель, токены, стоимость, задержка и типы оптимизаций. Ответы, подходящие для кэша, хранятся до 7 дней в Redis в пространстве вашего аккаунта (кэш можно выключить). Ключи провайдеров зашифрованы.