← Все статьи
Новости12 мин чтения

Together AI API: совместимый запрос, модели, цена и лимиты

Как перенести OpenAI-совместимый клиент на Together AI: base URL, ключ, модель, параметры, форма ответа, динамические лимиты и цена на 2026-07-18.

Обложка статьи: Together AI API: совместимый запрос, модели, цена и лимиты

Тот же JSON может пройти endpoint и всё равно встретить другой лимит, модель или расчёт. Твой OpenAI-клиент отправит валидный запрос на Together AI, получит 200 OK, и по этому ответу легко решить, что миграция закончена. По документации Together AI - не закончена.

Совместимость на уровне SDK гарантирует форму запроса, а не идентичную эксплуатацию. Одинаковый синтаксис говорит только о том, что тело запроса примут. Он ничего не говорит о том, какая модель отвечает, по какой цене, под каким лимитом и с какой формой ответа. Эти четыре вещи и есть эксплуатационный контракт, который надо проверить отдельно.

Дальше идёт метод. Один контрольный запрос заполняет паспорт по схеме «клиент - модель - параметр - условие» и превращает предположение о совместимости в карту: что перенеслось как есть, а что требует адаптации. Паспорт заполняешь ты сам на своём аккаунте; в этой статье он ещё не выполнен, здесь собраны документированные правила, по которым его сверяют.

Платите в рублях за AI-модели без наценки на токены через provod.ai

Что реально меняется при переносе на Together AI?

Минимально - две строки. OpenAI-совместимый endpoint Together AI живёт по адресу https://api.together.ai/v1 и аутентифицируется ключом Together (переменная TOGETHER_API_KEY), так что существующий код на OpenAI SDK работает после смены base URL и ключа (документация Together AI, доступ 2026-07-18). Тот самый together ai api key берётся в личном кабинете и кладётся в переменную окружения - отдельного OAuth-обмена или заголовка здесь нет.

import os from openai import OpenAI

client = OpenAI( api\_key=os.environ["TOGETHER\_API\_KEY"], base\_url="https://api.together.ai/v1", )

resp = client.chat.completions.create( model="meta-llama/Llama-3.3-70B-Instruct-Turbo", messages=[{"role": "user", "content": "ping"}], )

Обрати внимание на строку model. Идентификаторы моделей у Together AI пространственные, с префиксом провайдера - например meta-llama/Llama-3.3-70B-Instruct-Turbo, а не плоское имя в стиле OpenAI (документация Together AI, 2026-07-18). Значит, контрольный запрос обязан подставить конкретную строку модели Together, и первое же расхождение с исходным клиентом - именно здесь.

Побочный плюс: раз переезд стоит две строки, тем же клиентом опрашивается не один endpoint, а сколько угодно. Если параллельно с Together AI тебе нужен маршрут с оплатой из России, тот же паспорт заполняется для provod.ai - меняются те же две строки.

Схема переноса OpenAI-клиента на Together AI с четырьмя точками сверки: модель, параметры, форма ответа и лимит.

Одинаковый JSON - это ещё не миграция

Совпадает форма запроса; набор доступных возможностей совпадает не полностью. На Together AI полностью совместимы с OpenAI SDK chat completions, embeddings, генерация изображений, синтез речи, распознавание и перевод речи, а также листинг моделей. А вот Assistants/Threads/Runs, endpoint модерации (Moderation), файн-тюнинг в формате OpenAI и батч-обработка в формате OpenAI явно не поддерживаются и требуют адаптации (документация Together AI, 2026-07-18).

Это первое место, где «совместимый» и «переносимый» расходятся. Клиент, который завязан на Assistants или на батч в формате OpenAI, пройдёт компиляцию и упадёт на эксплуатации, потому что нужного маршрута на той стороне просто нет. Одинаковый JSON тела запроса тут не спасает: спасает сверка того, какие эндпоинты твой код реально вызывает.

Вторая ловушка - форма ответа. У reasoning-моделей учёт кэшированных токенов вложен в usage.prompt_tokens_details.cached_tokens, а у остальных моделей то же значение лежит на верхнем уровне; вывод reasoning-моделей приходит в отдельном поле reasoning, а не в структуре, к которой привык клиент OpenAI (документация Together AI, 2026-07-18). Оба различия требуют защитного парсинга при переносе - иначе клиент, который жёстко читает одну форму, отдаст None там, где раньше было число.

Матрица параметров запроса Together AI: недоступные, отклоняемые, best-effort и молча игнорируемые.

Какие параметры молча ломаются?

Хуже явной ошибки только тихий пропуск. Часть параметров OpenAI на Together AI игнорируется, недоступна или ведёт себя иначе: logit_bias недоступен на большинстве моделей, n (несколько завершений) отклоняется некоторыми моделями, seed даёт только best-effort детерминизм, а service_tier, store, metadata и prediction принимаются, но молча игнорируются (документация Together AI, 2026-07-18). Каждый пункт - это отдельная строка адаптации в паспорте.

Ключевое слово - «молча». Если твой пайплайн полагается на seed для воспроизводимости или на store для последующего чтения, ответ придёт валидный, а поведение будет другим. Тест «запрос прошёл» это не поймает. Поймает только сверка ожидаемого эффекта параметра с фактическим.

Если свести все расхождения в одно место, получается решающая таблица переноса. Каждая строка - то, что ты берёшь из исходного клиента, и то, что с ней делает Together AI.

Элемент клиентаЧто документирует Together AI (2026-07-18)Действие для паспорта
base_url и ключсменить на https://api.together.ai/v1 и TOGETHER_API_KEYзафиксировать оба значения
modelпространственный ID, напр. meta-llama/Llama-3.3-70B-Instruct-Turboзаменить плоское имя OpenAI
logit_biasнедоступен на большинстве моделейубрать или проверить на точной модели
nотклоняется частью моделейне полагаться на несколько завершений
seedbest-effort детерминизмне считать результат воспроизводимым
service_tier, store, metadata, predictionпринимаются, но молча игнорируютсяне ждать эффекта
usage.*cached_tokensвложен по-разному у reasoning и обычных моделейзащитный парсинг
поле reasoningотдельное поле вместо структуры OpenAIзащитный парсинг
Assistants/Threads/Runs, Moderation, файн-тюнинг, батч (формат OpenAI)не поддерживаютсятребует замены маршрута

Таблица собрана по документации и служит шаблоном для одного прогона на одной модели. Together описывает часть поведения формулировкой «на некоторых моделях», поэтому проверка одной модели не устанавливает поведение всего каталога. Это и есть граница, за которую паспорт не заходит.

Модель, цена и лимит: что фиксировать?

Каждое число в этом разделе действительно на дату проверки и только на неё. meta-llama/Llama-3.3-70B-Instruct-Turbo числится актуальной serverless-моделью с контекстным окном 131 072 токена и ценой $1.04 за 1M токенов - по странице цен и каталогу моделей это единая ставка, покрывающая вход и выход, проверено 2026-07-18 (Together AI). Цена по семействам разнится сильно: DeepSeek-V4-Pro на той же странице - $1.74 за 1M входных и $3.48 за 1M выходных токенов, с отдельно сниженной ставкой на кэшированный вход (Together AI, 2026-07-18). Вывод простой: цену и кэш-скидку проверяют по точному ID модели, а не по семейству.

Оговорка по честности. Каталог и тарифы Together меняются часто, поэтому долларовые значения выше - снимок страницы цен на 2026-07-18, который стоит перепроверить руками перед тем, как закладывать цифру в расчёт интеграции.

С лимитами ещё жёстче. Together AI не публикует фиксированных дефолтных RPM/TPM: лимиты динамические, на организацию и на модель, они масштабируются под недавний успешный трафик аккаунта и живую ёмкость модели (документация Together AI, 2026-07-18). Значит, лимит, увиденный в одном контрольном прогоне, - не гарантированный фиксированный контракт, а замер для конкретного аккаунта в конкретный момент.

Что при этом реально стабильно - набор сигналов. Ограничение приходит как 429 Too Many Requests с error_type: "dynamic_request_limited" (по числу запросов) или "dynamic_token_limited" (по токенам); заголовок x-ratelimit-reset сообщает рекомендованный интервал повтора в секундах, а нехватка ёмкости в пределах лимита возвращает 503 Service Unavailable, а не 429 (документация Together AI, 2026-07-18). Именно эти сигналы паспорт логирует - они переносимы между прогонами, в отличие от самих чисел лимита.

Здесь же уместна честная рыночная развилка. Долларовый прайс Together предполагает, что тебе есть чем за него заплатить, и для интеграции из России это отдельная задача. Её решает provod.ai — российский аналог OpenRouter: отдельный совместимый маршрут, не Together AI. Клиент подключается той же сменой base_url и ключа - поддерживаются как OpenAI-, так и Anthropic-совместимые клиенты; баланс единый и рублёвый, пополняется картой РФ, СБП или по счёту, без VPN и зарубежных карт; модели идут по официальным ценам провайдеров, без наценки provod.ai. Проверять этот маршрут стоит тем же паспортом и по тем же четырём полям.

Столбчатая диаграмма цен Together AI: Llama-3.3-70B единая ставка против входа и выхода DeepSeek-V4-Pro.

Паспорт контрольного запроса: четыре оси

Минимальная форма запроса известна из quickstart Together: model, messages с role и content, опционально stream - это ровно те поля, которые паспорт записывает, чтобы сравнить с исходным телом запроса OpenAI-клиента (документация Together AI, 2026-07-18). По жанру паспорт ближе к листу сверки одного прогона, чем к отчёту о миграции.

Заполняется он по четырём осям. Клиент: какой SDK, какой base_url, какой ключ. Модель: точный пространственный ID и его контекст. Параметр: какие поля исходного запроса ушли как есть, какие отклонены, какие молча проигнорированы. Условие: цена по этому ID на дату, статус лимита (429 с типом dynamic_request_limited или dynamic_token_limited, либо 503) и значение x-ratelimit-reset, если оно пришло.

Логика заполнения простая, и её стоит держать в коде рядом с прогоном.

passport = { "client": "openai-sdk", "base\_url": "https://api.together.ai/v1", "model": "meta-llama/Llama-3.3-70B-Instruct-Turbo", "params\_sent": ["messages", "stream", "seed"], "params\_dropped": [],        # заполняется по факту прогона "price\_per\_1m": None,        # сверяется со страницей цен на дату "limit\_signal": None,        # 429 dynamic\_\* / 503 / None "ratelimit\_reset\_s": None,   # из заголовка x-ratelimit-reset }

Второй маршрут заполняет ту же структуру - меняется только пара строк инициализации:

# тот же клиент, отдельный совместимый маршрут client = OpenAI( api\_key=os.environ["PROVOD\_API\_KEY"], base\_url="https://api.provod.ai/v1", )

На выходе получается карта допущений в две колонки. Слева переносимое: смена base_url и ключа, chat completions, embeddings, изображения, речь, листинг моделей. Справа требующее адаптации: пространственный ID модели, поведение logit_bias/n/seed, молча игнорируемые service_tier/store/metadata/prediction, защитный разбор cached_tokens и reasoning, замена Assistants/Moderation/файн-тюнинга/батча и динамический лимит с его сигналами. Совпадение синтаксиса подтверждает ровно тот участок переноса, который ты проверил, - и паспорт делает эту границу доказуемой.

Двухколоночная карта допущений: что переносится на Together AI как есть и что требует адаптации.

Чего этот метод не решает

Один контрольный прогон не покрывает весь каталог. Он фиксирует модель, цену и лимитный контракт для одной модели на дату проверки - и всё. Поведение n, seed или logit_bias для другой модели надо проверять отдельным прогоном, потому что документация прямо оговаривает вариативность «по некоторым моделям».

Он не превращает динамический лимит в фиксированный. Число, снятое на твоём аккаунте, нельзя обобщить на другой аккаунт или использовать после даты проверки - лимит масштабируется под трафик и живую ёмкость. Паспорт хранит сигналы: 429/503, тип ошибки, x-ratelimit-reset. Обещания ёмкости в нём нет.

Он не заменяет живую страницу цен. Тарифы и каталог Together меняются часто; долларовые значения из паспорта верны на дату прогона и требуют ручной сверки перед публикацией интеграции.

И он не отменяет работу с неподдерживаемыми эндпоинтами. Если клиент завязан на Assistants, Moderation, файн-тюнинг или батч в формате OpenAI, паспорт лишь покажет разрыв - закрывать его придётся переписыванием маршрута, а не сменой base URL.

Та же оговорка про provod.ai как второй маршрут. Это совместимый API-доступ, который проверяется тем же паспортом: он не даёт приватную или on-prem инфраструктуру, не открывает функции, доступные только по подписке самого вендора, и не выполняет за тебя интеграцию.

Итог и следующий шаг

Решение здесь одно: переносить код после карты подтверждённых допущений, а не по факту 200 OK. Совместимый endpoint обещает синтаксис; тарифную ставку, доступность модели и поведение под лимитом он не подтверждает. Пока паспорт «клиент - модель - параметр - условие» не заполнен на твоём аккаунте и на актуальную дату, перенос остаётся рабочей гипотезой. Закрывает её один контрольный прогон.

FAQ

Достаточно ли сменить base URL и ключ, чтобы код заработал?

По документации Together AI существующий код на OpenAI SDK работает после смены base URL на https://api.together.ai/v1 и ключа на TOGETHER_API_KEY. Заработает запрос - но модель, параметры, форма ответа и лимит требуют отдельной сверки.

Где брать точный ID модели?

В каталоге serverless-моделей Together. Имена пространственные, с префиксом провайдера, например meta-llama/Llama-3.3-70B-Instruct-Turbo. Плоское имя OpenAI сюда не подставится.

Почему запрос проходит, а параметр не работает?

Часть параметров (service_tier, store, metadata, prediction) Together AI принимает, но молча игнорирует; seed даёт лишь best-effort детерминизм. Ответ валидный, эффект другой - поэтому сверяют не факт ответа, а ожидаемое поведение параметра.

Как понять, что упёрся в лимит?

По 429 Too Many Requests с error_type: "dynamic_request_limited" или "dynamic_token_limited" и заголовку x-ratelimit-reset. Нехватка ёмкости в пределах лимита - это 503, а не 429.

С какой страницы начинать сверку?

С официальной документации по OpenAI-совместимости: именно там описано, что api together ai принимает, что отклоняет и что игнорирует молча. Чужие пересказы отстают от неё на несколько правок каталога.

provod.ai: тот же совместимый клиент на российском маршруте, рублёвый баланс, модели без наценки.

provod.ai — единая основа для AI-функций бизнеса

Стройте ассистентов, поиск, автоматизацию и медиасценарии поверх одного совместимого слоя: команда быстрее развивает продукт и не поддерживает отдельную инфраструктуру для каждого поставщика.

В одном каталоге — актуальные модели для текста и медиа: GPT от OpenAI, Claude от Anthropic, Gemini от Google, Grok от xAI, DeepSeek, Qwen, GLM, Kimi и MiniMax; для изображений — Nano Banana 2 Pro и GPT Image; для видео — последние версии Seedance, Kling, Veo и Google Omni. Также доступны модели для reasoning, поиска, документов, эмбеддингов, музыки и аудио.

Фундамент остаётся экономически прозрачным: цены соответствуют официальным тарифам 1:1, без собственной наценки provod.ai; оплата в рублях и документы упрощают работу компании.

Подключите AI к своему продукту: форма регистрации · цены на модели · защита данных по 152-ФЗ · API и интеграции

Источники