Skip to content

Implement summary and tag validation logic#16

Open
imyeyun wants to merge 8 commits into
PyTorchKR:mainfrom
imyeyun:master
Open

Implement summary and tag validation logic#16
imyeyun wants to merge 8 commits into
PyTorchKR:mainfrom
imyeyun:master

Conversation

@imyeyun

@imyeyun imyeyun commented May 14, 2026

Copy link
Copy Markdown

이슈 : #7

구현 내용

  • PR 환경에서 data/*.yaml 전체를 매번 검증하지 않고, 새롭게 추가된 entry(id)만 LLM 검증하도록 워크플로우를 개선했습니다.
  • scripts/validate_llm_metadata.py에 --entry-ids 옵션을 추가하여, 전달된 ID 목록에 대해서만 검증하도록 지원했습니다.
  • 기존 영어 요약문(description_en) 검증에 더해, 한국어 요약문(description_ko)도 검증 대상에 포함했습니다.
  • LLM 응답의 reason은 한국어로 작성하도록 프롬프트 규칙을 보강했습니다.
  • 결과 객체(ValidationResult)에 summary_ko 필드를 반영해 한국어 요약문도 리포트 데이터에 포함되도록 했습니다.
  • 관련 단위 테스트를 최신 구조에 맞게 수정했습니다.
  • 추가된 entry에대한 PR에 검증 결과 댓글 생성

실행 방법

1) GitHub Actions에서 실행
워크플로우 파일: .github/workflows/llm-metadata-validation.yml

동작 방식:

pull_request 이벤트에서 data/*.yaml 변경 시 실행

PR에서는 diff 기준으로 신규 추가된 id만 추출하여 검증

신규 추가 id가 없으면 스킵 리포트 생성

schedule, workflow_dispatch에서는 전체 또는 지정 모드로 실행

2) 로컬 실행

python scripts/validate_llm_metadata.py \
  --mode report \
  --output reports/llm_validation_report.json \
  --summary-output reports/llm_validation_summary.md

3) 특정 엔트리만 실행

python scripts/validate_llm_metadata.py \
  --mode report \
  --entry-ids "entry_id_1,entry_id_2" \
  --output reports/llm_validation_report.json \
  --summary-output reports/llm_validation_summary.md

실행 결과

PR에서 신규로 추가된 데이터가 있을 경우: 해당 ID만 검증 리포트 생성

PR에서 신규 추가 데이터가 없을 경우: 스킵 상태 리포트 생성

검증 시 영어/한국어 요약문 모두 근거 기반으로 판단

reason은 한국어로 반환

테스트 실행 방법 및 결과

테스트 실행
pytest -q tests/test_validate_llm_metadata.py
테스트 결과
11 passed in 0.21s

@imyeyun imyeyun requested a review from jih0-kim as a code owner May 14, 2026 08:26

@jih0-kim jih0-kim left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@imyeyun
코멘트 드린 내용 확인 부탁드립니다!
그리고 실제 동작 확인을 위해, 기존 yaml에 있는 항목 몇 가지로 로컬에서 돌려본 결과를 PR에 첨부해주실 수 있을까요?

Comment on lines +19 to +21
options:
- report
- strict

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 옵션을 사용하는 게 어떤 의미인지 알 수 있을까요? 각 옵션별로 어떻게 동작하는지 궁금합니다.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

report와 strict 둘 다 검증 로직 자체는 같으나 빌드 실패 처리가 다릅니다! report는 요약문이나 태그 검증이 fail로 나오거나 API키가 없어도 최종 결과 report 생성을 위해 빌드 실패로 이어지지는 않지만 strict는 바로 빌드 실패로 이어집니다. 현재 default로 report로 설정하였습니다.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

strict 옵션은 현재 불필요한 기능이라면 제거해주셔도 좋을 것 같습니다~!

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

strict 옵션을 삭제하려고 했으나 품질 기준 미달(fail)일 때 의도적으로 실패(exit 1) 시켜서 병합 전 차단이 가능한 옵션이어서 빠른 테스트시 유용할 것 같아 우선 남겨두었습니다!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@imyeyun
현재 PR에 대해 LLM 검증 통과/실패 결과를 댓글로만 달아주고 머지(병합)와는 관련이 없을텐데 어떤 의미인지 조금 더 설명 부탁드립니다!

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

strict옵션은 수동으로 실행하였을 때 fail 항목이 있으면 exit code 1로 종료해서 워크플로를 실패시키는 모드였는데 지금 PR에서는 통과/실패를 댓글로만 안내하고 병합과는 직접 연결되지 않습니다.
action summary로 전체 데이터 점검을 하지 않기로 했기 때문에 사용할 일이 많지 않을 것 같아 삭제 진행 하겠습니다!

if: github.event_name == 'pull_request' && steps.changed-ids.outputs.entry_ids == ''
run: |
mkdir -p reports
cat <<'EOF' > reports/llm_validation_report.json

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EOF 앞뒤에 따옴표가 붙으면 뒤에 이어지는 코드에서 변수 치환이 제대로 되지 않는 것으로 보여, 확인 부탁드립니다.
66L도 같이 확인 부탁드려요.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네 멘토님 말대로 따옴표 수정이 필요할 것같습니다! 따옴표 삭제 후 로컬 실행 결과 변수 치환 제대로 되는 것 확인했습니다. 곧 수정 내용 올리겠습니다!
image

@imyeyun

imyeyun commented May 20, 2026

Copy link
Copy Markdown
Author

@imyeyun 코멘트 드린 내용 확인 부탁드립니다! 그리고 실제 동작 확인을 위해, 기존 yaml에 있는 항목 몇 가지로 로컬에서 돌려본 결과를 PR에 첨부해주실 수 있을까요?

python scripts/validate_llm_metadata.py 명령어 실행 시 생성된 llm_validation_summary.md파일 일부 첨부해드립니다!

`# LLM Metadata Validation

  • Mode: report
  • Status: completed
  • Pass: 11
  • Warning: 19
  • Fail: 1
Entry Type Verdict Tag score Summary score Notes
lerobot model pass 1.00 1.00 README 내용이 제출된 태그와 요약문을 모두 명확하게 뒷받침합니다. 제공된 Abstract는 LeRobot 프로젝트와 무관한 내용이지만, 제출된 요약문 내용이 Abstract에 의해 반박되거나 모순되지 않으므로 최종 판정에는 영향을 미치지 않습니다.
pi0 model warning 1.00 0.75 unsupported claims: whole-body control, 전신 제어
openvla model pass 1.00 1.00 제출된 모든 태그와 요약문 내용이 README 및 Abstract 근거에 의해 명확하게 뒷받침됩니다.
octo model pass 1.00 1.00 제출된 태그(generalist, transformer, multi-robot)는 README와 Abstract에서 명확하게 언급되거나 강력하게 암시되어 충분히 뒷받침됩니다. 영어 및 한국어 요약문 또한 'transformer-based', '800k+ robot trajectories', 'diverse robot morphologies', 'tokenized observations' 등의 핵심 주장이 README와 Abstract의 내용과 정확히 일치하여 모두 근거로 충분히 뒷받침됩니다.
act model fail 0.75 0.50 unsupported tags: CVAE / unsupported claims: from 50 demonstrations, using a CVAE-based transformer, 50개의 시연만으로, CVAE 기반 트랜스포머로
diffusion-policy model warning 1.00 0.85 unsupported claims: Achieves state-of-the-art performance on 11 robotic manipulation tasks., 11개의 로봇 조작 태스크에서 최고 성능을 달성합니다.
mobile-aloha model pass 1.00 1.00 제출된 모든 태그와 요약문 내용이 README 및 Abstract 근거에 의해 충분히 뒷받침됩니다. unsupported_tags 및 unsupported_claims가 없습니다.
groot model pass 1.00 1.00 제출된 태그와 요약문은 README 및 Abstract의 내용과 완벽하게 일치하며, 모든 주장이 명확한 근거로 뒷받침됩니다. 'humanoid', 'foundation-model', 'NVIDIA', 'cross-embodiment' 태그는 모두 문서에서 직접적으로 언급되거나 그 의미가 명확히 확인됩니다. 요약문의 'NVIDIA의 휴머노이드 파운데이션 모델', '교차 구현 일반화', '비전-언어 이해와 행동 생성 결합' 등의 핵심 주장 또한 README와 Abstract에서 상세히 설명되고 있습니다.
roboflamingo model pass 1.00 1.00 제출된 태그(VLA, CALVIN, OpenFlamingo)는 README와 Abstract에서 명확하게 언급되거나 충분히 유추 가능한 내용입니다. 영어 및 한국어 요약문 또한 README와 Abstract의 핵심 내용을 정확하게 반영하고 있으며, 근거와 모순되거나 과장된 주장이 없습니다.
gr1 model pass 1.00 1.00 제출된 태그와 요약문 모두 README 및 Abstract 근거에 의해 명확하게 뒷받침됩니다. 특히 요약문은 논문 제목과 핵심 내용을 정확히 반영하고 있습니다.

@jih0-kim

Copy link
Copy Markdown
Member

좋습니다! LLM이 검증을 1차적으로 해주니 훨씬 더 든든하네요.
현재는 결과가 Github Actions Summary에만 표시돼서 컨트리뷰터가 직접 탭을 찾아 봐야 하는데, PR 댓글로 달아주면 알림도 자동으로 가고 훨씬 접근하기 쉬울 것 같아요.
이 부분도 한 번 검토해 주실 수 있나요?

Comment thread scripts/validate_llm_metadata.py Outdated
prompt = build_prompt(entry_type, entry, evidence)

print(f"DEBUG model: {self.model}")
print(f"DEBUG api key loaded: {bool(self.api_key)}, length={len(self.api_key)}")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

API 키 길이의 노출을 막기 위해서 주석 처리 부탁드립니다.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 수정하겠습니다!

Comment on lines +69 to +73
- Mode: `${VALIDATION_MODE}`
- Status: `skipped`
- Pass: `0`
- Warning: `0`
- Fail: `0`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드 실행 로그를 보면 아래와 같이 값이 비어 있는 걸 확인할 수 있습니다.

body: '{"body":"<!-- llm-metadata-validation-comment -->\\n# LLM Metadata Validation\\n- Mode: \\n- Status: \\n- Pass: \\n- Warning: \\n- Fail: \\n- Skipped reason: No newly added metadata entries in this PR.\\n"}',

백틱이 bash에서 특수 문법으로 사용되어 수정이 필요합니다.
백틱앞에 백슬래시를 넣어서 수정해주세요. (` -> \`)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 수정 후 PR 남기겠습니다!

Comment on lines +10 to +11
schedule:
- cron: "0 2 * * 1"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

스케줄은 어떤 목적으로 작성하셨는지 설명 부탁드립니다!

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

정기적인 전체 메타데이타 성능 검토용으로 action summary기능도 남겨놓은 상태였기에 작성해두었지만 PR댓글 기능만 남기기로한 지금 삭제 진행하겠습니다!

Comment on lines +130 to +137
- name: Upload validation report
if: always()
uses: actions/upload-artifact@v4
with:
name: llm-validation-report
path: |
reports/llm_validation_report.json
reports/llm_validation_summary.md

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이제 PR에 코멘트 형식으로 결과를 알려줄 거라, 아티팩트 업로드 기능은 불필요할 것 같아요. 검토 부탁드려요.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 삭제진행하겠습니다.

@jih0-kim jih0-kim left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

꼼꼼하게 리뷰 살펴보시고 수정해주셔서 감사합니다. 코멘트 확인 부탁드려요!

@jih0-kim

Copy link
Copy Markdown
Member

@imyeyun
지난 리뷰 사항 모두 잘 반영해주셨습니다. 감사합니다!
두 가지 작업이 더 필요할 것 같아요.

  1. main 브랜치 rebase

현재 PR이 main에 비해 behind 상태이고, 그 사이 main에 추가된 워크플로우가 있어요. main에 맞춰주셔야 테스트가 원활히 될 것 같습니다. 저도 #32 에서 테스트 해보고 있거든요!

  1. 운영 흐름 테스트 후 결과 공유

머지 후 기존과 같이 동작하는지 테스트해주실 수 있을까요?
conflict 여부 정도만 간단히 체크해주시고 정리해주세요!
수고하셨습니다.

@jih0-kim

Copy link
Copy Markdown
Member

@imyeyun
직접 테스트해본 결과 두 가지 버그를 발견해서 공유드립니다.

  1. ID 감지 정규식이 YAML 리스트 형식을 처리하지 못함
    data/models.yaml은 - id: foo 형태인데, 현재 정규식 ^+\s*id:는 +와 id: 사이의 - (리스트 마커)를 인식하지 못해 매칭 실패해요. 결과적으로 신규 모델 추가 PR에서 "No newly added metadata entries"로 skip 처리 됩니다. 예시: 링크

  2. rg(ripgrep)이 ubuntu-latest에 설치되어 있지 않음
    CI 로그에서 rg: command not found 에러가 납니다. ripgrep을 별도 설치하면 되는데, 그보다는 grep으로 교체하면 될 것 같아요.

-          | rg '^\+\s*id:\s*' -o -r '$0' \
-          | sed -E 's/^\+\s*id:\s*//' \
+          | grep -oE '^\+\s*-?\s*id:.*' \
+          | sed -E 's/^\+\s*-?\s*id:\s*//' \

이 수정을 적용하고 더미 entry로 테스트한 결과: 링크

두 가지 사항 검토 후 의견 및 수정 부탁드리겠습니다~!

@imyeyun

imyeyun commented Jun 22, 2026

Copy link
Copy Markdown
Author

@imyeyun 직접 테스트해본 결과 두 가지 버그를 발견해서 공유드립니다.

  1. ID 감지 정규식이 YAML 리스트 형식을 처리하지 못함
    data/models.yaml은 - id: foo 형태인데, 현재 정규식 ^+\s*id:는 +와 id: 사이의 - (리스트 마커)를 인식하지 못해 매칭 실패해요. 결과적으로 신규 모델 추가 PR에서 "No newly added metadata entries"로 skip 처리 됩니다. 예시: 링크
  2. rg(ripgrep)이 ubuntu-latest에 설치되어 있지 않음
    CI 로그에서 rg: command not found 에러가 납니다. ripgrep을 별도 설치하면 되는데, 그보다는 grep으로 교체하면 될 것 같아요.
-          | rg '^\+\s*id:\s*' -o -r '$0' \
-          | sed -E 's/^\+\s*id:\s*//' \
+          | grep -oE '^\+\s*-?\s*id:.*' \
+          | sed -E 's/^\+\s*-?\s*id:\s*//' \

이 수정을 적용하고 더미 entry로 테스트한 결과: 링크

두 가지 사항 검토 후 의견 및 수정 부탁드리겠습니다~!

말씀해 주신 내용 수정 완료하였고 fail발생시 발생하게된 원인 태그나 요약문만 적는 것보다는 추가적인 설명도 적어주는 것이 이해하는데 더 편할 것 같아서 설명문을 추가하도록 수정하였습니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants