feat: экспоненциальный backoff (providers[].backoff / upstreams[].backoff)
Повторяющиеся сбои апстрима (5xx/429/402 и сетевые ошибки) увязываются экспоненциальным откатом: первая ошибка — отдых 1s, далее 2s, 4s, … до потолка из конфига (ISO-8601: P1M, PT15M…); успешный запрос сбрасывает счётчик. Приоритет: upstreams[].backoff (свой счётчик на модель) над providers[].backoff (общий счётчик на все модели провайдера). - Backoff.kt: BackoffGuard (Mutex/@Volatile, kotlinx-datetime) + BackoffRegistry (скоупы провайдер/модель); - pickFreeUpstream пропускает апстримы в откате (лог «~Ns — пропускаю»); - все апстримы модели в откате → 503 «all upstreams cooling, retry in Ns» + заголовок Retry-After; - некорректный ISO-8601 в backoff — warn + игнор поля; - BackoffTest (8 тестов) + обновлённые тесты pickFreeUpstream; - CONFIG.md/README/TESTING.md. Проверено: jvmTest, compileKotlinLinuxX64, linuxX64Test.
This commit is contained in:
@@ -20,10 +20,16 @@ CWD; переопределяется env `CONFIG_PATH`). Блоки: `server` (
|
||||
обоих — безлимит.
|
||||
|
||||
Обработку think-тегов включает опциональный флажок `think_tags` у провайдера или
|
||||
апстрима (`off` по умолчанию, `split` — рассуждения из `<think>…</think>` уходят
|
||||
апстрима (`off` по умолчанию, `split` — рассуждения из `think`-тегов уходят
|
||||
в `reasoning_content`, `strip` — выбрасываются); работает и в стриме, и в
|
||||
non-stream.
|
||||
|
||||
Повторяющиеся сбои апстрима увязываются экспоненциальным backoff: поле
|
||||
`backoff` (ISO-8601-потолок, напр. `P1M`) задаётся на провайдере (общий
|
||||
счётчик на его модели) и/или на апстриме (приоритет). Первая ошибка — отдых
|
||||
1s, далее 2s, 4s, … до потолка; успех сбрасывает. Все апстримы модели в откате
|
||||
— `503` с `Retry-After`.
|
||||
|
||||
| Переменная | Default | Описание |
|
||||
|---|---|---|
|
||||
| `CONFIG_PATH` | `config.yaml` (CWD) | Путь к YAML-конфигу |
|
||||
|
||||
Reference in New Issue
Block a user