Фикс состояния

This commit is contained in:
2026-03-12 16:55:23 +03:00
parent 417b8b6f72
commit 6ba0a18ac9
1445 changed files with 620025 additions and 885 deletions

View File

@@ -0,0 +1,118 @@
# 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`