mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-19 09:33:53 +00:00
fix: cancel parallel tool calls mid-execution (#489)
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user