> Чтобы получить чистый 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.

# Применить патч

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

Инструмент сервера apply patch доступен только через [Responses API](/docs/api-reference/responses). Он не поддерживается через Chat Completions API.

Только модели OpenAI передают результаты apply patch потоково, инкрементно через события `response.apply_patch_call_operation_diff.delta`. Все остальные модели возвращают полный патч как единый вывод инструмента.

Серверный инструмент `openrouter:apply_patch` позволяет моделям предлагать изменения файлов с помощью патчей [V4A diff](https://github.com/openai/codex/blob/main/codex-rs/core/src/patch/v4a.md). Это строительный блок для кодирующих агентов — модель генерирует патч, описывающий создание, обновление или удаление файлов, VEGA проверяет синтаксис diff, а ваше приложение применяет его.

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

1. Вы включаете `{ "type": "openrouter:apply_patch" }` в массив `tools` при вызове Responses API.  
2. Исходя из диалога, модель решает, что файл необходимо создать, обновить или удалить, и генерирует патч V4A diff.  
3. VEGA проверяет синтаксис патча (правильные префиксы строк, допустимые маркеры, непустые пути).  
4. Если проверка проходит, вызов инструмента возвращается вашему приложению как элемент вывода `apply_patch_call` — ваше приложение применяет патч к файловой системе и возвращает результат обратно как `apply_patch_call_output` на следующем шаге.  
5. Если проверка не проходит, ошибка возвращается модели, чтобы она могла исправить себя.

Это инструмент с **человеческим участием**: VEGA проверяет diff, но никогда не применяет его. Ваше приложение отвечает за выполнение операции с файлом.

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

```typescript title="TypeScript"
const response = await fetch('https://api.vega.chat/api/v1/responses', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer {{API_KEY_REF}}',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: '{{MODEL}}',
    input: 'Create a hello.py file that prints "Hello, world!"',
    tools: [
      { type: 'openrouter:apply_patch' }
    ]
  }),
});

const data = await response.json();
// The response contains an apply_patch_call output item
// with the operation (create_file, update_file, or delete_file)
console.log(data.output);
```

```python title="Python"
import requests

response = requests.post(
  "https://api.vega.chat/api/v1/responses",
  headers={
    "Authorization": f"Bearer {{API_KEY_REF}}",
    "Content-Type": "application/json",
  },
  json={
    "model": "{{MODEL}}",
    "input": "Create a hello.py file that prints 'Hello, world!'",
    "tools": [
      {"type": "openrouter:apply_patch"}
    ]
  }
)

data = response.json()
# The response contains an apply_patch_call output item
# with the operation (create_file, update_file, or delete_file)
print(data["output"])
```

```bash title="cURL"
curl https://api.vega.chat/api/v1/responses \
  -H "Authorization: Bearer {{API_KEY_REF}}" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "{{MODEL}}",
    "input": "Create a hello.py file that prints \"Hello, world!\"",
    "tools": [
      {"type": "openrouter:apply_patch"}
    ]
  }'
```

## Операции патча

Инструмент поддерживает три типа операций, каждый из которых передаётся в поле `operation` элемента вывода `apply_patch_call`:

### `create_file`

Создаёт новый файл. Каждая строка содержимого в diff должна начинаться с `+`:

```json
{
  "type": "apply_patch_call",
  "call_id": "call_abc123",
  "status": "completed",
  "operation": {
    "type": "create_file",
    "path": "/src/hello.py",
    "diff": "+print(\"Hello, world!\")\n"
  }
}
```

### `update_file`

Обновляет существующий файл, используя V4A diff с контекстными строками (` ` префикс), добавлениями (`+`) и удалениями (`-`):

```json
{
  "type": "apply_patch_call",
  "call_id": "call_def456",
  "status": "completed",
  "operation": {
    "type": "update_file",
    "path": "/src/main.ts",
    "diff": "@@ function main() {\n-  console.log(\"old\");\n+  console.log(\"new\");\n }"
  }
}
```

### `delete_file`

Удаляет файл. Diff не требуется — нужен только путь к файлу:

```json
{
  "type": "apply_patch_call",
  "call_id": "call_ghi789",
  "status": "completed",
  "operation": {
    "type": "delete_file",
    "path": "/src/deprecated.ts"
  }
}
```

## Отправка результатов

После того как ваше приложение применит (или отклонит) патч, отправьте результат обратно на следующем шаге как элемент ввода `apply_patch_call_output`:

```json
{
  "model": "openai/codex-mini",
  "input": [
    {
      "type": "apply_patch_call_output",
      "call_id": "call_abc123",
      "status": "completed",
      "output": "Applied patch to /src/hello.py"
    }
  ],
  "tools": [
    { "type": "openrouter:apply_patch" }
  ]
}
```

| Поле      | Тип                         | Описание                                                |
| --------- | --------------------------- | ------------------------------------------------------- |
| `call_id` | string                      | Должен совпадать с `call_id` из `apply_patch_call`      |
| `status`  | `"completed"` или `"failed"` | Указывает, был ли патч успешно применён                |
| `output`  | string (optional)           | Человекочитаемый журнал того, что произошло            |

## Конфигурация

Инструмент apply patch принимает необязательный параметр `engine`:

```json
{
  "type": "openrouter:apply_patch",
  "parameters": {
    "engine": "auto"
  }
}
```

| Параметр | Тип    | По умолчанию | Описание                                                                                                                                                                                                                                                                 |
| -------- | ------ | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `engine` | string | `auto`       | `auto` — использует нативный пропуск, когда конечная точка поддерживает потоковую передачу diff, иначе переходит к валидатору HITL VEGA. `native` — принудительно использует нативный пропуск (при отсутствии поддержки переходит к HITL). `openrouter` — всегда использует валидатор HITL, даже на конечных точках с нативной поддержкой. |

### Поведение движка

* **Native passthrough** передаёт diff инкрементно через события `response.apply_patch_call_operation_diff.delta`, соответствуя формату потоковой передачи OpenAI. В настоящее время поддерживается на конечных точках OpenAI.  
* **HITL (human-in-the-loop)** буферизует полный diff и доставляет его как единый атомарный элемент вывода `apply_patch_call`.

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

Инструмент apply patch не имеет дополнительных расходов сверх стандартного использования токенов.

## Следующие шаги

* [Обзор серверных инструментов](/docs/guides/features/server-tools) — Узнайте о серверных инструментах  
* [Веб‑поиск](/docs/guides/features/server-tools/web-search) — Поиск в интернете для получения актуальной информации  
* [Дата и время](/docs/guides/features/server-tools/datetime) — Получить текущие дату и время  
* [Вызов инструментов](/docs/guides/features/tool-calling) — Узнайте о пользовательском вызове инструментов