벤치마크 · coding
RepoCoder
RepoCoder는 저장소 수준 코드 완성을 평가한다. 소스 파일의 어떤 위치가 주어지면 모델은 저장소 전체에서 얻은 문맥을 사용해 빠진 코드를 예측해야 한다. 벤치마크 RepoEval은 줄 및 API 호출 완성에 대해 Exact Match와 Edit Similarity를, 함수 본문 전체에 대해서는 단위 테스트 통과율을 보고한다.
자세히 보기
- 예시
- 같은 프로젝트의 다른 파일에 정의된 함수나 클래스를 호출하는, 저장소 파일 안의 절반만 작성된 한 줄을 완성하는 과제 — 올바른 완성을 위해 모델은 파일 간 저장소 문맥을 사용해야 한다.
- 채점 방식
- 줄과 API 호출 완성은 Exact Match(예측이 숨겨진 정답 코드와 정확히 일치하면 1, 아니면 0)와 Edit Similarity(1 − 정규화된 Levenshtein 거리)로 채점하며, 모든 샘플에 대해 평균 내어 백분율로 표시한다. 함수 본문 완성은 실행으로 채점한다. 생성된 본문이 원본을 대체하며 저장소의 기존 단위 테스트를 통과해야 한다.
- 검증 방식
- 줄/API 항목의 경우, 각 샘플의 예측을 소스 저장소에서 숨긴 참조 코드와 비교해 수용한다 — 정확히 일치(EM)하거나 편집 거리 기반 유사도(ES)로. 함수 완성은 생성된 본문에 대해 저장소 자체의 단위 테스트가 통과할 때만 수용된다. 학습 데이터 유출을 줄이기 위해 최신이고 고품질인 저장소가 선정되었다.
- 왜 중요한가
- 실제 코딩은 고립된 조각이 아니라 크고 기존에 존재하는 코드베이스 안에서 이루어진다. RepoCoder/RepoEval은 여러 파일에 흩어진 프로젝트 고유의 API, 심볼, 관례를 모델이 사용할 수 있는지 검증한다 — 이는 단독 함수 합성보다 코딩 도우미를 더 현실적으로 측정하는 척도다.
예제 풀이
문제
줄 수준 완성(RepoEval). 저장소에서 utils/config.py는 보조 함수
load_config(path)를 정의하고, trainer.py는 from .utils.config import load_config로 시작한다. 아래 코드와 저장소에서 검색한 파일 간 문맥을 바탕으로, __init__ 안에서 숨겨진 다음 한 줄을 예측하라:
```python
class Trainer:
def __init__(self, path):
```해답
self.config = load_config(path)
풀이
정답인 이유:
load_config는 저장소 자체의 보조 함수로 trainer.py 맨 위에서 임포트된다. 이는 파일 간 저장소 문맥으로만 드러나므로, 일반적인 추측(예: JSON 읽기를 인라인으로 작성)은 빗나간다. 이 줄은 숨겨진 정답에 대해 Exact Match로 채점하고, Edit Similarity가 부분 점수를 준다.이 벤치마크에 대해 아직 검증된 점수가 없습니다.