fix(admin-scrape): ge=1 on /failures limit + enforce LLM finish_reason #1701

Merged
lekss361 merged 1 commit from fix/admin-scrape-validation into main 2026-06-17 18:35:36 +00:00
Owner

Fix 1 — ge=0→ge=1

admin_scrape.py:271 GET /failures limit: Query(ge=0)ge=1 (limit=0 бессмыслен; offset-параметры с легитимным 0 не тронуты).

Fix 2 — finish_reason не enforced

admin_scrape.py LLM-вызовов не содержит — консьюмер это chat/orchestrator.py orchestrate_chat. LLMResult docstring требует проверять finish_reason даже при ok=True ('length'/'content_filter' → обрезано), но не проверялось. Добавлена проверка: finish_reason не в (None, stop, end_turn, tool_calls) → warning + _deterministic(...) fallback (зеркалит empty-content паттерн рядом).

Verify

pytest -k "admin_scrape or scrape"370 passed, 14 skipped.

## Fix 1 — ge=0→ge=1 `admin_scrape.py:271` `GET /failures` `limit: Query(ge=0)` → `ge=1` (limit=0 бессмыслен; offset-параметры с легитимным 0 не тронуты). ## Fix 2 — finish_reason не enforced `admin_scrape.py` LLM-вызовов не содержит — консьюмер это `chat/orchestrator.py` `orchestrate_chat`. `LLMResult` docstring требует проверять finish_reason даже при ok=True ('length'/'content_filter' → обрезано), но не проверялось. Добавлена проверка: finish_reason не в `(None, stop, end_turn, tool_calls)` → warning + `_deterministic(...)` fallback (зеркалит empty-content паттерн рядом). ## Verify `pytest -k "admin_scrape or scrape"` → **370 passed, 14 skipped**.
lekss361 added 1 commit 2026-06-17 18:28:31 +00:00
fix(admin-scrape): ge=1 on count param + enforce LLM finish_reason (#review-followup)
Some checks failed
CI / changes (push) Has been cancelled
CI / backend-tests (push) Has been cancelled
CI / frontend-tests (push) Has been cancelled
CI / openapi-codegen-check (push) Has been cancelled
CI / backend-tests (pull_request) Has been cancelled
CI / frontend-tests (pull_request) Has been cancelled
CI / openapi-codegen-check (pull_request) Has been cancelled
CI / changes (pull_request) Has been cancelled
145dc62e0b
- admin_scrape.py /failures limit: ge=0 → ge=1 (returning 0 rows is nonsensical for a list endpoint)
- orchestrator.py: check result.finish_reason after ok=True; 'length'/'content_filter' and any
  other non-stop reason triggers deterministic fallback with reason=finish_reason:<value>
  (LLMResult docstring mandated this but no consumer enforced it)
lekss361 merged commit 584aa46f6f into main 2026-06-17 18:35:36 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1701
No description provided.