function call 의 arguments 는 streaming 중에 JSON fragment 로 나뉘어 와. {"loc, ation":", Seoul"} 처럼 각 조각만으로는 올바른 JSON 이 아니야. 모두 이어 붙인 뒤 한 번만 json.loads 를 호출해.
모델이 token 단위로 만들기 때문이야
모델은 arguments JSON 도 token 단위로 생성하므로 전송 chunk 가 JSON 경계와 맞지 않아. 중간 fragment 를 곧바로 parsing 하면 실패하는 게 정상이고, 끝날 때까지 기다려야 해.
tool_call_id 별 accumulator 를 둬
각 tool_call_id 에 arguments_str 를 하나씩 두고 fragment 가 올 때마다 뒤에 붙여. tool call 완료 event 나 stream 종료를 확인한 뒤에만 parsing 해. SDK 가 대신 처리하는 경우도 있지만 raw httpx 에서는 직접 구현해야 해.
여러 tool call 을 섞지 마
한 turn 에 여러 도구가 동시에 호출될 수 있어. tool_calls[i].function.arguments 의 인덱스마다 별도 accumulator 를 사용해 각 JSON 문자열이 뒤섞이지 않게 해.