본문으로 건너뛰기

[툴 파서] 역슬래시 이스케이프 예외처리 수정

https://github.com/vllm-project/vllm/pull/46708

목적

make_valid_python (in vllm/tool_parsers/utils.py )은 스트리밍 중에 불완전한 파이썬 도구 호출 표현식을 닫기 위해 누락된 닫는 문자를 추가하는 데 사용됩니다. 닫는 따옴표가 문자열을 종료하는지 여부를 판단하기 위해 바로 앞의 문자 하나만 검사합니다.

if index > 0 and text[index - 1] == "\\":
pass # treat quote as escaped
else:
bracket_stack.pop()

이는 연속  된 백슬래시의 경우에 잘못된 동작입니다 . 예를 들어, "a\\" 이스케이프된 백슬래시 뒤에 실제  닫는 따옴표가 오는 경우, 단일 문자 조회 방식은 \ 따옴표를 이스케이프된 것으로 잘못 처리하여 문자열이 열린 상태로 유지되고 유효하지 않거나 구문 분석할 수 없는 결과가 생성됩니다.

이 PR은 따옴표 앞에 있는 연속된 백슬래시의 개수를 세고, 그 개수가 홀수  일 때만 따옴표를 이스케이프 처리된 것으로 간주합니다 .

중복이 아닙니다

제출 전 열려있는 PR과 이슈를 검색했습니다.

  • gh pr list --repo vllm-project/vllm --state open --search "make_valid_python" 텍스트 청크 이후 도구 호출 활성화  #17311 → 관련 없는 2025년 초안(

    , "텍스트 청크 이후 도구 호출 활성화")만 해당됩니다.

  • gh search issues --repo vllm-project/vllm 'make_valid_python backslash escape' → 검색 결과가 없습니다.

현재 열려 있는 PR이나 이슈에서 이 역슬래시 이스케이프 카운팅 버그를 해결하지 못했습니다.

테스트

일반, 짝수 개의 역슬래시, 홀수 개의 역슬래시 입력을 모두 포함하는 회귀 테스트를 tests/tool_parsers/test_utils.py ( ) 안에 추가했습니다.TestMakeValidPythonEscapes

  • 패치된 버전은 make_valid_pythonNone 네 가지 경우 모두 통과합니다. 접두사 함수는

    짝수 개의 백슬래시가 있는 경우를 반환하므로 새 테스트에서 회귀 오류를 잡아냅니다.

  • python -m ruff check vllm/tool_parsers/utils.py tests/tool_parsers/test_utils.py → 모든 검사 통과.

  • python -m ruff format --diff <same files> → 이미 서식이 지정되었습니다.