# pipeline_setup_v2 Новый общий harness для двух семейств прогонов: - `code_qa_eval` — synthetic/golden проверки - `runtime` — router_only / router_rag / full_chain ## Идея Один runner: - читает все `*.yaml` из папки с кейсами - для кейса принимает либо `repo_path`, либо `rag_session_id` - при `repo_path` сам индексирует репозиторий и получает `rag_session_id` - запускает выбранный runner/mode - проверяет ожидания - пишет per-case артефакты и `summary.md` ## Структура - `run.py` — верхнеуровневый entrypoint - `llm_prompts.yaml` — общий каталог LLM-промтов для `full_chain` - `cases/` — папки с YAML-наборами кейсов - `core/` — общий harness: модели, loader, validator, session provider, artifact writer, orchestration - `runtime/` — конкретные исполнители для `runtime` и `code_qa_eval` - `test_results/` — артефакты прогонов ## Запуск ```bash PYTHONPATH=. python -m tests.pipeline_setup_v2.run \ --cases-dir tests/pipeline_setup_v2/cases/suite_01_synthetic \ --run-name suite_01_smoke ``` ```bash PYTHONPATH=. python -m tests.pipeline_setup_v2.run \ --cases-dir tests/pipeline_setup_v2/cases/suite_02_pipeline \ --run-name suite_02_smoke ``` ## Индексация RAG Если вы хотите получить `rag_session_id` заранее и подставлять его в кейсы, можно отдельно запустить индексатор: ```bash PYTHONPATH=. python -m tests.pipeline_setup.suite_02_pipeline.cli.index_repo \ --repo-path /absolute/path/to/repo \ [--project-id my-project] ``` На выходе индексатор печатает: ```bash rag_session_id= ``` После этого `rag_session_id` можно использовать в описании кейса: ```yaml cases: - id: explain-existing-session runner: runtime mode: router_rag query: "Как работает OrderService?" input: rag_session_id: "" ``` Если в кейсе вместо `rag_session_id` указан `repo_path`, то `pipeline_setup_v2` сам выполнит индексацию перед прогоном. ## Формат кейсов Runner читает несколько YAML-файлов из одной папки. Поддерживаемые поля: - `defaults.runner`: `runtime` или `code_qa_eval` - `defaults.mode`: `router_only`, `router_rag`, `full_chain` - `defaults.input.repo_path` - `defaults.input.project_id` - `defaults.input.rag_session_id` На уровне кейса: - `id` - `query` - `runner` - `mode` - `input` - `expected.router.*` - `expected.retrieval.*` - `expected.llm.*` - `expected.pipeline.answer_mode` ## LLM Промпты Общий каталог промтов для `full_chain` находится в: - `tests/pipeline_setup_v2/llm_prompts.yaml` Выбор шаблона идёт в таком порядке: - `intent + sub_intent` - fallback на `intent` - fallback на `default` ## Артефакты Результаты пишутся в: - `tests/pipeline_setup_v2/test_results///` Там создаются: - `*.json` по каждому кейсу - `*.md` по каждому кейсу - `summary.md`