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,
|
ui_tx: &UiSender,
|
||||||
ds: &mut DispatchState,
|
ds: &mut DispatchState,
|
||||||
) {
|
) {
|
||||||
let args: serde_json::Value =
|
let args: serde_json::Value = match serde_json::from_str(&call.function.arguments) {
|
||||||
serde_json::from_str(&call.function.arguments).unwrap_or_default();
|
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 args_summary = summarize_args(&call.function.name, &args);
|
||||||
let _ = ui_tx.send(UiMessage::Activity(format!("calling: {}", call.function.name)));
|
let _ = ui_tx.send(UiMessage::Activity(format!("calling: {}", call.function.name)));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue