[Open WebUI] get_tools()에서 빈 tool_ids 조기 반환 최적화
PR 링크: open-webui/open-webui#21873 상태: Merged | 변경: +3 / -0
들어가며
Open WebUI의 get_tools() 함수는 요청에 연결된 도구들을 로드하면서 접근 제어를 위해 Groups.get_groups_by_member_id() DB 쿼리를 무조건 실행하고 있었다. 도구가 하나도 연결되지 않은 요청(tool_ids가 빈 리스트)에서도 이 쿼리가 실행되어 불필요한 DB 부하가 발생했다.
핵심 코드 분석
추가된 가드 절
async def get_tools(
request: Request, tool_ids: list[str], user: UserModel, extra_params: dict
) -> dict[str, dict]:
"""Load tools for the given tool_ids, checking access control."""
if not tool_ids:
return {}
tools_dict = {}
# Get user's group memberships for access control checks
...
단 3줄의 추가로, tool_ids가 비어있으면 즉시 빈 딕셔너리를 반환한다.
왜 이게 좋은가
- 불필요한 쿼리 제거: 도구를 사용하지 않는 대부분의 일반 채팅 요청에서
get_groups_by_member_id()DB 쿼리를 건너뛴다. - 가드 절 패턴: 함수 진입부에서 무효 입력을 즉시 반환하는 가드 절(guard clause)은 코드 가독성과 성능을 동시에 개선하는 모범 패턴이다.
- 제로 리스크: 빈 입력에 빈 출력을 반환하는 것이므로 기능 변경이 전혀 없다.
참고 자료
관련 포스트
PR Analysis 의 다른글
- 이전글 [Ray Serve] Direct Ingress 최적화: 상수 순서 정리 및 빈 프록시 조기 반환
- 현재글 : [Open WebUI] get_tools()에서 빈 tool_ids 조기 반환 최적화
- 다음글 [pytorch] CI: vLLM 테스트/벤치마크 워크플로우를 CUDA 13.0으로 전환
댓글