> Для получения чистого Markdown любой страницы добавьте .md к URL страницы.  
> Для полного индекса документации см. https://api.vega.chat/docs/llms.txt.  
> Для полного содержания документации см. https://api.vega.chat/docs/llms-full.txt.  
> Для интеграции AI‑клиента (Claude Code, Cursor и др.) подключитесь к MCP‑серверу по адресу https://api.vega.chat/docs/_mcp/server.

# Резервные модели

Параметр `models` позволяет автоматически переключаться на другие модели, если провайдеры основной модели недоступны, ограничены по скорости запросов или отказываются отвечать из‑за модерации контента.

## Как это работает

Укажите массив идентификаторов моделей в порядке приоритета. Если первая модель вернёт ошибку, VEGA автоматически попробует следующую модель из списка.

```typescript title="TypeScript SDK"
import { OpenRouter } from '@openrouter/sdk';

const client = new OpenRouter({
  apiKey: '<VEGA_API_KEY>',
});

const completion = await client.chat.send({
  models: ['~anthropic/claude-sonnet-latest', 'gryphe/mythomax-l2-13b'],
  messages: [
    {
      role: 'user',
      content: 'What is the meaning of life?',
    },
  ],
});

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

```typescript title="TypeScript (fetch)"
const response = await fetch('https://api.vega.chat/api/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <VEGA_API_KEY>',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    models: ['~anthropic/claude-sonnet-latest', 'gryphe/mythomax-l2-13b'],
    messages: [
      {
        role: 'user',
        content: 'What is the meaning of life?',
      },
    ],
  }),
});

const data = await response.json();
console.log(data.choices[0].message.content);
```

```python title="Python"
import requests
import json

response = requests.post(
  url="https://api.vega.chat/api/v1/chat/completions",
  headers={
    "Authorization": "Bearer <VEGA_API_KEY>",
    "Content-Type": "application/json",
  },
  data=json.dumps({
    "models": ["~anthropic/claude-sonnet-latest", "gryphe/mythomax-l2-13b"],
    "messages": [
      {
        "role": "user",
        "content": "What is the meaning of life?"
      }
    ]
  })
)

data = response.json()
print(data['choices'][0]['message']['content'])
```

## Поведение при переключении

Если выбранная модель возвращает ошибку, VEGA попытается использовать резервную модель. Если резервная модель недоступна или тоже возвращает ошибку, VEGA вернёт эту ошибку.

По умолчанию любой тип ошибки может вызвать использование резервной модели, включая:

* Ошибки проверки длины контекста  
* Флаги модерации для отфильтрованных моделей  
* Ограничения по скорости запросов  
* Время простоя

## Ценообразование

Запросы оплачиваются по тарифу модели, которая в конечном итоге была использована; её идентификатор будет возвращён в атрибуте `model` тела ответа.

## Использование с SDK OpenAI

Чтобы использовать массив `models` с SDK OpenAI, включите его в параметр `extra_body`. В примере ниже сначала будет попытка использовать `~openai/gpt-latest`, а массив `models` будет применяться последовательно в качестве резервных вариантов.

```python
from openai import OpenAI

openai_client = OpenAI(
  base_url="https://api.vega.chat/api/v1",
  api_key={{API_KEY_REF}},
)

completion = openai_client.chat.completions.create(
    model="~openai/gpt-latest",
    extra_body={
        "models": ["~anthropic/claude-sonnet-latest", "gryphe/mythomax-l2-13b"],
    },
    messages=[
        {
            "role": "user",
            "content": "What is the meaning of life?"
        }
    ]
)

print(completion.choices[0].message.content)
```

```typescript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://api.vega.chat/api/v1',
  apiKey: '{{API_KEY_REF}}',
});

async function main() {
  // @ts-expect-error
  const completion = await client.chat.completions.create({
    model: '~openai/gpt-latest',
    models: ['~anthropic/claude-sonnet-latest', 'gryphe/mythomax-l2-13b'],
    messages: [
      {
        role: 'user',
        content: 'What is the meaning of life?',
      },
    ],
  });
  console.log(completion.choices[0].message);
}

main();
```