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`
|