본문으로 건너뛰기

[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가 비어있으면 즉시 빈 딕셔너리를 반환한다.

왜 이게 좋은가

  1. 불필요한 쿼리 제거: 도구를 사용하지 않는 대부분의 일반 채팅 요청에서 get_groups_by_member_id() DB 쿼리를 건너뛴다.
  2. 가드 절 패턴: 함수 진입부에서 무효 입력을 즉시 반환하는 가드 절(guard clause)은 코드 가독성과 성능을 동시에 개선하는 모범 패턴이다.
  3. 제로 리스크: 빈 입력에 빈 출력을 반환하는 것이므로 기능 변경이 전혀 없다.

참고 자료

댓글

관련 포스트

PR Analysis 의 다른글