Fix the issue of incorrect finish reason in final stream response chunk returned during tool call (#7708)

Co-authored-by: Xinyuan Tong <115166877+JustinTong0323@users.noreply.github.com>
This commit is contained in:
xianzhiT
2025-07-24 04:28:53 +08:00
committed by GitHub
parent a99801e075
commit c87d4fec99
2 changed files with 20 additions and 4 deletions

View File

@@ -484,7 +484,10 @@ class OpenAIServingChat(OpenAIServingBase):
# Handle tool calls
if request.tool_choice != "none" and request.tools:
async for chunk in self._process_tool_call_stream(
async for (
chunk,
tool_call_finish_reason_type,
) in self._process_tool_call_stream(
index,
delta,
parser_dict,
@@ -492,7 +495,10 @@ class OpenAIServingChat(OpenAIServingBase):
request,
finish_reason_type,
):
yield chunk
if chunk:
yield chunk
finish_reason_type = tool_call_finish_reason_type
else:
# Regular content
if delta or not (
@@ -865,7 +871,7 @@ class OpenAIServingChat(OpenAIServingBase):
choices=[choice_data],
model=request.model,
)
yield f"data: {chunk.model_dump_json()}\n\n"
yield f"data: {chunk.model_dump_json()}\n\n", finish_reason_type
# Yield tool calls
for call_item in calls:
@@ -920,4 +926,7 @@ class OpenAIServingChat(OpenAIServingBase):
choices=[choice_data],
model=request.model,
)
yield f"data: {chunk.model_dump_json()}\n\n"
yield f"data: {chunk.model_dump_json()}\n\n", finish_reason_type
if finish_reason_type == "stop":
yield None, "tool_calls"