docs: приведение документации в соответствие с backend

- Auth: register без токенов до верификации (userId, message, verificationCode)
- Auth: login — 429 RATE_LIMIT_EXCEEDED при lockout, user с avatarUrl
- Auth: verify-email — { userId, code }, без Bearer
- Auth: reset-password — поле newPassword
- Profile: stats — byStack, totalTestsTaken, totalQuestions, correctAnswers, accuracy
- Tests: POST /tests возвращает полный список questions
- Tests: answer — полный snapshot отвеченного вопроса
- Tests: history — offset-пагинация (limit/offset), формат { tests, total }
- Admin: GET /admin/questions/pending, POST approve/reject, PATCH для редактирования
- DB: email_verification_codes, password_reset_tokens; обновлена question_cache_meta
- Security: CORS_ORIGINS из env, CSP/COEP отключены
- LLM: LLM_FALLBACK_MODEL, LLM_RETRY_DELAY_MS
- Onboarding: правило .env.example, JWT_SECRET >= 32 символов
This commit is contained in:
Anton
2026-03-06 13:52:24 +03:00
parent 99cd8ae727
commit 2f45a0b851
6 changed files with 318 additions and 136 deletions

View File

@@ -20,12 +20,17 @@ flowchart LR
LLM_BASE_URL=http://localhost:11434/v1
LLM_MODEL=qwen2.5:14b
LLM_API_KEY=
LLM_FALLBACK_MODEL=qwen2.5:7b
LLM_TIMEOUT_MS=15000
LLM_MAX_RETRIES=1
LLM_RETRY_DELAY_MS=2000
LLM_TEMPERATURE=0.7
LLM_MAX_TOKENS=2048
```
- **LLM_FALLBACK_MODEL** — запасная модель при падении основной.
- **LLM_RETRY_DELAY_MS** — задержка между retry при ошибках API (мс).
Все провайдеры используют OpenAI-совместимый API (`/v1/chat/completions`). Замена провайдера — изменение `.env`, код не меняется.
### Стратегия провайдеров
@@ -466,14 +471,15 @@ Here are the questions:
Каждый LLM-вызов записывается в `question_cache_meta`:
| Метрика | Что записываем |
| - | - |
| model | Модель (`qwen2.5:14b`, `gpt-4o-mini`, ...) |
| generation_time_ms | Время генерации |
| prompt_hash | SHA-256 промпта (для дедупликации) |
| valid | boolean — прошёл ли валидацию с первого раза |
| retry_count | Сколько retry потребовалось |
| questions_generated | Сколько вопросов вернул |
| Поле | Тип | Описание |
| - | - | - |
| llm_model | varchar | Модель (`qwen2.5:14b`, `gpt-4o-mini`, ...) |
| prompt_hash | varchar | SHA-256 промпта (для дедупликации) |
| generation_time_ms | integer | Время генерации в мс |
| valid | boolean | Прошёл ли валидацию с первого раза |
| retry_count | integer | Сколько retry потребовалось |
| questions_generated | integer | Сколько вопросов сгенерировано |
| raw_response | text, nullable | Сырой ответ LLM (опционально, для отладки) |
Периодически анализируем: `% валидных ответов по модели`. Если ниже 80% — менять промпт или модель.