# Intent Pipeline Test Module

## Что тестируется

- `router_only`: только `intent_router_v2`.
- `router_rag`: `intent_router_v2 -> RAG retrieval`.
- `full_chain`: `intent_router_v2 -> RAG -> GigaChat`.

## Каталог фраз

Фразы лежат в [fixtures/phrases.yaml](/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup/suite_02_pipeline/pipeline_intent_rag/fixtures/phrases.yaml).

Поля кейса:

- `id` — уникальный ID.
- `text` — запрос пользователя.
- `tags` — в каких режимах кейс участвует (`router_only`, `router_rag`, `full_chain`).
- `expected_intent` — опциональная проверка intent.
- `expect_non_empty_rag` — ожидание непустого RAG-контекста.
- `rag_session_id` — опционально; можно не указывать, если задан через env.

## Env для тестов

Сначала загружается `[.env.test](/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup/suite_02_pipeline/pipeline_intent_rag/.env.test)`, затем workspace `.env`.

Ключи:

- `DATABASE_URL` — подключение к тестовой БД.
- `RUN_INTENT_PIPELINE_ROUTER_RAG=1` — включить `router_rag`.
- `RUN_INTENT_PIPELINE_FULL_CHAIN=1` — включить `full_chain`.
- `INTENT_PIPELINE_FORCE_RAG_SESSION_ID` — принудительный `rag_session_id` для всех кейсов.
- `INTENT_PIPELINE_RAG_SESSION_ID` — дефолтный `rag_session_id` для кейсов.
- `INTENT_PIPELINE_REINDEX_REPO_PATH` — путь к репозиторию для новой индексации.
- `INTENT_PIPELINE_REINDEX_PROJECT_ID` — `project_id` для новой сессии (опционально).

Если указан `INTENT_PIPELINE_REINDEX_REPO_PATH`, раннер создаёт новую `rag_session`, индексирует репозиторий и использует этот `rag_session_id` для retrieval.

## Артефакты

Каждый прогон пишет JSONL в `tests/pipeline_setup/test_results`.
Формат имени:

- `<test_name>_<YYYYMMDD_HHMMSS>.jsonl`

Примеры:

- `test_intent_router_only_matrix_20260305_183010.jsonl`
- `test_intent_router_rag_pipeline_20260305_183045.jsonl`

## Запуск

- `pytest tests/pipeline_setup/suite_02_pipeline/pipeline_intent_rag/test_intent_router_only_matrix.py -q`
- `RUN_INTENT_PIPELINE_ROUTER_RAG=1 pytest -m router_rag tests/pipeline_setup/suite_02_pipeline/pipeline_intent_rag/test_intent_router_rag_pipeline.py -q`
- `RUN_INTENT_PIPELINE_FULL_CHAIN=1 pytest -m full_chain tests/pipeline_setup/suite_02_pipeline/pipeline_intent_rag/test_intent_router_rag_llm_pipeline.py -q`

## CLI

Запуск без `pytest`:

- `python3 -m tests.pipeline_setup.suite_02_pipeline.pipeline_intent_rag run --mode router_only`
- `python3 -m tests.pipeline_setup.suite_02_pipeline.pipeline_intent_rag run --mode router_rag --rag-session-id <sid>`
- `python3 -m tests.pipeline_setup.suite_02_pipeline.pipeline_intent_rag run --mode full_chain --rag-session-id <sid>`

Переиндексация репозитория в новую `rag_session`:

- `python3 -m tests.pipeline_setup.suite_02_pipeline.pipeline_intent_rag reindex --repo-path /abs/path/to/repo`
- опционально: `--project-id my-project`

Команда печатает итог:

- `rag_session_id=<uuid>`

Далее этот `rag_session_id` можно передать в тестовый прогон:

- `python3 -m tests.pipeline_setup.suite_02_pipeline.pipeline_intent_rag run --mode router_rag --rag-session-id <uuid>`

Полезные опции:

- `--case-id <id>` (можно повторять)
- `--reindex-repo-path /abs/path/to/repo`
- `--reindex-project-id <project_id>`
- `--test-name <artifact_prefix>`
