fix: reset stop flag after cancellations
This commit is contained in:
parent
aee18837e4
commit
fd00fda96e
@ -1249,21 +1249,18 @@ def handle_stop_task():
|
|||||||
"""处理停止任务请求"""
|
"""处理停止任务请求"""
|
||||||
print(f"[停止] 收到停止请求: {request.sid}")
|
print(f"[停止] 收到停止请求: {request.sid}")
|
||||||
|
|
||||||
# 检查是否有正在运行的任务
|
task_info = stop_flags.get(request.sid)
|
||||||
if request.sid in stop_flags and isinstance(stop_flags[request.sid], dict):
|
if not isinstance(task_info, dict):
|
||||||
# 获取任务引用并取消
|
task_info = {'stop': False, 'task': None, 'terminal': None}
|
||||||
task_info = stop_flags[request.sid]
|
stop_flags[request.sid] = task_info
|
||||||
if 'task' in task_info and not task_info['task'].done():
|
|
||||||
|
if task_info.get('task') and not task_info['task'].done():
|
||||||
debug_log(f"正在取消任务: {request.sid}")
|
debug_log(f"正在取消任务: {request.sid}")
|
||||||
task_info['task'].cancel()
|
task_info['task'].cancel()
|
||||||
|
|
||||||
# 设置停止标志
|
|
||||||
task_info['stop'] = True
|
task_info['stop'] = True
|
||||||
if task_info.get('terminal'):
|
if task_info.get('terminal'):
|
||||||
reset_system_state(task_info['terminal'])
|
reset_system_state(task_info['terminal'])
|
||||||
else:
|
|
||||||
# 如果没有任务引用,使用旧的布尔标志
|
|
||||||
stop_flags[request.sid] = True
|
|
||||||
|
|
||||||
emit('stop_requested', {
|
emit('stop_requested', {
|
||||||
'message': '停止请求已接收,正在取消任务...'
|
'message': '停止请求已接收,正在取消任务...'
|
||||||
@ -1864,12 +1861,13 @@ def process_message_task(terminal: WebTerminal, message: str, sender, client_sid
|
|||||||
# 创建可取消的任务
|
# 创建可取消的任务
|
||||||
task = loop.create_task(handle_task_with_sender(terminal, message, sender, client_sid))
|
task = loop.create_task(handle_task_with_sender(terminal, message, sender, client_sid))
|
||||||
|
|
||||||
# 存储任务引用,以便取消
|
entry = stop_flags.get(client_sid)
|
||||||
if client_sid not in stop_flags:
|
if not isinstance(entry, dict):
|
||||||
stop_flags[client_sid] = {'stop': False, 'task': task, 'terminal': terminal}
|
entry = {'stop': False, 'task': None, 'terminal': None}
|
||||||
else:
|
stop_flags[client_sid] = entry
|
||||||
stop_flags[client_sid]['task'] = task
|
entry['stop'] = False
|
||||||
stop_flags[client_sid]['terminal'] = terminal
|
entry['task'] = task
|
||||||
|
entry['terminal'] = terminal
|
||||||
|
|
||||||
try:
|
try:
|
||||||
loop.run_until_complete(task)
|
loop.run_until_complete(task)
|
||||||
@ -1907,7 +1905,6 @@ def process_message_task(terminal: WebTerminal, message: str, sender, client_sid
|
|||||||
|
|
||||||
finally:
|
finally:
|
||||||
# 清理任务引用
|
# 清理任务引用
|
||||||
if client_sid in stop_flags and isinstance(stop_flags[client_sid], dict):
|
|
||||||
stop_flags.pop(client_sid, None)
|
stop_flags.pop(client_sid, None)
|
||||||
|
|
||||||
def detect_malformed_tool_call(text):
|
def detect_malformed_tool_call(text):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user