Блог

Переезд с OpenRouter: как перенести код, ключи и идентификаторы моделей

Команда LLM MartРедакция6 мин чтения

Переезд с OpenRouter на LLM Mart сводится к трём правкам: base_url, ключ и поле model. Адрес для OpenAI SDK — https://www.llmmart.ru/api/v1, ключ выпускается в кабинете, а идентификаторы большинства моделей пишутся так же, как в OpenRouter. Отдельно проверьте алиасы, суффиксы вроде :free и параметры маршрутизации.

Содержание
  1. Что меняется при переезде с OpenRouter
  2. Шаг 1. Ключ (API key) и переменные окружения
  3. Шаг 2. baseurl в Python, JavaScript и curl
  4. Шаг 3. Идентификаторы моделей (model id)
  5. Заголовки HTTP-Referer и X-Title, provider и fallback
  6. Стриминг (stream) и tools после переезда
  7. Чек-лист переезда и откат (rollback)
Пошаговый перенос кода с OpenRouter на LLM Mart: base_url, новый ключ, сверка идентификаторов моделей, заголовки HTTP-Referer и X-Title, стриминг, tools и откат.
Рисунок 1. Три правки при переезде: адрес API, ключ и идентификатор модели

Что меняется при переезде с OpenRouter

API OpenRouter повторяет схему OpenAI: тот же POST /chat/completions, те же messages, stream и tools. LLM Mart принимает тот же формат, его OpenAI-маршруты совместимы со снимком API OpenAI от 9 июля 2026 года. Поэтому код почти не переписывается: меняются адрес, ключ и местами поле model.

ЧтоOpenRouterLLM Mart
Base URL для OpenAI SDKhttps://openrouter.ai/api/v1https://www.llmmart.ru/api/v1
Ключsk-or-v1-…sk-router-…
ЗаголовокAuthorization: BearerAuthorization: Bearer или x-api-key
Список моделейGET /api/v1/modelsGET /api/v1/models, только модели ключа
Оплатакарты, AliPay, USDCрубли: карта или счёт юрлицу

Пополнить баланс на openrouter.ai нужно отдельно. Его разбирает страница о том, как пополнить OpenRouter из России: LLM Mart чужие аккаунты не пополняет и выдаёт собственный ключ.

Шаг 1. Ключ (API key) и переменные окружения

Ключ OpenRouter к LLM Mart не подойдёт: у сервисов разные аккаунты и балансы. Выпустите новый ключ по инструкции по созданию API-ключа.

Регистрация

Создайте аккаунт на llmmart.ru: личный для себя или организацию для команды.

Баланс

Пополните баланс в рублях картой или выставьте счёт на юрлицо.

Модели

В разделе «Модели» включите те, что вызывал код на OpenRouter.

Ключ

В разделе «API-ключи» выпустите ключ вывода sk-router-… и сразу сохраните секрет: он показывается один раз.

Держите адрес и ключ в переменных окружения, а не в коде. Тогда переезд и откат сводятся к смене двух значений. До переезда там стояли https://openrouter.ai/api/v1 и ключ sk-or-v1-…, после него:

bash
export LLM_BASE_URL="https://www.llmmart.ru/api/v1"
export LLM_API_KEY="sk-router-…"

Шаг 2. base_url в Python, JavaScript и curl

В OpenAI SDK для Python замените base_url и api_key, остальной вызов остаётся прежним. Рекомендуемая версия пакета в документации LLM Mart: openai==2.45.0.

Python
import os
from openai import OpenAI

client = OpenAI(
    base_url=os.environ["LLM_BASE_URL"],
    api_key=os.environ["LLM_API_KEY"],
)
completion = client.chat.completions.create(
    model="deepseek/deepseek-v4.1-flash",
    messages=[{"role": "user", "content": "Привет"}],
)
print(completion.choices[0].message.content)

В Node.js те же правки задаются полями baseURL и apiKey. Пример ниже читает ответ потоком. Документация рекомендует пакет openai@6.45.0.

JavaScript
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: process.env.LLM_BASE_URL,
  apiKey: process.env.LLM_API_KEY,
});
const stream = await client.chat.completions.create({
  model: "deepseek/deepseek-v4.1-flash",
  messages: [{ role: "user", content: "Привет" }],
  stream: true,
});
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

Для curl путь пишется целиком, клиент ничего не дописывает сам:

bash
curl -s "$LLM_BASE_URL/chat/completions" \
  -H "Authorization: Bearer $LLM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"deepseek/deepseek-v4.1-flash","messages":[{"role":"user","content":"Привет"}]}'

Шаг 3. Идентификаторы моделей (model id)

Оба каталога используют формат author/slug. Мы сверили публичный список GET /api/v1/models OpenRouter с каталогом LLM Mart 11 ноября 2026 года: у большинства моделей идентификаторы совпали символ в символ. Расхождения есть у алиасов, бесплатных версий и части эмбеддингов.

В OpenRouterВ LLM MartЧто сделать
deepseek/deepseek-v4.1-flashdeepseek/deepseek-v4.1-flashничего
anthropic/claude-sonnet-5.5anthropic/claude-sonnet-5.5ничего
~anthropic/claude-sonnet-latestнет алиасаукажите версию, например anthropic/claude-sonnet-5.5
openai/gpt-5.2:nitroopenai/gpt-5.2уберите суффикс маршрутизации
google/gemma-4-31b-it:freegoogle/gemma-4-31b-itверсий :free в каталоге нет
qwen/qwen3-reranker-0.6bqwen/qwen3-reranker-0-6bточка в слаге заменена дефисом
mongodb/voyage-4voyageai/voyage-4другой автор в id
openrouter/autoнетвыберите модель явно

Суффиксы :nitro, :floor и :exacto в OpenRouter меняют только порядок провайдеров, :free указывает на отдельную бесплатную запись. В документации LLM Mart таких суффиксов нет, поэтому указывайте базовый id. Точное имя берите из каталога моделей: несуществующий id вернёт 404 model_not_found.

Даже при одинаковом id цены в каталогах разные. В каталоге LLM Mart они указаны в рублях и уже с наценкой платформы.

МодельКонтекстВвод / 1MВывод / 1M
DeepSeek V4.1 Flash1.0M22,48 ₽92,6 ₽
Claude Sonnet 5.51M180,82 ₽885,52 ₽
GLM 5.3 Flash1.0M12,34 ₽41,2 ₽
GPT-6 Luna1.1M9,64 ₽45,93 ₽

Заголовки HTTP-Referer и X-Title, provider и fallback

Заголовки HTTP-Referer и X-OpenRouter-Title нужны OpenRouter для рейтинга приложений, старое имя X-Title он тоже принимает. В документации LLM Mart они не упоминаются, поэтому уберите их из defaultHeaders или extra_headers вместе с остальной привязкой к OpenRouter.

Объект provider в теле запроса есть у обоих сервисов, но читается по-разному. Шлюз LLM Mart учитывает поля only и quantizations, а order, ignore, allow_fallbacks, sort, zdr и max_price не читает. Имена площадок тоже свои: берите их из блока «Доступные площадки» на карточке модели, подробности в описании выбора поставщика и площадки.

Массив models для запасных моделей, route и plugins OpenRouter относит к собственным параметрам. В документации LLM Mart их нет: запасной маршрут там настраивается на стороне платформы и срабатывает без правки кода. Уберите эти поля и проверьте ответ тестовым запросом.

Стриминг (stream) и tools после переезда

С stream: true оба сервиса отдают SSE в формате OpenAI с финальным data: [DONE]. Чтобы соединение не рвалось по таймауту, OpenRouter шлёт в поток комментарии : OPENROUTER PROCESSING. LLM Mart, пока поставщик молчит, примерно раз в 15 секунд пишет : processing. Самописный парсер должен пропускать строки с двоеточием в начале. Официальный SDK делает это сам.

Таймауты у LLM Mart такие: первого события на /chat/completions шлюз ждёт до 10 минут. Если поток уже начался, 60 секунд тишины закрывают соединение с ошибкой, подробно это описано в разделе о потоковой передаче.

Вызов функций передаётся тем же массивом tools с type: "function". Работает он только у моделей с поддержкой tool use: у OpenRouter их ищут фильтром supported_parameters=tools, у LLM Mart смотрят карточку модели. Встроенные инструменты OpenAI вроде File Search и Code Interpreter через шлюз LLM Mart не работают.

Чек-лист переезда и откат (rollback)

  • Выпустите ключ sk-router-… и включите нужные модели.
  • Замените base_url на https://www.llmmart.ru/api/v1 через переменную окружения.
  • Сверьте каждый model с каталогом, уберите алиасы ~… и суффиксы :nitro, :free.
  • Удалите HTTP-Referer, X-OpenRouter-Title, models, route и plugins.
  • Прогоните обычный запрос, поток и вызов tools, проверьте usage в ответе.
  • Сравните расход за неделю в калькуляторе стоимости токенов.

Для отката верните в LLM_BASE_URL и LLM_API_KEY прежние значения и вызывайте прежние id. Если вы ещё выбираете замену, сравните сервисы в обзоре аналогов OpenRouter или прочитайте, что такое OpenRouter. Условия LLM Mart собраны на странице аналога OpenRouter с оплатой в рублях.

Перенос без правки modelDeepSeek: DeepSeek V4.1 FlashИдентификатор совпадает с OpenRouter, поэтому меняются только адрес и ключ.Карточка модели →
Агент с инструментамиAnthropic: Claude Sonnet 5.5Явная версия вместо алиаса ~anthropic/claude-sonnet-latest, которого в каталоге LLM Mart нет.Карточка модели →
Модель вне OpenRouterSber: GigaChat 3 ProРоссийская модель на том же ключе, в публичном списке OpenRouter её нет.Карточка модели →

Частые вопросы

Как перенести код с OpenRouter?

Замените base_url на https://www.llmmart.ru/api/v1 и ключ OpenRouter на ключ LLM Mart sk-router-…, остальной вызов OpenAI SDK остаётся прежним. Затем сверьте поле model с каталогом: большинство идентификаторов совпадает, но алиасы ~…-latest и версии :free придётся заменить. Удалите заголовки HTTP-Referer и X-OpenRouter-Title и отправьте тестовый запрос.

Совпадают ли идентификаторы моделей OpenRouter и LLM Mart?

У большинства моделей да: deepseek/deepseek-v4.1-flash или anthropic/claude-sonnet-5.5 пишутся одинаково. Расхождения есть у алиасов вроде ~anthropic/claude-sonnet-latest, бесплатных версий :free и части эмбеддингов, например mongodb/voyage-4 в LLM Mart записан как voyageai/voyage-4. Сверку публичных списков обоих сервисов мы провели 11 ноября 2026 года; каталоги обновляются, поэтому проверяйте каждый id по каталогу перед выкладкой.

Подойдёт ли ключ OpenRouter для LLM Mart?

Нет. Ключ OpenRouter начинается с sk-or-v1- и привязан к балансу на openrouter.ai. Для LLM Mart нужен собственный ключ вывода sk-router-…, его выпускают в разделе «API-ключи» кабинета. Секрет показывается один раз, поэтому сразу сохраните его в переменную окружения или хранилище секретов, не в репозиторий.

Как пополнить OpenRouter из России?

В FAQ OpenRouter перечислены банковские карты, AliPay и криптовалюта USDC, рублёвой оплаты там нет. LLM Mart баланс openrouter.ai не пополняет. Если нужен сам API, можно перейти на ключ LLM Mart: оплата в рублях картой или по счёту на юрлицо, формат запросов прежний, OpenAI-совместимый.

Работают ли стриминг и tools после переезда?

Да, формат тот же: stream: true отдаёт SSE с финальным [DONE], а функции передаются массивом tools. В LLM Mart вызов инструментов работает у моделей с поддержкой tool use, это видно в карточке модели. Встроенные инструменты OpenAI вроде File Search и Code Interpreter через шлюз не работают.

Статья была полезной?
Поделиться:TGVKX

Комментарии 0

Комментарии проходят модерацию

Статьи по теме