[pydantic-ai] 자동 리뷰 봇의 비용/시간 효율 개선을 위한 워크플로우 통합
PR 링크: pydantic/pydantic-ai#4285 상태: Merged | 변경: +430 / -238
들어가며
pydantic-ai의 PR 자동화(사이즈 라벨, 카테고리 라벨, 자동 리뷰)가 여러 워크플로우 파일에 분산되어 있었습니다. 이 PR은 이를 단일 bots.yml로 통합하고, PR의 복잡도에 따라 Claude 모델을 자동 선택하는 로직을 추가하여 비용 효율을 개선합니다.
핵심 코드 분석
모델 자동 선택
- name: Select review model
id: model
run: |
CATEGORY=$(echo "$LABELS" | grep -E '^(bug|feature|docs|chore|dependency)$' | head -1)
SIZE=$(echo "$LABELS" | grep -E '^size: ' | head -1)
# Default to Opus for large/complex PRs
MODEL="claude-opus-4-6"
# Use Sonnet for docs, dependency, chore, or small/medium PRs
if [ "$CATEGORY" = "docs" ] || [ "$CATEGORY" = "dependency" ] || \
[ "$CATEGORY" = "chore" ] || [ "$SIZE" = "size: S" ] || [ "$SIZE" = "size: M" ]; then
MODEL="claude-sonnet-4-5"
fi
PR 사이즈와 카테고리 라벨을 기반으로 모델을 선택합니다. 문서 변경이나 작은 PR에는 비용이 낮은 Sonnet을, 복잡한 기능/버그 수정에는 Opus를 사용합니다.
사이즈 라벨 가중 계산
CODE=$(echo "$FILES" | jq '[.[] | select(
(.filename | (startswith("tests/") or startswith("docs/") or endswith(".md")) | not)
and (.filename != "uv.lock")
and (.filename | contains("/cassettes/") | not)
) | .additions + .deletions] | add // 0')
# Weighted score: code + 50% docs + 50% tests
SCORE=$((CODE + DOCS / 2 + TESTS / 2))
코드 변경은 100% 가중치, 문서와 테스트는 50% 가중치로 PR 사이즈를 계산합니다. uv.lock과 cassettes는 제외하여 자동 생성 파일이 사이즈를 부풀리지 않도록 합니다.
워크플로우 의존성 체인
review:
needs: [size-label, category-label]
if: >-
!failure() && !cancelled() &&
(
(github.event.action != 'labeled' && contains(..., 'auto-review')) ||
(github.event.action == 'labeled' && github.event.label.name == 'auto-review')
)
리뷰 job이 사이즈/카테고리 라벨링 이후에 실행되어, 모델 선택에 필요한 라벨이 반드시 존재합니다.
왜 이게 좋은가
Claude Opus와 Sonnet의 가격 차이가 상당하므로, PR 복잡도에 따른 모델 선택은 직접적인 비용 절감입니다. 가중 사이즈 계산으로 테스트 코드가 대량 추가된 PR이 불필요하게 비싼 모델을 사용하는 것을 방지합니다. 단일 워크플로우 파일로의 통합은 concurrency 그룹 관리와 job 의존성 설정을 단순화합니다.
정리
| 항목 | 내용 |
|---|---|
| 통합 | 분산된 봇 워크플로우를 단일 bots.yml로 통합 |
| 모델 선택 | PR 사이즈/카테고리 기반 Opus vs Sonnet 자동 선택 |
| 사이즈 계산 | 코드 100% + 문서/테스트 50% 가중치 |
참고 자료
⚠️ 알림: 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [axolotl] Flash Optimizer 지원 추가: FlashAdamW, FlashSGD, FlashLion 등 5종 커스텀 옵티마이저
- 현재글 : [pydantic-ai] 자동 리뷰 봇의 비용/시간 효율 개선을 위한 워크플로우 통합
- 다음글 [Triton] 커널 끝에 cross-CTA barrier 추가 — 클러스터 메모리 정합성 보장
댓글