> Для получения чистого 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.

# Fusion

Инструменты сервера находятся в бета‑версии. API и поведение могут измениться.

Инструмент сервера `openrouter:fusion` предоставляет любой модели возможность многомодельного обсуждения. Когда ваша модель решает, что запрос выигрывает от нескольких точек зрения, она вызывает этот инструмент — панель моделей отвечает параллельно, судья сравнивает их ответы, и структурированный анализ возвращается вашей модели для окончательного ответа.

Это тот же конвейер, который стоит за [`openrouter/fusion` псевдонимом модели](/docs/guides/routing/routers/fusion-router) и [`fusion` плагином](/docs/guides/features/plugins/fusion). Прямое использование инструмента сервера даёт вам наибольший контроль: выбирайте свою внешнюю модель, комбинируйте её с другими инструментами и настраивайте панель и судью независимо.

## Быстрый старт

```typescript title="TypeScript"
const response = await fetch('https://api.vega.chat/api/v1/chat/completions', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer {{API_KEY_REF}}',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: '{{MODEL}}',
    messages: [
      {
        role: 'user',
        content: 'Survey the strongest arguments for and against a carbon tax. Where do experts disagree?',
      },
    ],
    tools: [
      { type: 'openrouter:fusion' },
    ],
  }),
});

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

```python title="Python"
import requests

response = requests.post(
  "https://api.vega.chat/api/v1/chat/completions",
  headers={
    "Authorization": f"Bearer {{API_KEY_REF}}",
    "Content-Type": "application/json",
  },
  json={
    "model": "{{MODEL}}",
    "messages": [
      {
        "role": "user",
        "content": "Survey the strongest arguments for and against a carbon tax. Where do experts disagree?",
      },
    ],
    "tools": [
      {"type": "openrouter:fusion"},
    ],
  },
)
print(response.json()["choices"][0]["message"]["content"])
```

## Когда модель вызывает инструмент?

Описание инструмента говорит модели вызывать `openrouter:fusion` только тогда, когда задача действительно выигрывает от нескольких точек зрения — исследовательские вопросы, многодоменная критика, запросы «сравнить и противопоставить» или любые ситуации, где ошибка дорого стоит. Простые тактические запросы не активируют его.

Чтобы **заставить** использовать fusion в каждом запросе, установите `tool_choice: "required"`. См. [Принудительное использование fusion в каждом запросе](/docs/guides/routing/routers/fusion-router#forcing-fusion-on-every-request).

## Параметры

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

```json
{
  "tools": [
    {
      "type": "openrouter:fusion",
      "parameters": {
        "analysis_models": [
          "~google/gemini-flash-latest",
          "deepseek/deepseek-v3.2",
          "~moonshotai/kimi-latest"
        ],
        "model": "~anthropic/claude-opus-latest"
      }
    }
  ]
}
```

| Поле                     | Значение по умолчанию                                                                                 | Описание                                                                                                                                                               |
| ------------------------ | ------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `analysis_models`        | Предустановка качества (`~anthropic/claude-opus-latest`, `~openai/gpt-latest`, `~google/gemini-pro-latest`) | Модели, формирующие панель. Каждая работает параллельно с включёнными `openrouter:web_search` и `openrouter:web_fetch`. Допустимо от 1 до 8 моделей.                     |
| `model`                  | Ваша внешняя модель                                                                                    | Судья, который формирует JSON‑структурированный анализ. По умолчанию используется та же модель, что обрабатывает ваш запрос.                                            |
| `max_tool_calls`        | `8`                                                                                                    | Максимальное количество шагов вызова инструмента, которое каждая модель панели и судья могут выполнить в их цикле `openrouter:web_search` / `openrouter:web_fetch` до возврата текста. Диапазон 1–16. |
| `max_completion_tokens` | Значение по умолчанию провайдера                                                                      | Максимальное количество токенов вывода (включая рассуждения) для каждого внутреннего вызова панели/судьи. Позволяет избежать исчерпания бюджета у моделей, склонных к длительным рассуждениям. |
| `reasoning`              | Значение по умолчанию провайдера                                                                      | Конфигурация рассуждений, передаваемая в вызовы панели и судьи — объект с необязательными полями `effort` и `max_tokens`.                                                |
| `temperature`            | Значение по умолчанию провайдера                                                                      | Температура сэмплинга (`0`–`2`), передаваемая в вызовы панели и судьи.                                                                                                   |

## Что возвращает инструмент

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

```json
{
  "status": "ok",
  "analysis": {
    "consensus": ["Points all or most panel models agreed on"],
    "contradictions": [
      { "topic": "...", "stances": [{ "model": "...", "stance": "..." }] }
    ],
    "partial_coverage": [
      { "models": ["..."], "point": "Only some models covered this" }
    ],
    "unique_insights": [
      { "model": "...", "insight": "Something only one model raised" }
    ],
    "blind_spots": ["Topics no panel model addressed"]
  },
  "responses": [
    { "model": "anthropic/claude-opus-4.5", "content": "..." },
    { "model": "openai/gpt-4.1", "content": "..." },
    { "model": "google/gemini-2.5-pro", "content": "..." }
  ]
}
```

Если некоторые модели панели выдают ошибку, но хотя бы одна успешно завершилась, результат всё равно имеет `status: "ok"` и добавляет массив `failed_models`, описывающий, какие модели не справились и почему.

### Деградация судьи

Если **панель** завершилась успешно, а **судья** не смог — произошла ошибка upstream, пустой вывод или результат, не являющийся валидным JSON‑анализом — инструмент **не** выдаёт ошибку. Он возвращает `status: "ok"` с необработанными `responses` панели и просто **опускает** поле `analysis`. Ваша модель всё равно может сформировать окончательный ответ, опираясь на ответы панели:

```json
{
  "status": "ok",
  "responses": [
    { "model": "anthropic/claude-opus-4.5", "content": "..." }
  ]
}
```

### Критические сбои

Инструмент возвращает `status: "error"` только когда не может предоставить полезный вывод. В этом случае включается типизированный `failure_reason`:

```json
{
  "status": "error",
  "error": "all panel models failed",
  "failure_reason": "all_panels_failed"
}
```

| Причина                     | Значение                                                                 |
| --------------------------- | ------------------------------------------------------------------------ |
| `all_panels_failed`         | Все модели панели вернули ошибку.                                        |
| `insufficient_credits`     | Все модели панели не смогли выполнить запрос из‑за недостатка кредитов. |
| `rate_limited`              | Все модели панели получили ограничение по частоте запросов.            |
| `fusion_invocation_capped` | Fusion уже был вызван ранее в том же ходу; второй вызов отклонён.       |
| `unexpected_error`          | Неожиданная ошибка прервала выполнение fusion.                         |

Модель‑вызывающая может перейти к ответу без анализа, если fusion не удался или деградировал.

## Веб‑инструменты

`openrouter:web_search` и `openrouter:web_fetch` включены как в вызовы **панели**, так и **судьи**, поэтому модели могут получать свежие источники во время ответа и анализа. Судья сравнивает ответы панели, а не просто объединяет их: он рассматривает согласованные выводы как более надёжный консенсус, выделяет противоречия, сохраняет уникальные инсайты отдельных моделей и отмечает слепые зоны, которые никто не затронул. Внешняя модель формирует окончательный ответ на основе этого анализа — результат не является простым голосованием большинства.

## Защита от рекурсии

Внутренние вызовы fusion передают заголовок `x-openrouter-fusion-depth`. Модели панели и судьи не могут рекурсивно вызывать `openrouter:fusion` — плагин отказывается вставлять инструмент второй раз, ограничивая обсуждение одним уровнем.

## Связанные материалы

* [Fusion Router (`openrouter/fusion`)](/docs/guides/routing/routers/fusion-router)
* [Fusion plugin](/docs/guides/features/plugins/fusion)
* [Web Search серверный инструмент](/docs/guides/features/server-tools/web-search)
* [Web Fetch серверный инструмент](/docs/guides/features/server-tools/web-fetch)
* [`/labs/fusion`](/labs/fusion) — интерактивная площадка