Files
agent/tests/pipeline_setup_v2
..
2026-03-12 16:55:23 +03:00
2026-03-12 16:55:23 +03:00
2026-03-12 16:55:23 +03:00
2026-03-12 16:55:23 +03:00
2026-03-12 16:55:23 +03:00
2026-03-12 16:55:23 +03:00
2026-03-12 16:55:23 +03:00

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/ — артефакты прогонов

Запуск

PYTHONPATH=. python -m tests.pipeline_setup_v2.run \
  --cases-dir tests/pipeline_setup_v2/cases/suite_01_synthetic \
  --run-name suite_01_smoke
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 заранее и подставлять его в кейсы, можно отдельно запустить индексатор:

PYTHONPATH=. python -m tests.pipeline_setup.suite_02_pipeline.cli.index_repo \
  --repo-path /absolute/path/to/repo \
  [--project-id my-project]

На выходе индексатор печатает:

rag_session_id=<uuid>

После этого rag_session_id можно использовать в описании кейса:

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