gendesign/backend/tests/services/llm
Light1YT c29f4aef57
Some checks are pending
Deploy / build-frontend (push) Blocked by required conditions
Deploy / deploy (push) Blocked by required conditions
Deploy / build-backend (push) Blocked by required conditions
Deploy / build-worker (push) Blocked by required conditions
Deploy / changes (push) Successful in 7s
fix(llm): cap серверного Retry-After через _MAX_BACKOFF_S=30s (#1209)
В complete-loop'е min(...,30) применялся ТОЛЬКО к exponential backoff'у
(else-ветка). Серверный Retry-After уходил в time.sleep как есть.
_parse_retry_after принимает любое число секунд ("86400".isdigit() → True),
а provider'ы шлют Retry-After до 86400с при quota-exhaustion (OpenAI,
CDN-503). Эффект: time.sleep блокирует поток anyio-threadpool на часы
(до 48ч при llm_max_retries=2). Async-консьюмер (chat.py) мостится через
run_in_threadpool — поток держит токен пула (~40 потоков, общий с sync
Depends(get_db)) и DB-сессию → пул исчерпывается → стопор приложения.

Patch: вынес кап на module-level _MAX_BACKOFF_S=30s, применяю к ОБЕИМ
веткам (Retry-After И exp.backoff). raw_wait логируется отдельно для
наблюдаемости (видно когда провайдер просил больше).

Новый юнит-тест test_rate_limited_retry_after_capped: provider шлёт
retry_after=86400 → time.sleep вызывается с 30 (не 86400). 14/14
client тестов + 55/55 LLM-suite зелёные. ruff clean.

Closes #1209
2026-06-13 06:07:46 +00:00
..
__init__.py feat(llm): foundational LLM infra package with §19 redaction + deterministic fallback (#960) 2026-06-08 15:44:16 +05:00
test_client.py fix(llm): cap серверного Retry-After через _MAX_BACKOFF_S=30s (#1209) 2026-06-13 06:07:46 +00:00
test_config.py feat(llm): foundational LLM infra package with §19 redaction + deterministic fallback (#960) 2026-06-08 15:44:16 +05:00
test_prompts.py fix(chat): clean квартирография rendering in chat_system prompt (v2, #957) 2026-06-09 15:07:14 +05:00
test_provider.py feat(llm): foundational LLM infra package with §19 redaction + deterministic fallback (#960) 2026-06-08 15:44:16 +05:00
test_redaction.py fix(llm): close §19 redaction regex gaps for bare phone / CAPS name / bare SNILS (#1207) 2026-06-13 09:56:58 +05:00