119 lines
3.5 KiB
Markdown
119 lines
3.5 KiB
Markdown
# 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=<uuid>
|
||
```
|
||
|
||
После этого `rag_session_id` можно использовать в описании кейса:
|
||
|
||
```yaml
|
||
cases:
|
||
- id: explain-existing-session
|
||
runner: runtime
|
||
mode: router_rag
|
||
query: "Как работает OrderService?"
|
||
input:
|
||
rag_session_id: "<uuid>"
|
||
```
|
||
|
||
Если в кейсе вместо `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/<run_name>/<timestamp>/`
|
||
|
||
Там создаются:
|
||
|
||
- `*.json` по каждому кейсу
|
||
- `*.md` по каждому кейсу
|
||
- `summary.md`
|