# Тесты пайплайна (pipeline_setup)

Каталог содержит тесты и вспомогательные модули для настройки и проверки пайплайна: intent router → RAG retrieval → LLM.

## Содержимое

| Каталог / файл | Назначение |
|----------------|------------|
| **suite_01_synthetic/** | Синтетические тесты на fixture-репозитории и golden-кейсах для CODE_QA. |
| **suite_02_pipeline/** | Интеграционные наборы `router_only`, `router_rag`, `full_chain` и CLI для их запуска. |
| **test_results/** | Результаты прогонов: JSONL и отчёты тестовых пайплайнов, артефакты CODE_QA eval. |
| **utils/** | Общие низкоуровневые утилиты. Сейчас здесь живёт переиспользуемый RAG-индексатор. |

## Структура наборов

- `suite_01_synthetic` — fixture-репозиторий `code_qa_repo`, golden-кейсы и evaluation harness.
- `suite_02_pipeline` — интеграционные сценарии `router_only`, `router_rag`, `full_chain` и CLI-скрипты запуска.

## CLI для pipeline-набора

Запуск — из **корня проекта (agent)**:

```bash
# Из каталога agent
python -m tests.pipeline_setup.suite_02_pipeline.cli.<скрипт> [параметры]
```

### 1. Индексация репозитория

Создаёт RAG-сессию и индексирует указанную директорию. Результат — `rag_session_id`, который передаётся в пайплайны с retrieval или full_chain.

```bash
python -m tests.pipeline_setup.suite_02_pipeline.cli.index_repo --repo-path <путь_к_репо> [--project-id ID]
```

| Параметр | Обязательный | Описание |
|----------|--------------|----------|
| `--repo-path` | да | Путь к корню индексируемого репозитория. |
| `--project-id` | нет | Идентификатор проекта для сессии; по умолчанию — имя директории репо. |

Пример:

```bash
python -m tests.pipeline_setup.suite_02_pipeline.cli.index_repo --repo-path ./tests/pipeline_setup/suite_01_synthetic/fixtures/code_qa_repo --project-id code_qa_repo
# Вывод: rag_session_id=<uuid>
```

### 2. Пайплайн «только intent router»

Цепочка: классификация запроса (intent_router_v2), без RAG и LLM.

```bash
python -m tests.pipeline_setup.suite_02_pipeline.cli.run_router_only [--case-id ID ...] [--verbose] [--test-name PREFIX]
```

| Параметр | Описание |
|----------|----------|
| `--case-id` | Запустить только указанные кейсы (можно повторять). |
| `--verbose` | Выводить диагностику по каждому кейсу. |
| `--test-name` | Префикс имени файла с результатами (по умолчанию `cli_router_only`). |

### 3. Пайплайн «intent router + retrieval»

Цепочка: intent_router_v2 → RAG retrieval. Требуется предварительная индексация (или `--reindex-repo-path`).

```bash
# С уже полученным rag_session_id:
python -m tests.pipeline_setup.suite_02_pipeline.cli.run_router_rag --rag-session-id <uuid> [--case-id ID ...] [--verbose]

# С индексацией перед прогоном:
python -m tests.pipeline_setup.suite_02_pipeline.cli.run_router_rag --reindex-repo-path <путь_к_репо> [--reindex-project-id ID] [--case-id ID ...]
```

| Параметр | Описание |
|----------|----------|
| `--rag-session-id` | UUID RAG-сессии (результат индексации). |
| `--reindex-repo-path` | Индексировать репо перед прогоном и использовать новую сессию. |
| `--reindex-project-id` | project_id для новой сессии при `--reindex-repo-path`. |
| `--case-id` | Запустить только указанные кейсы. |
| `--verbose` | Диагностика по каждому кейсу. |
| `--test-name` | Префикс файла результатов (по умолчанию `cli_router_rag`). |

Переменная окружения: `RUN_INTENT_PIPELINE_ROUTER_RAG=1` — включить режим router_rag. Обязательна `DATABASE_URL`.

### 4. Пайплайн «полная цепочка» (router + retrieval + LLM)

Цепочка: intent_router_v2 → RAG retrieval → ответ LLM (например GigaChat).

```bash
# С уже полученным rag_session_id:
python -m tests.pipeline_setup.suite_02_pipeline.cli.run_full_chain --rag-session-id <uuid> [--case-id ID ...] [--verbose]

# С индексацией перед прогоном:
python -m tests.pipeline_setup.suite_02_pipeline.cli.run_full_chain --reindex-repo-path <путь_к_репо> [--reindex-project-id ID] [--case-id ID ...]
```

Параметры — те же, что у `run_router_rag`. Дополнительно: `RUN_INTENT_PIPELINE_FULL_CHAIN=1` и настройки доступа к LLM (см. `.env` и `suite_02_pipeline/pipeline_intent_rag/.env.test`).

## Запуск через pytest

- Только intent router (без RAG/LLM):  
  `pytest tests/pipeline_setup/suite_02_pipeline/pipeline_intent_rag/test_intent_router_only_matrix.py -q`

- С RAG (нужны `RUN_INTENT_PIPELINE_ROUTER_RAG=1` и БД):  
  `RUN_INTENT_PIPELINE_ROUTER_RAG=1 pytest -m router_rag tests/pipeline_setup/suite_02_pipeline/pipeline_intent_rag/ -q`

- Полная цепочка (нужны `RUN_INTENT_PIPELINE_FULL_CHAIN=1`, БД и LLM):  
  `RUN_INTENT_PIPELINE_FULL_CHAIN=1 pytest -m full_chain tests/pipeline_setup/suite_02_pipeline/pipeline_intent_rag/ -q`

Подробнее — в `suite_02_pipeline/pipeline_intent_rag/README.md` и `suite_01_synthetic/code_qa_eval/README.md`.

## Окружение

- Загрузка env: сначала `suite_02_pipeline/pipeline_intent_rag/.env.test`, затем workspace `.env`.
- Для retrieval и full_chain нужны `DATABASE_URL` и (для full_chain) настройки LLM.
