# Устранение неполадок

🌐 **Languages:** 🇺🇸 [English](../../TROUBLESHOOTING.md) | 🇧🇷 [Português (Brasil)](../pt-BR/TROUBLESHOOTING.md) | 🇪🇸 [Español](../es/TROUBLESHOOTING.md) | 🇫🇷 [Français](../fr/TROUBLESHOOTING.md) | 🇮🇹 [Italiano](../it/TROUBLESHOOTING.md) | 🇷🇺 [Русский](../ru/TROUBLESHOOTING.md) | 🇨🇳 [中文 (简体)](../zh-CN/TROUBLESHOOTING.md) | 🇩🇪 [Deutsch](../de/TROUBLESHOOTING.md) | 🇮🇳 [हिन्दी](../in/TROUBLESHOOTING.md) | 🇹🇭 [ไทย](../th/TROUBLESHOOTING.md) | 🇺🇦 [Українська](../uk-UA/TROUBLESHOOTING.md) | 🇸🇦 [العربية](../ar/TROUBLESHOOTING.md) | 🇯🇵 [日本語](../ja/TROUBLESHOOTING.md) | 🇻🇳 [Tiếng Việt](../vi/TROUBLESHOOTING.md) | 🇧🇬 [Български](../bg/TROUBLESHOOTING.md) | 🇩🇰 [Dansk](../da/TROUBLESHOOTING.md) | 🇫🇮 [Suomi](../fi/TROUBLESHOOTING.md) | 🇮🇱 [עברית](../he/TROUBLESHOOTING.md) | 🇭🇺 [Magyar](../hu/TROUBLESHOOTING.md) | 🇮🇩 [Bahasa Indonesia](../id/TROUBLESHOOTING.md) | 🇰🇷 [한국어](../ko/TROUBLESHOOTING.md) | 🇲🇾 [Bahasa Melayu](../ms/TROUBLESHOOTING.md) | 🇳🇱 [Nederlands](../nl/TROUBLESHOOTING.md) | 🇳🇴 [Norsk](../no/TROUBLESHOOTING.md) | 🇵🇹 [Português (Portugal)](../pt/TROUBLESHOOTING.md) | 🇷🇴 [Română](../ro/TROUBLESHOOTING.md) | 🇵🇱 [Polski](../pl/TROUBLESHOOTING.md) | 🇸🇰 [Slovenčina](../sk/TROUBLESHOOTING.md) | 🇸🇪 [Svenska](../sv/TROUBLESHOOTING.md) | 🇵🇭 [Filipino](../phi/TROUBLESHOOTING.md)

Распространенные проблемы и решения OmniRoute.

---

## Быстрые исправления

| Проблема                                      | Решение                                                                        |
| --------------------------------------------- | ------------------------------------------------------------------------------ |
| Первый вход в систему не работает             | Проверьте `INITIAL_PASSWORD` в `.env` (по умолчанию: `123456`)                 |
| Панель управления открывается не на тот порт  | Установите `PORT=20128` и `NEXT_PUBLIC_BASE_URL=http://localhost:20128`        |
| Никакие запросы не регистрируются под `logs/` | Установите `ENABLE_REQUEST_LOGS=true`                                          |
| EACCES: в разрешении отказано                 | Установите `DATA_DIR=/path/to/writable/dir` для переопределения `~/.omniroute` |
| Стратегия маршрутизации не сохраняется        | Обновление до версии 1.4.11+ (исправление схемы Zod для сохранения настроек)   |

---

## Проблемы с провайдером

### "Языковая модель не предоставила сообщения"

**Причина:** квота поставщика исчерпана.

**Исправлено:**

1. Проверьте трекер квот на панели управления.
2. Используйте комбо с запасными уровнями
3. Перейдите на более дешевый/бесплатный уровень.

### Ограничение скорости

**Причина:** квота подписки исчерпана.

**Исправлено:**

- Добавить резервный вариант: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`.
- Используйте GLM/MiniMax в качестве дешевой резервной копии.

### Срок действия токена OAuth истек

OmniRoute автоматически обновляет токены. Если проблемы сохраняются:

1. Панель управления → Провайдер → Переподключиться.
2. Удалить и заново добавить подключение провайдера

---

## Проблемы с облаком

### Ошибки облачной синхронизации

1. Убедитесь, что `BASE_URL` указывает на ваш работающий экземпляр (например, `http://localhost:20128`).
2. Убедитесь, что `CLOUD_URL` указывает на конечную точку вашего облака (например, `https://omniroute.dev`).
3. Сохраняйте значения `NEXT_PUBLIC_*` в соответствии со значениями на стороне сервера.

### Облако `stream=false` Возвращает 500

**Симптом:** `Unexpected token 'd'...` на конечной точке облака для вызовов без потоковой передачи.

**Причина:** Восходящий поток возвращает полезные данные SSE, хотя клиент ожидает JSON.

**Решение:** используйте `stream=true` для прямых вызовов из облака. Локальная среда выполнения включает резервный вариант SSE→JSON.

### Облако сообщает о подключении, но «неверный ключ API»

1. Создайте новый ключ на локальной панели управления (`/api/keys`).
2. Запустите облачную синхронизацию: Включить «Облако» → «Синхронизировать сейчас».
3. Старые/несинхронизированные ключи по-прежнему могут возвращать `401` в облаке.

---

## Проблемы с докером

### Инструмент CLI показывает, что не установлен

1. Проверьте поля времени выполнения: `curl http://localhost:20128/api/cli-tools/runtime/codex | jq`.
2. Для портативного режима: используйте целевой образ `runner-cli` (входящие в комплект CLI).
3. Для режима монтирования хоста: установите `CLI_EXTRA_PATHS` и смонтируйте каталог bin хоста как доступный только для чтения.
4. Если `installed=true` и `runnable=false`: двоичный файл найден, но проверка работоспособности не удалась.

### Быстрая проверка времени выполнения

```bash
curl -s http://localhost:20128/api/cli-tools/codex-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'
curl -s http://localhost:20128/api/cli-tools/claude-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'
curl -s http://localhost:20128/api/cli-tools/openclaw-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'
```

---

## Проблемы со стоимостью

### Высокие затраты

1. Проверьте статистику использования в Личном кабинете → Использование.
2. Переключите основную модель на GLM/MiniMax.
3. Используйте уровень бесплатного пользования (Gemini CLI, iFlow) для некритических задач.
4. Установите бюджеты затрат для каждого ключа API: Панель управления → Ключи API → Бюджет.

---

## Отладка

### Включить журналы запросов

Установите `ENABLE_REQUEST_LOGS=true` в файле `.env`. Журналы отображаются в каталоге `logs/`.

### Проверка работоспособности поставщика

```bash
# Health dashboard
http://localhost:20128/dashboard/health

# API health check
curl http://localhost:20128/api/monitoring/health
```

### Хранилище времени выполнения

- Основное состояние: `${DATA_DIR}/db.json` (провайдеры, комбинации, псевдонимы, ключи, настройки)
- Использование: `${DATA_DIR}/usage.json`, `${DATA_DIR}/log.txt`, `${DATA_DIR}/call_logs/`
- Запрос журналов: `<repo>/logs/...` (при `ENABLE_REQUEST_LOGS=true`)

---

## Проблемы с автоматическим выключателем

### Поставщик застрял в состоянии OPEN

Когда автоматический выключатель провайдера разомкнут, запросы блокируются до истечения времени восстановления.

**Исправлено:**

1. Перейдите в **Панель управления → Настройки → Устойчивость**.
2. Проверьте карту автоматического выключателя соответствующего поставщика.
3. Нажмите **Сбросить все**, чтобы очистить все выключатели, или подождите, пока истечет время восстановления.
4. Перед сбросом убедитесь, что поставщик действительно доступен.

### Поставщик продолжает отключать автоматический выключатель

Если провайдер неоднократно переходит в состояние OPEN:

1. Проверьте **Панель управления → Состояние → Состояние поставщика**, чтобы узнать о шаблоне сбоя.
2. Перейдите в **Настройки → Устойчивость → Профили поставщиков** и увеличьте порог отказа.
3. Проверьте, не изменил ли провайдер лимиты API или требует повторной аутентификации.
4. Проверьте телеметрию задержки — высокая задержка может привести к сбоям из-за тайм-аута.

---

## Проблемы с транскрипцией аудио

### Ошибка «Неподдерживаемая модель»

– Убедитесь, что вы используете правильный префикс: `deepgram/nova-3` или `assemblyai/best`.
– Убедитесь, что провайдер подключен в **Панель управления → Провайдеры**.

### Транскрипция возвращает пустое значение или завершается с ошибкой

- Проверьте поддерживаемые аудиоформаты: `mp3`, `wav`, `m4a`, `flac`, `ogg`, `webm`.
  – Убедитесь, что размер файла находится в пределах ограничений поставщика (обычно < 25 МБ).
- Проверьте действительность ключа API провайдера в карточке провайдера.

---

## Отладка переводчика

Используйте **Панель управления → Переводчик** для устранения проблем с переводом формата:

| Режим                   | Когда использовать                                                                                            |
| ----------------------- | ------------------------------------------------------------------------------------------------------------- |
| **Детская площадка**    | Сравните форматы ввода/вывода параллельно — вставьте ошибочный запрос, чтобы посмотреть, как он преобразуется |
| **Тестер чата**         | Отправляйте живые сообщения и проверяйте всю полезную нагрузку запроса/ответа, включая заголовки              |
| **Испытательный стенд** | Запустите пакетное тестирование комбинаций форматов, чтобы определить, какие переводы повреждены              |
| **Живой монитор**       | Наблюдайте за потоком запросов в режиме реального времени, чтобы выявить периодические проблемы с переводом   |

### Распространенные проблемы с форматами

- **Теги «Мышление» не отображаются** — проверьте, поддерживает ли целевой поставщик мышление и настройку бюджета на мышление.
- **Отказ от вызовов инструментов** — Некоторые преобразования форматов могут удалять неподдерживаемые поля; проверить в режиме игровой площадки
- **Отсутствует системное приглашение** — Клод и Близнецы по-разному обрабатывают системные приглашения; проверить вывод перевода
- **SDK возвращает необработанную строку вместо объекта** — Исправлено в версии 1.1.0: средство очистки ответов теперь удаляет нестандартные поля (`x_groq`, `usage_breakdown` и т. д.), которые вызывают сбои проверки OpenAI SDK Pydantic.
- **GLM/ERNIE отклоняет роль `system`** — Исправлено в версии 1.1.0: нормализатор ролей автоматически объединяет системные сообщения с пользовательскими сообщениями для несовместимых моделей.
- **`developer` роль не распознана** — исправлено в версии 1.1.0: автоматически преобразуется в `system` для поставщиков, не поддерживающих OpenAI.
- **`json_schema` не работает с Gemini** — Исправлено в версии 1.1.0: `response_format` теперь преобразуется в `responseMimeType` Gemini + `responseSchema`

---

## Настройки устойчивости

### Автоматическое ограничение скорости не срабатывает

- Автоматическое ограничение скорости применяется только к поставщикам ключей API (не OAuth/подписка).
  – Убедитесь, что в разделе **Настройки → Устойчивость → Профили поставщиков** включено автоматическое ограничение скорости.
- Проверьте, возвращает ли поставщик коды состояния `429` или заголовки `Retry-After`.

### Настройка экспоненциальной задержки

Профили провайдеров поддерживают следующие настройки:

- **Базовая задержка** — Начальное время ожидания после первого сбоя (по умолчанию: 1 с).
- **Макс. задержка** — максимальное время ожидания (по умолчанию: 30 с).
- **Множитель** — насколько увеличить задержку за каждый последовательный сбой (по умолчанию: 2x)

###Антигремящее стадо

Когда множество одновременных запросов попадают к поставщику с ограниченной скоростью, OmniRoute использует мьютекс + автоматическое ограничение скорости для сериализации запросов и предотвращения каскадных сбоев. Это происходит автоматически для поставщиков ключей API.

---

## Все еще застрял?

- **Проблемы с GitHub**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues)
- **Архитектура**: внутренние подробности см. в [link](ARCHITECTURE.md).
- **Справочник по API**: см. [link](API_REFERENCE.md) для всех конечных точек.
- **Панель состояния**: проверьте **Панель управления → Здоровье**, чтобы узнать состояние системы в режиме реального времени.
- **Переводчик**: используйте **Панель управления → Переводчик** для устранения проблем с форматом.
