feat: 更新工具调用的ID处理逻辑,确保在缺失时生成唯一ID

This commit is contained in:
oudecheng 2026-06-12 11:48:01 +08:00
parent 86543f19fe
commit 87fc8cc3b7
2 changed files with 6 additions and 6 deletions

View File

@ -767,7 +767,7 @@ fn chat_message_to_ws_outbound(msg: &crate::bus::ChatMessage) -> Vec<WsOutbound>
let tc_reasoning = if has_content_or_reasoning { None } else { msg.reasoning_content.clone() }; let tc_reasoning = if has_content_or_reasoning { None } else { msg.reasoning_content.clone() };
for tool_call in tool_calls { for tool_call in tool_calls {
outbound.push(WsOutbound::ToolCall { outbound.push(WsOutbound::ToolCall {
id: msg.id.clone(), id: tool_call.id.clone(),
tool_call_id: tool_call.id.clone(), tool_call_id: tool_call.id.clone(),
tool_name: tool_call.name.clone(), tool_name: tool_call.name.clone(),
arguments: tool_call.arguments.clone(), arguments: tool_call.arguments.clone(),
@ -798,7 +798,7 @@ fn chat_message_to_ws_outbound(msg: &crate::bus::ChatMessage) -> Vec<WsOutbound>
let tool_state = msg.tool_state.as_ref().unwrap_or(&ToolMessageState::Completed); let tool_state = msg.tool_state.as_ref().unwrap_or(&ToolMessageState::Completed);
match tool_state { match tool_state {
ToolMessageState::Completed => vec![WsOutbound::ToolResult { ToolMessageState::Completed => vec![WsOutbound::ToolResult {
id: msg.id.clone(), id: msg.tool_call_id.clone().unwrap_or_else(|| uuid::Uuid::new_v4().to_string()),
tool_call_id: msg.tool_call_id.clone().unwrap_or_default(), tool_call_id: msg.tool_call_id.clone().unwrap_or_default(),
tool_name: msg.tool_name.clone().unwrap_or_default(), tool_name: msg.tool_name.clone().unwrap_or_default(),
content: msg.content.clone(), content: msg.content.clone(),
@ -809,7 +809,7 @@ fn chat_message_to_ws_outbound(msg: &crate::bus::ChatMessage) -> Vec<WsOutbound>
timestamp: Some(msg.timestamp / 1000), timestamp: Some(msg.timestamp / 1000),
}], }],
ToolMessageState::PendingUserAction => vec![WsOutbound::ToolPending { ToolMessageState::PendingUserAction => vec![WsOutbound::ToolPending {
id: msg.id.clone(), id: msg.tool_call_id.clone().unwrap_or_else(|| uuid::Uuid::new_v4().to_string()),
tool_call_id: msg.tool_call_id.clone().unwrap_or_default(), tool_call_id: msg.tool_call_id.clone().unwrap_or_default(),
tool_name: msg.tool_name.clone().unwrap_or_default(), tool_name: msg.tool_name.clone().unwrap_or_default(),
content: msg.content.clone(), content: msg.content.clone(),

View File

@ -32,7 +32,7 @@ pub(crate) fn ws_outbound_from_chat_message(message: &ChatMessage) -> Vec<WsOutb
// AssistantResponse 已携带 reasoning 时ToolCall 不再重复 // AssistantResponse 已携带 reasoning 时ToolCall 不再重复
let tc_reasoning = if has_content_or_reasoning { None } else { message.reasoning_content.clone() }; let tc_reasoning = if has_content_or_reasoning { None } else { message.reasoning_content.clone() };
outbound.extend(tool_calls.iter().map(|tool_call| WsOutbound::ToolCall { outbound.extend(tool_calls.iter().map(|tool_call| WsOutbound::ToolCall {
id: message.id.clone(), id: tool_call.id.clone(),
tool_call_id: tool_call.id.clone(), tool_call_id: tool_call.id.clone(),
tool_name: tool_call.name.clone(), tool_name: tool_call.name.clone(),
arguments: tool_call.arguments.clone(), arguments: tool_call.arguments.clone(),
@ -63,7 +63,7 @@ pub(crate) fn ws_outbound_from_chat_message(message: &ChatMessage) -> Vec<WsOutb
.unwrap_or(&ToolMessageState::Completed) .unwrap_or(&ToolMessageState::Completed)
{ {
ToolMessageState::Completed => vec![WsOutbound::ToolResult { ToolMessageState::Completed => vec![WsOutbound::ToolResult {
id: message.id.clone(), id: message.tool_call_id.clone().unwrap_or_else(|| uuid::Uuid::new_v4().to_string()),
tool_call_id: message.tool_call_id.clone().unwrap_or_default(), tool_call_id: message.tool_call_id.clone().unwrap_or_default(),
tool_name: message.tool_name.clone().unwrap_or_default(), tool_name: message.tool_name.clone().unwrap_or_default(),
content: message.content.clone(), content: message.content.clone(),
@ -74,7 +74,7 @@ pub(crate) fn ws_outbound_from_chat_message(message: &ChatMessage) -> Vec<WsOutb
timestamp: None, timestamp: None,
}], }],
ToolMessageState::PendingUserAction => vec![WsOutbound::ToolPending { ToolMessageState::PendingUserAction => vec![WsOutbound::ToolPending {
id: message.id.clone(), id: message.tool_call_id.clone().unwrap_or_else(|| uuid::Uuid::new_v4().to_string()),
tool_call_id: message.tool_call_id.clone().unwrap_or_default(), tool_call_id: message.tool_call_id.clone().unwrap_or_default(),
tool_name: message.tool_name.clone().unwrap_or_default(), tool_name: message.tool_name.clone().unwrap_or_default(),
content: message.content.clone(), content: message.content.clone(),