ИИ-модели
Единый OpenAI-совместимый API к языковым моделям. Подставляете ключ в любой клиент, который умеет ходить в OpenAI, — и платите за токены рублями с баланса аккаунта. Отдельной подписки нет.
Раздел в панели — ИИ-модели.
Быстрый старт
- Панель → ИИ-модели → Создать ключ. Ключ показывается один раз: мы храним только его хеш и отдать повторно не можем.
- Подставьте адрес и ключ в свой клиент.
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.3 | Z.AI | инструменты, размышления | 1M / 131K | новый флагман Z.AI: код и длинные агентные задачи |
glm-5.2 | Z.AI | инструменты | 1M / 128K | флагман прошлого поколения: код, агенты, длинный контекст |
kimi-k3 | Moonshot | картинки, инструменты, размышления | 1M / 262K | самые сложные задачи и код, когда цена вторична |
qwen3.8-max | Qwen | картинки, инструменты, размышления | 1M / 131K | флагман Qwen: рассуждения, код, изображения |
deepseek-v4-pro | DeepSeek | инструменты, размышления | 1M / 393K | сложные задачи, где нужна сильная модель |
mimo-v2.6-pro | Xiaomi | картинки, инструменты, размышления | 1M / 131K | сильная модель по цене лёгкой |
minimax-m3 | MiniMax | инструменты, размышления | 512K / 512K | агентные задачи и код, очень длинный вывод |
qwen3-coder-next | Qwen | инструменты | 262K / 65K | код и агентные сценарии, быстрый ответ без размышлений |
glm-5v-turbo | Z.AI | картинки, инструменты, размышления | 203K / 131K | скриншоты, схемы, документы на входе |
deepseek-v4.1-flash | DeepSeek | картинки, инструменты, размышления | 1M / 393K | дешёвая быстрая модель, понимает изображения |
mimo-v2.6-flash | Xiaomi | картинки, инструменты, размышления | 1M / 131K | самая дешёвая модель каталога |
OpenAI и Google Gemini
Модели OpenAI и Gemini мы получаем у вендоров напрямую. Имя в model совпадает
с именем у вендора: код, написанный под API OpenAI или Gemini, достаточно
перенаправить на наш адрес.
Модели (model) | Производитель | Умеет | Окно / вывод до |
|---|---|---|---|
gpt-6-astra, gpt-6-sol, gpt-6-luna | OpenAI | картинки, инструменты, размышления | 1,05M / 128K |
gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna | OpenAI | картинки, инструменты, размышления | 1,05M / 128K |
gpt-5.5, gpt-5.4 | OpenAI | картинки, инструменты, размышления | 272K / 128K |
gpt-5.4-mini, gpt-5.4-nano, gpt-5.2, gpt-5.1, gpt-5, gpt-5-mini, gpt-5-nano | OpenAI | картинки, инструменты, размышления | 400K / 128K |
gpt-4.1, gpt-4.1-mini, gpt-4.1-nano | OpenAI | картинки, инструменты | 1M / 32K |
gpt-4o, gpt-4o-mini | OpenAI | картинки, инструменты | 128K / 16K |
o3, o4-mini | OpenAI | картинки, инструменты, размышления | 200K / 100K |
o3-mini | OpenAI | инструменты, размышления | 200K / 100K |
gemini-3.8-flash, gemini-3.7-flash, gemini-3.6-flash, gemini-3.5-flash | картинки, инструменты, размышления | 1M / 65K | |
gemini-3.5-flash-lite, gemini-3.1-flash-lite | картинки, инструменты, размышления | 1M / 65K | |
gemini-3.1-pro-preview | картинки, инструменты, размышления | 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_format | float (по умолчанию) или 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": "Переведи на английский: привет"}]}
На непростом вопросе они способны занять весь потолок вывода — а без
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 токенов вывода — и для проверки средств, и для самой модели. Нужен
длинный ответ — задайте потолок явно, но не выше предела модели из таблицы.
Что стоит знать заранее
- Таймаута на весь ответ нет: длинные рассуждения модели доезжают целиком.
- Если ответ оборвался и счётчики токенов не пришли, запрос не тарифицируется.
- Каталог моделей расширяется; снятая с продажи модель перестаёт предлагаться, но уже сделанные запросы по ней считаются как прежде.