Перейти к основному содержимому

ИИ-модели

Единый OpenAI-совместимый API к языковым моделям. Подставляете ключ в любой клиент, который умеет ходить в OpenAI, — и платите за токены рублями с баланса аккаунта. Отдельной подписки нет.

Раздел в панели — ИИ-модели.

Быстрый старт​

  1. Панель → ИИ-модели → Создать ключ. Ключ показывается один раз: мы храним только его хеш и отдать повторно не можем.
  2. Подставьте адрес и ключ в свой клиент.
curl https://ai.tatnet.cloud/v1/chat/completions \
-H "Authorization: Bearer $TATNET_AI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5.2",
"messages": [{"role": "user", "content": "Привет"}]
}'

С официальным SDK меняется только base URL:

from openai import OpenAI

client = OpenAI(
base_url="https://ai.tatnet.cloud/v1",
api_key="tnai_live_…",
)
answer = client.chat.completions.create(
model="glm-5.2",
messages=[{"role": "user", "content": "Привет"}],
)

Потоковый режим ("stream": true) работает как у OpenAI, включая stream_options.include_usage.

Claude Code и Anthropic SDK​

Тот же ключ работает и в формате Anthropic Messages API — POST /v1/messages. Поэтому наши модели можно подключить к Claude Code и к любому клиенту на Anthropic SDK.

Claude Code настраивается переменными окружения:

export ANTHROPIC_BASE_URL=https://ai.tatnet.cloud
export ANTHROPIC_AUTH_TOKEN=tnai_live_…
export ANTHROPIC_MODEL=glm-5.2
# Claude Code ходит и в «быструю» модель — укажите нашу, иначе он спросит haiku:
export ANTHROPIC_DEFAULT_HAIKU_MODEL=glm-5.2
claude

Проверено на glm-5.2, kimi-k3 и deepseek-v4-pro: чтение и правка файлов, вызов инструментов, размышления.

В Python:

import anthropic

client = anthropic.Anthropic(base_url="https://ai.tatnet.cloud", api_key="tnai_live_…")
message = client.messages.create(
model="kimi-k3",
max_tokens=2000,
messages=[{"role": "user", "content": "Привет"}],
)

Ключ принимается в заголовке x-api-key или Authorization: Bearer. Цена и списание те же, что у OpenAI-формата.

Чем этот вход отличается от API Anthropic:

  • Размышления. thinking переводится в уровень размышлений модели: бюджет до 4096 токенов — низкий, до 16 384 — средний, больше — высокий; {"type": "disabled"} размышления выключает. Размышления приходят обычными блоками thinking, но без подписи.
  • Серверных инструментов Anthropic нет (веб-поиск, исполнение кода и т. п.). Такие инструменты из запроса убираются, модель их не видит. mcp_servers и container отклоняются.
  • Документы (PDF) не принимаются, как и в OpenAI-формате. Текст и картинки — да, в том числе картинки в результатах инструментов.
  • Кеш промпта включается сам, если модель его поддерживает. Метки cache_control не нужны и ни на что не влияют. Прочитанное из кеша приходит в usage.cache_read_input_tokens и стоит по ставке чтения кеша.
  • /v1/messages/count_tokens возвращает оценку (заголовок X-Tatnet-Token-Count: estimate), а не точный подсчёт токенизатором модели.
  • Ошибки приходят в форме Anthropic: {"type": "error", "error": {...}}. Коды те же, что в таблице ниже; у 402 тип billing_error.

Codex CLI и Responses API​

Есть и вход в формате OpenAI Responses API: POST /v1/responses. Через него работает Codex CLI. Настройка — в ~/.codex/config.toml:

model = "glm-5.2"
model_provider = "tatnet"

[model_providers.tatnet]
name = "TatNet"
base_url = "https://ai.tatnet.cloud/v1"
env_key = "TATNET_AI_KEY"
wire_api = "responses"
export TATNET_AI_KEY=tnai_live_…
codex

Проверено на glm-5.2, kimi-k3 и deepseek-v4-pro: чтение и правка файлов, вызов инструментов. Codex предупредит, что не знает метаданных модели, — на работу это не влияет.

Особенности этого входа:

  • Ответы не хранятся. previous_response_id не поддерживается: передавайте историю целиком (store: false). Codex так и делает.
  • Потолок вывода по умолчанию — 32 000 токенов, если max_output_tokens не задан. Codex этот параметр не передаёт, поэтому для проверки средств считается именно этот потолок. Выше предела модели из таблицы ответ всё равно не будет.
  • Размышления приходят элементом reasoning: текст — в summary. Верните элемент в следующем запросе, и модель продолжит с учётом своих размышлений.
  • Встроенные инструменты OpenAI (веб-поиск, поиск по файлам и т. п.) из запроса убираются. Свои функции и инструменты со свободным вводом (type: custom) работают.
  • Ошибки приходят в обычной форме OpenAI, как у /v1/chat/completions.

Модели​

Модель (model)ПроизводительУмеетОкно / вывод доКогда брать
glm-5.3Z.AIинструменты, размышления1M / 131Kновый флагман Z.AI: код и длинные агентные задачи
glm-5.2Z.AIинструменты1M / 128Kфлагман прошлого поколения: код, агенты, длинный контекст
kimi-k3Moonshotкартинки, инструменты, размышления1M / 262Kсамые сложные задачи и код, когда цена вторична
qwen3.8-maxQwenкартинки, инструменты, размышления1M / 131Kфлагман Qwen: рассуждения, код, изображения
deepseek-v4-proDeepSeekинструменты, размышления1M / 393Kсложные задачи, где нужна сильная модель
mimo-v2.6-proXiaomiкартинки, инструменты, размышления1M / 131Kсильная модель по цене лёгкой
minimax-m3MiniMaxинструменты, размышления512K / 512Kагентные задачи и код, очень длинный вывод
qwen3-coder-nextQwenинструменты262K / 65Kкод и агентные сценарии, быстрый ответ без размышлений
glm-5v-turboZ.AIкартинки, инструменты, размышления203K / 131Kскриншоты, схемы, документы на входе
deepseek-v4.1-flashDeepSeekкартинки, инструменты, размышления1M / 393Kдешёвая быстрая модель, понимает изображения
mimo-v2.6-flashXiaomiкартинки, инструменты, размышления1M / 131Kсамая дешёвая модель каталога

OpenAI и Google Gemini​

Модели OpenAI и Gemini мы получаем у вендоров напрямую. Имя в model совпадает с именем у вендора: код, написанный под API OpenAI или Gemini, достаточно перенаправить на наш адрес.

Модели (model)ПроизводительУмеетОкно / вывод до
gpt-6-astra, gpt-6-sol, gpt-6-lunaOpenAIкартинки, инструменты, размышления1,05M / 128K
gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-lunaOpenAIкартинки, инструменты, размышления1,05M / 128K
gpt-5.5, gpt-5.4OpenAIкартинки, инструменты, размышления272K / 128K
gpt-5.4-mini, gpt-5.4-nano, gpt-5.2, gpt-5.1, gpt-5, gpt-5-mini, gpt-5-nanoOpenAIкартинки, инструменты, размышления400K / 128K
gpt-4.1, gpt-4.1-mini, gpt-4.1-nanoOpenAIкартинки, инструменты1M / 32K
gpt-4o, gpt-4o-miniOpenAIкартинки, инструменты128K / 16K
o3, o4-miniOpenAIкартинки, инструменты, размышления200K / 100K
o3-miniOpenAIинструменты, размышления200K / 100K
gemini-3.8-flash, gemini-3.7-flash, gemini-3.6-flash, gemini-3.5-flashGoogleкартинки, инструменты, размышления1M / 65K
gemini-3.5-flash-lite, gemini-3.1-flash-liteGoogleкартинки, инструменты, размышления1M / 65K
gemini-3.1-pro-previewGoogleкартинки, инструменты, размышления1M / 65K

Модели OpenAI, которые вендор отдаёт только через Responses API (gpt-5.5-pro и остальные -pro, gpt-5.3-codex, o1-pro, o3-pro), в каталоге не предлагаются. Модели, которые рисуют картинки, тоже.

У моделей OpenAI с размышлениями (gpt-5*, gpt-6*, o*) параметры temperature, top_p, presence_penalty и frequency_penalty вендор фиксирует; присланные значения отбрасываются. Потолок вывода можно передавать как max_tokens: мы переименуем его в max_completion_tokens, как требует OpenAI.

Цены — в рублях за миллион токенов входа, чтения кеша и вывода — смотрите в панели: ИИ-модели → каталог. GET /v1/models цен не отдаёт.

В запросе пишите значение из первой колонки. Тот же список с умениями и пределами отдаёт API:

curl https://ai.tatnet.cloud/v1/models
{"id": "glm-5v-turbo", "object": "model", "owned_by": "tatnet", "context_window": 202752,
"max_output_tokens": 131072,
"capabilities": {"tools": true, "vision": true, "reasoning": true}}

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

Картинки на входе​

Картинки понимают модели с отметкой «картинки»: glm-5v-turbo, kimi-k3, qwen3.8-max, mimo-v2.6-pro, mimo-v2.6-flash, deepseek-v4.1-flash. Передаются как у OpenAI — частью content с типом image_url (ссылкой или data:-URI):

{"model": "glm-5v-turbo", "messages": [{"role": "user", "content": [
{"type": "text", "text": "Что на скриншоте?"},
{"type": "image_url", "image_url": {"url": "https://example.com/screen.png"}}
]}]}

Картинка тарифицируется как входные токены. Их число зависит от размера и модели: у glm-5v-turbo около тысячи токенов у 1024×768 и около шести тысяч у 4K.

Файлы и аудио пока не принимаются

В content поддерживаются части text и image_url. Запрос с файлом (type: "file", например PDF) или аудио (input_audio) получает 400 unsupported_content сразу, без обращения к модели и без списания. Текст из PDF передавайте текстом, страницы — картинками.

Эмбеддинги​

Модель qwen3-embedding-8b (Qwen3 Embedding 8B) превращает текст в вектор для поиска, RAG и кластеризации. Многоязычная, окно — 32 тысячи токенов, вектор — 4096 чисел. Ручка — POST https://ai.tatnet.cloud/v1/embeddings, формат как у OpenAI:

curl https://ai.tatnet.cloud/v1/embeddings \
-H "Authorization: Bearer $TATNET_AI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-embedding-8b",
"input": ["Казань — столица Татарстана.", "Как добраться до Кремля?"]
}'
from openai import OpenAI

client = OpenAI(base_url="https://ai.tatnet.cloud/v1", api_key="tnai_live_…")
result = client.embeddings.create(
model="qwen3-embedding-8b",
input=["Казань — столица Татарстана.", "Как добраться до Кремля?"],
dimensions=1024, # необязательно: укоротить вектор, по умолчанию 4096
)
vectors = [item.embedding for item in result.data]

Поля запроса:

ПолеЧто
inputстрока или массив строк — несколько текстов за один запрос
dimensionsнеобязательно: длина вектора меньше 4096 — экономит место в базе векторов
encoding_formatfloat (по умолчанию) или base64

Платится только вход — число токенов во всех текстах запроса, выхода и кеша у эмбеддингов нет. Потокового режима нет: ответ приходит целиком, со всеми векторами и usage.prompt_tokens.

Веб-поиск​

Плагин web даёт модели свежие результаты поиска: перед ответом мы ищем в интернете, кладём найденные фрагменты страниц в контекст, и модель отвечает со ссылками на источники. Работает с любой чатовой моделью каталога — и с открытыми, и с OpenAI и Gemini. Формат — как у OpenRouter: плагин в поле plugins или суффикс :online у модели.

curl https://ai.tatnet.cloud/v1/chat/completions \
-H "Authorization: Bearer $TATNET_AI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5.2",
"plugins": [{"id": "web", "max_results": 5}],
"messages": [{"role": "user", "content": "Что нового в Go 1.26?"}]
}'

То же через суффикс: "model": "glm-5.2:online" — поиск с параметрами по умолчанию.

from openai import OpenAI

client = OpenAI(base_url="https://ai.tatnet.cloud/v1", api_key="tnai_live_…")
response = client.chat.completions.create(
model="glm-5.2",
messages=[{"role": "user", "content": "Что нового в Go 1.26?"}],
extra_body={"plugins": [{"id": "web", "max_results": 5}]},
)
print(response.choices[0].message.content)

Параметры плагина:

ПолеЧто
id"web"
max_resultsсколько результатов поиска взять, 1–10, по умолчанию 5
search_promptнеобязательно: свой текст, которым выдача подаётся модели

Ссылки на источники приходят в сообщении ассистента, в annotations — как у OpenAI и OpenRouter:

{
"role": "assistant",
"content": "В Go 1.26 новый сборщик мусора …",
"annotations": [
{
"type": "url_citation",
"url_citation": {
"url": "https://go.dev/doc/go1.26",
"title": "Go 1.26 Release Notes"
}
}
]
}

Что важно знать:

  • Плагин работает только в /v1/chat/completions. В /v1/messages, /v1/responses и /v1/embeddings его нет.
  • Поиск идёт через Яндекс. Порядок результатов сохраняется таким, каким его вернул поиск: берутся первые max_results.
  • Искомое — последнее сообщение пользователя.
  • Не удалось выполнить поиск — запрос завершается ошибкой web_search_failed, модель не вызывается, поиск не оплачивается. Ответ «без поиска» вместо отказа мы не отдаём: вы бы не узнали, что источников не было.

Сколько стоит: цена за один поиск (см. ИИ-модели → Каталог, карточка «Веб-поиск») плюс найденный текст — он добавляется ко входу модели и оплачивается по её тарифу входа. Обычно это 4–6 тысяч токенов на 5 результатов. Поиски видны отдельной строкой во вкладке Расход.

Размышления​

У моделей с отметкой «размышления» часть вывода — рассуждение перед ответом. Эти токены тарифицируются по ставке вывода и расходуются из того же max_tokens, что и ответ: если потолок мал, модель может истратить его на рассуждение и не успеть ответить (finish_reason: "length"). Для сложных задач задавайте max_tokens с запасом.

Размышлениями управляет стандартный параметр reasoning_effort:

МодельКак отвечает на reasoning_effort
deepseek-v4-pro"none" выключает размышления; остальные значения их включают, но на объём почти не влияют
glm-5v-turbo"none" выключает; "minimal" … "high" заметно меняют объём
kimi-k3"none" выключает; "low" и "high" заметно меняют объём (в замере — втрое)
mimo-v2.6-pro, mimo-v2.6-flash, minimax-m3, deepseek-v4.1-flash"none" выключает; "low" … "high" меняют объём слабо
glm-5.3, qwen3.8-maxвыключить нельзя: "none" даёт ошибку 400; "low" — самый короткий режим
glm-5.2, qwen3-coder-nextразмышлений нет, параметр ничего не меняет
gpt-6-sol, gpt-6-luna, gpt-5.6*, gpt-5.5, gpt-5.4*, gpt-5.2, gpt-5.1"none" выключает; "minimal" … "high" меняют объём
gpt-5, gpt-5-mini, gpt-5-nano, o3, o4-mini, o3-miniвыключить нельзя: "none" даёт ошибку 400; "minimal" (у o* — "low") — самый короткий режим
gpt-6-astraвыключить нельзя: "none" даёт ошибку 400; "low" — самый короткий режим
gemini-3.8-flash, gemini-3.7-flash, gemini-3.1-pro-previewвыключить нельзя (у моделей Gemini 3 это ограничение вендора): "none" даёт ошибку 400; "low" — самый короткий режим
gemini-3.6-flash, gemini-3.5-flash, gemini-3.5-flash-lite, gemini-3.1-flash-liteвыключить нельзя: "none" даёт ошибку 400; "minimal" — самый короткий режим
gpt-4.1*, gpt-4o*размышлений нет, параметр ничего не меняет

Выключенные размышления дешевле, но на задачах с расчётом заметно чаще ошибаются: в нашем замере на простой задаче про время в пути все четыре модели, ответившие с "none", дали неверный ответ, а с размышлениями — верный.

{"model": "deepseek-v4.1-flash", "reasoning_effort": "none",
"messages": [{"role": "user", "content": "Переведи на английский: привет"}]}
Размышления у DeepSeek включены по умолчанию

На непростом вопросе они способны занять весь потолок вывода — а без max_tokens он равен 4096. Для коротких ответов передавайте "reasoning_effort": "none": так дешевле и быстрее. Для трудных задач оставьте размышления, но поднимите max_tokens.

Сколько это стоит​

Цена — за миллион токенов, отдельно за вход, за выход и за чтение кеша. У эмбеддингов — только за вход. Веб-поиск — отдельная цена за каждый поиск плюс найденный текст по тарифу входа модели. Актуальные ставки всегда в панели, в разделе ИИ-модели → Каталог: там показана та цена, которая спишется, без пересчётов.

Gemini и вызовы инструментов​

У вызова инструмента в ответе Gemini есть поле extra_content.google.thought_signature — подпись размышлений модели. Без неё Gemini не принимает следующий ход с результатом инструмента. Если ваш клиент сохраняет сообщение ассистента целиком, подпись вернётся сама. Если нет (так ведут себя многие OpenAI-клиенты, а также входы /v1/messages и /v1/responses), мы подставим служебную заглушку, и запрос пройдёт. Google предупреждает, что без настоящей подписи качество ответа может снижаться, поэтому по возможности возвращайте её.

Длинный контекст​

У части моделей вендор берёт за длинный запрос дороже — у gpt-6* и gpt-5.6* при входе больше 272 тысяч токенов, у gemini-3.1-pro-preview — больше 200 тысяч. У нас так же: если вход запроса (вместе с прочитанным из кеша) больше порога, весь запрос — вход, кеш и вывод — считается по второй, повышенной ставке. Вход ровно на пороге — по обычной. Обе ставки и порог показаны в каталоге под ценами модели.

Перед запросом мы проверяем, хватит ли на балансе на худший случай; для длинного запроса этот худший случай считается по второй ставке.

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

Расход виден в разделе ИИ-модели → Расход: за текущий месяц, по моделям и по проектам.

Ключи​

  • Ключ работает от имени аккаунта и начинается с tnai_live_.
  • Ключу можно задать предел расхода за месяц. Утёкший ключ упрётся в потолок раньше, чем в баланс аккаунта, и скажет об этом причиной.
  • Ключу можно сузить набор моделей.
  • Отозванный ключ перестаёт работать сразу; история расхода по нему остаётся.

Ключ даёт доступ к платному API — не кладите его в репозиторий и в код, который уезжает в браузер.

Ответы об отказе​

Отказ приходит в обычной для OpenAI форме — {"error": {...}} — и всегда с причиной. Коды различают смысл:

КодЧто это значит
401ключ не найден, отозван или выключен
402не хватает средств, не было реального пополнения, либо ключ упёрся в свой предел
403этому ключу модель не разрешена
404такой модели нет в каталоге
503мы не смогли проверить доступ или тариф — это не отказ по деньгам, повторите запрос

Проверка средств идёт до обращения к модели и по худшему случаю запроса (вход плюс max_tokens вывода). Поэтому запрос, на который не хватает, отклоняется сразу и не тарифицируется. С веб-поиском в худший случай входят цена поиска и найденный текст.

Если max_tokens (или max_completion_tokens) не задан, действует потолок 4096 токенов вывода — и для проверки средств, и для самой модели. Нужен длинный ответ — задайте потолок явно, но не выше предела модели из таблицы.

Что стоит знать заранее​

  • Таймаута на весь ответ нет: длинные рассуждения модели доезжают целиком.
  • Если ответ оборвался и счётчики токенов не пришли, запрос не тарифицируется.
  • Каталог моделей расширяется; снятая с продажи модель перестаёт предлагаться, но уже сделанные запросы по ней считаются как прежде.