PR-Agent의 /algo 디렉터리는 기능의 중심, 핵심 알고리즘, 유틸리티 함수, 그리고 다양한 AI 모델과의 상호작용을 위한 핸들러를 포함하고 있습니다.
/aglo 디렉터리 내부에서 다양한 문제점이 발견되었습니다.
조원들이 분석하고 식별한 주요 문제점들
(AI 핸들러 및 토큰 핸들러의 잠재적 비효율성, 일관성 없는 오류 처리, 특정 함수의 로깅 부족 등)을 해결하여 모듈의 전반적인 완성도를 높이는 것을 목표로 합니다.
AI Handler (/ai_handlers)
toekn_handler.py, Handler Blame, langchain_ai_handler.py)Utils (/utils.py & /pr_processing.py)
load_yaml, utils.convert_to_markdown_v2, pr_processing.py)toekn_handler.py의 count_tokens 리팩토링
Issue #1782
내용
count_tokens 메소드가 force_accurate 플래그 처리, 모델 타입 확인, 모델별 계산 함수 라우팅 등을 직접 수행하는 구조를 개선하여,
향후 다양한 모델 지원 시 확장성과 유지보수성을 높임.주요 작업
count_tokens의 핵심 로직(기본 추정치 계산, force_accurate 분기)은 유지.determine_accurate_token_count()와 같은 위임 메소드를 통해 호출하도록 구조 변경.기대 효과
이를 통해 count_tokens 메소드는 안정적으로 유지하고,
신규 모델 지원 시 모델별 계산 로직만 해당 위임 부분에 추가/수정하도록 구조를 개선합니다.
LangChainOpenAIHandler 견고성 및 인터페이스 준수 리팩토링
Issue #1784
langchain 라이브러리 미설치 시 ImportError가 숨겨져 런타임 NameError로 이어져 사용자 디버깅을 어렵게 함.LangChainOpenAIHandler.chat_completion 메소드 시그니처에 BaseAiHandler의 추상 메소드에 정의된 img_path 파라미터 누락으로 LSP 위반.async def chat_completion 내 동기적 self.chat() 호출로 인한 이벤트 루프 블로킹 문제 인지 (별도 이슈로 다룰 예정).LangChainOpenAIHandler.__init__에서 langchain 미설치 시 명시적 ImportError 발생시켜 오류 리포팅 명확화.LangChainOpenAIHandler.chat_completion 시그니처에 img_path: Optional[str] = None 추가 및 미사용 시 경고 로깅.BaseAiHandler 구현체의 chat_completion 시그니처에 img_path 파라미터를 추가하여 인터페이스 일관성 확보.langchain 의존성 누락 시 사용자에게 명확한 오류 메시지 제공.chat_completion 메소드 시그니처 일관성을 확보하여 LSP 준수 및 타입 안정성 향상.LangChainOpenAIHandler의 완전한 비동기 처리를 위한 기반 마련.pr_processing.py의 generate_full_patch() 함수 기능 분해
Issue #1788
generate_full_patch() 함수가 파일 스킵 여부 확인, 토큰 제한 검증, 패치 포맷팅, 파일 목록 관리, 로깅 등
다중 책임을 가져 코드 복잡성 및 유지보수 어려움 발생.generate_full_patch() 함수의 각 논리적 단위를 명확한 역할을 가진 여러 헬퍼 함수로 분리
(예: should_skip_file(), is_token_limit_exceeded(), is_patch_too_large(), format_patch()).generate_full_patch() 함수는 분리된 헬퍼 함수들을 호출하는 방식으로 재구성하여 로직 흐름을 단순화.