fix: cancel parallel tool calls mid-execution (#489)

This commit is contained in:
Brandon Keiji 2025-05-22 10:02:45 +00:00 committed by GitHub
parent a8bfdf2d56
commit fb1d13d600
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 2 deletions

View File

@ -395,7 +395,10 @@ export const useGeminiStream = (
};
const streamingState: StreamingState =
isResponding || toolCalls.some((t) => t.status === 'awaiting_approval')
isResponding ||
toolCalls.some(
(t) => t.status === 'awaiting_approval' || t.status === 'executing',
)
? StreamingState.Responding
: StreamingState.Idle;

View File

@ -185,12 +185,19 @@ export function useToolScheduler(
useEffect(() => {
// effect for executing scheduled tool calls
if (toolCalls.every((t) => t.status === 'scheduled')) {
const signal = abortController.signal;
toolCalls.forEach((c) => {
const callId = c.request.callId;
setToolCalls(setStatus(c.request.callId, 'executing'));
c.tool
.execute(c.request.args, abortController.signal)
.execute(c.request.args, signal)
.then((result) => {
if (signal.aborted) {
setToolCalls(
setStatus(callId, 'cancelled', 'Cancelled during execution'),
);
return;
}
const functionResponse: Part = {
functionResponse: {
name: c.request.name,