agent: validate tool call arguments before dispatch
Reject tool calls with malformed JSON arguments early, returning a clear error to the model instead of silently defaulting to null and dispatching anyway. Prevents cascading failures when the model generates truncated tool call arguments. Co-Authored-By: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
060ab10340
commit
b0f09a8f43
1 changed files with 10 additions and 2 deletions
|
|
@ -485,8 +485,16 @@ impl Agent {
|
|||
ui_tx: &UiSender,
|
||||
ds: &mut DispatchState,
|
||||
) {
|
||||
let args: serde_json::Value =
|
||||
serde_json::from_str(&call.function.arguments).unwrap_or_default();
|
||||
let args: serde_json::Value = match serde_json::from_str(&call.function.arguments) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
let err = format!("Error: malformed tool call arguments: {e}");
|
||||
let _ = ui_tx.send(UiMessage::Activity(format!("rejected: {} (bad args)", call.function.name)));
|
||||
let mut me = agent.lock().await;
|
||||
me.apply_tool_result(call, err, ui_tx, ds);
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
let args_summary = summarize_args(&call.function.name, &args);
|
||||
let _ = ui_tx.send(UiMessage::Activity(format!("calling: {}", call.function.name)));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue