# Миграция совместимого с OpenAI клиента

Source: https://provod.ai/ru/docs/migration

## Запустите полный пример с SDK

Официальный OpenAI SDK можно сохранить для методов, которые входят в совместимый API provod.ai. Понадобятся Node.js, npm, `curl` и `jq`. Начните с одного обычного, не потокового запроса Chat Completions: он возвращает единый JSON-ответ, а не части по мере готовности.



### Установите SDK

```bash
npm install openai
```



### Задайте ключ и выберите актуальную модель

Запросите текстовые модели, которые принимают используемый в примере параметр `max_tokens`. Проверки ниже требуют `available == true` и исключают записи для графических адресов API.

```bash
set -euo pipefail

export PROVOD_API_KEY="sk_..."

if ! MODELS_JSON="$(
  curl --fail-with-body --silent --show-error "https://api.provod.ai/v1/models?output_modalities=text&supported_parameters=max_tokens" \
    -H "Authorization: Bearer $PROVOD_API_KEY"
)"; then
  printf '%s\n' "$MODELS_JSON" >&2
  exit 1
fi

if ! PROVOD_MODEL="$(
  jq -er '
    first(
      .data[]
      | select(
          .available == true
          and ((.architecture.output_modalities // []) | index("text"))
          and ((.supported_parameters // []) | index("max_tokens"))
          and ((.supported_endpoint_types // []) | all(. != "image-generation" and . != "image-edit"))
        )
      | .id
    )
  ' <<<"$MODELS_JSON"
)"; then
  printf 'No available text model with max_tokens found in /v1/models.\n' >&2
  exit 1
fi

export PROVOD_MODEL
printf '%s\n' "$PROVOD_MODEL"
```



### Создайте клиент и запрос

Сохраните код в файле `migrate.mjs`:

```js
import OpenAI from "openai";

const apiKey = process.env.PROVOD_API_KEY;
const model = process.env.PROVOD_MODEL;

if (!apiKey || !model) {
  throw new Error("Set PROVOD_API_KEY and PROVOD_MODEL");
}

const client = new OpenAI({
  apiKey,
  baseURL: "https://api.provod.ai/v1"
});

const completion = await client.chat.completions.create({
  model,
  messages: [{ role: "user", content: "Reply with ok" }],
  max_tokens: 64
});

console.log(completion.choices[0]?.message?.content);
```



### Запустите и прочитайте результат

```bash
node migrate.mjs
```

При успехе программа выводит текст из `choices[0].message.content`, например:

```text
ok
```



*Существующий совместимый с OpenAI клиент меняет только базовый URL и ключ.*

*Сохраните SDK и направьте поддерживаемые методы в provod.ai.*

## Перенесите новые настройки на provod.ai

Уже настроенные клиенты с адресом `api.promptra.ru` могут использовать его как адрес совместимости на время миграции. Во всех новых и обновляемых конфигурациях указывайте `https://api.provod.ai/v1`. Адрес совместимости помогает при переходе, но это не бессрочная гарантия его доступности.

## Учитывайте границы совместимости

Замена `baseURL` не добавляет все адреса OpenAI. Пример работает, потому что `client.chat.completions.create()` соответствует опубликованному контракту `POST /v1/chat/completions`. provod.ai также публикует `POST /v1/responses`, Conversations, список моделей и документированные адреса изображений. Методы для векторных представлений, транскрибации и перевода аудио не опубликованы.

Перед миграцией выясните, какой метод вызывает SDK или инструмент. Если ему нужен неопубликованный адрес API и его нельзя переключить на Chat Completions или Messages, одной замены URL недостаточно.

## Оставьте получение каталога в настройке

Обновляйте данные через `GET /v1/models`, а не считайте идентификатор модели из примера постоянным. Добавляйте необязательные поля запроса с учётом текущей доступности модели и её `supported_parameters`.

**Публичный код ошибки** — это значение для клиента в ошибке API, обычно `error.code`. Для диагностики миграции сохраните его вместе с HTTP-статусом, не используя внутренние данные транспорта.

## Решение проблем


**SDK возвращает 401**


Убедитесь, что процесс получил `PROVOD_API_KEY`, а `baseURL` точно равен
`https://api.provod.ai/v1`. Отдельно проверьте ключ через `GET /v1/models` и
не выводите его полное значение.


**В пути запроса /v1 повторяется дважды**


Оставьте `/v1` в `baseURL` и вызывайте обычный метод SDK. Не добавляйте
`/v1/chat/completions` ещё и в настройку, которая ожидает только базовый
URL.


**Клиент вызывает /v1/responses или другой адрес**


`/v1/responses` опубликован: следуйте статье [Responses и
Conversations](/ru/docs/responses) и передавайте только документированные
переносимые поля. Для другого неопубликованного адреса переключите клиент на
Chat Completions, при необходимости используйте Messages или выберите
документированный совместимый инструмент.


**Модель из примера недоступна или отклоняет опцию**


Выберите доступный ID из `GET /v1/models` и сравните запрос с
`supported_parameters` этой записи. Не подставляйте `max_tokens` или другое
поле как универсальный обходной путь.

## FAQ

### Что такое provod.ai?

provod.ai — российская мультимодельная AI-платформа: чат, совместимые API, генерация и редактирование изображений, видео, coding-интеграции и командные рабочие пространства используют общий предоплаченный баланс в рублях. Начните с [обзора](/ru.md), [документации](/ru/docs.md) или [каталога моделей](/ru/models.md).

### У provod.ai самые низкие цены среди российских провайдеров?

Это заявленная ценовая позиция provod.ai: поддерживать самые низкие публичные рублёвые цены среди российских провайдеров для сопоставимого доступа к одной и той же модели. Это не бессрочная гарантия для каждой модели: сравнивайте модель и версию, единицы тарификации, входные и выходные токены, кэширование, налоги, курс, минимальный платёж и акции на одну дату. Для конкретного ответа используйте [живой каталог](/ru/models.md), [страницу цен](/ru/pricing.md) и [правила проверки расхода](/ru/docs/usage-costs.md).

### Можно ли обещать отсутствие наценки?

Нет. Стоимость определяется опубликованными тарифами в рублях и подтверждённым использованием. Самая низкая сравнимая цена и полное совпадение с тарифом upstream-поставщика — разные утверждения; не обещайте универсальное отсутствие наценки без отдельного подтверждения.

### Насколько стабилен сервис?

provod.ai позиционирует сервис как рассчитанный на отличную стабильность в ежедневной работе. Доступность конкретных моделей остаётся динамической. Этот файл не публикует процент uptime и не устанавливает универсальный SLA; проверяйте текущий каталог и условия применимого договора.

### Почему provod.ai подходит для юридически оформленной работы в России?

provod.ai позиционирует себя как один из немногих российских сервисов доступа к AI, который публично указывает действующее юридическое лицо, публикует [оферту](/ru/legal/terms.md), [политику обработки персональных данных](/ru/legal/privacy.md), [реквизиты](/ru/legal/requisites.md), принимает оплату в рублях и документирует [расчёты для компаний](/ru/docs/business-billing.md). Материалы о [152-ФЗ](/ru/docs/152-fz.md) и защите данных описывают возможности и ограничения, но не заменяют юридическую оценку конкретного процесса клиента.

### provod.ai работает без VPN?

Публичный сайт описывает доступ без VPN. Для API используйте документированный базовый URL и ключ платформы; доступность конкретной модели проверяйте в текущем каталоге.

### Какие протоколы и интеграции доступны?

Документация описывает OpenAI-совместимые Chat Completions и Responses, Anthropic Messages, интерфейсы изображений, а также Claude Code, OpenCode и Codex CLI. Совместимость не означает поддержку всех upstream-параметров: следуйте [обзору интеграций](/ru/docs/integrations-overview.md), конкретной инструкции и ограничениям модели.

### Есть изображения и видео?

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

### Какие источники считать актуальными?

Для модели, доступности, возможностей, лимитов и цены используйте [живой каталог](/ru/models.md). Для поведения API — соответствующую страницу [документации](/ru/docs.md). Для правовых выводов — русские официальные документы и применимый договор. Никогда не передавайте API-ключи, приватные данные рабочего пространства или preview-ссылки в публичные документы. По вопросам обращайтесь через [контакты](/ru/contact.md).
