From 9c93995197e88a63b5f62296659ab94e8c2d2662 Mon Sep 17 00:00:00 2001 From: sw3205933776 <3205933776@qq.com> Date: Mon, 3 Nov 2025 11:40:06 +0800 Subject: [PATCH] fix: prevent duplicate task boxes when responding with human_toolkit in multi-turn conversations (#577) --- src/components/ChatBox/UserQueryGroup.tsx | 18 ++++++++++++++++++ utils/__pycache__/__init__.cpython-310.pyc | Bin 213 -> 193 bytes .../traceroot_wrapper.cpython-310.pyc | Bin 2359 -> 2523 bytes 3 files changed, 18 insertions(+) diff --git a/src/components/ChatBox/UserQueryGroup.tsx b/src/components/ChatBox/UserQueryGroup.tsx index f82811b22..1022830a2 100644 --- a/src/components/ChatBox/UserQueryGroup.tsx +++ b/src/components/ChatBox/UserQueryGroup.tsx @@ -38,7 +38,25 @@ export const UserQueryGroup: React.FC = ({ // Show task if this query group has a task message OR if it's the most recent user query during splitting // During splitting phase (no to_sub_tasks yet), show task for the most recent query only + // Exclude human-reply scenarios (when user is replying to an activeAsk) + const isHumanReply = queryGroup.userMessage && + activeTaskId && + chatState.tasks[activeTaskId] && + (chatState.tasks[activeTaskId].activeAsk || + // Check if this user message follows an 'ask' message in the message sequence + (() => { + const messages = chatState.tasks[activeTaskId].messages; + const userMessageIndex = messages.findIndex((m: any) => m.id === queryGroup.userMessage.id); + if (userMessageIndex > 0) { + // Check the previous message - if it's an agent message with step 'ask', this is a human-reply + const prevMessage = messages[userMessageIndex - 1]; + return prevMessage?.role === 'agent' && prevMessage?.step === 'ask'; + } + return false; + })()); + const isLastUserQuery = !queryGroup.taskMessage && + !isHumanReply && activeTaskId && chatState.tasks[activeTaskId] && queryGroup.userMessage && diff --git a/utils/__pycache__/__init__.cpython-310.pyc b/utils/__pycache__/__init__.cpython-310.pyc index 113ee8a65bb0180076b75b17e2c91073652d0ad3..10d1d4a69c028b0fa2e5b31e6afd01340e2b871d 100644 GIT binary patch delta 37 rcmcc0c#x4dpO=@50SMMha%4JAej&TeQ4UTb1EzT~2qF|(sFjwQiiKD~u%Xr=AkjBULfj2wv{Wck z;D4i8S`-b_>eBXQX;lX_Je`aT*WYQ%%J_M{$ zNf7cYHrIn`v!M6>-04j5*lbyQHn)KsF(hcT9PXgS**Xc6CJ_TKXMn^DZO+i(&ISqL z1wjYd3E{2)k?2Ct>yu^@2Lgg_p74~gMXC!x1e0yy^wNDI+nSwd4en*Quk%hb%d=u= z2hckf!#fm{m^!g|2Gb&^-5_R8OgOn4H7p&kv*4QP>?B&t#125>IPDPOE*zDqbt=yJTQ*3u?qOmK&PVJ!6Xzkb3A6kU8${F9Gq<$N(VOH&$&t0C{7xJ*N zEjHCx^DRuOb!!~%sRL^srqo9(NZ*Zrz|`VXlgjC{AC?4opq@Cjsfy0Zf|jG@s;qB| zwJ7RL)(`8AR(-1_CbtgMXXj3EG=EhLuQ#Y~PH}KLW(>!Y*HXHnfEDI$>g&0UQAdP_ z(u#`{T6ng)R$g3MTV1VgmY=+MvP4Jk?Dyb% zhL9gAxfo278~VoN?RM+b7%|R}pgFRRZEgcWhSrR5M}WvoVV+%(;R@O{f=+{QSJ=Xx z0uaIGxdo9u{W3Gk9~XEr)rKDTgntB>6{RDJE9lM`FJMlrYL>^s%;aU^ObM@uA{M8> ztNWrlTtg3iQNhxCimPuZkntv#v7(2#Xjc8tZ0+34oY%0p0A3gMc>`+;JzAe&{Uh*o zG#-+6Lk*z)S-~Of-U%MZLdJm@OA!XQMEop?CV>=_NNZtVjFT&!ZudM5PLgmG2dZGS zz)^d~SJ+a_d<8A_+I&KnmilSFgG=g^Z9rFjU{~8)dZW_&2foghERhFKMJL_0sllfv zmCa9<1lUut-7DQp+t)R`y!I&Vd=N$Im%V$tZOCR?DyPuU(B4?ulY?Y13J)dKd}$>w zCgHd*Q(M_eVe_wyQ6k3AW%|YHi*py6%FA4b%j$mSUS~&(E^)!pN25{k9O_UPEb7y| RX)y;XTJ^2Gn`K#WjX&`PfFu9_