From 048f1fa24e371dac413ad76ce98963e532055bc9 Mon Sep 17 00:00:00 2001 From: Michael Lam Date: Wed, 6 May 2026 22:32:29 -0700 Subject: [PATCH] fix: keep assistant-only stream deltas on current turn --- api/streaming.py | 27 ++++++++++++++++++ .../1787/issue-1787-transcript-order.png | Bin 0 -> 48530 bytes tests/test_session_save_mode.py | 27 ++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 docs/pr-media/1787/issue-1787-transcript-order.png diff --git a/api/streaming.py b/api/streaming.py index ae8ebe9f..90c2a68c 100644 --- a/api/streaming.py +++ b/api/streaming.py @@ -1516,6 +1516,33 @@ def _merge_display_messages_after_agent_result(previous_display, previous_contex merged = previous_display[:] seen = {_message_identity(m) for m in merged} current_user_key = _message_identity({'role': 'user', 'content': msg_text}) + current_user_in_candidates = any( + _message_identity(m) == current_user_key for m in candidates + ) + current_user_already_checkpointed = bool( + merged and _message_identity(merged[-1]) == current_user_key + ) + if ( + current_user_key is not None + and not current_user_in_candidates + and not current_user_already_checkpointed + and any( + isinstance(m, dict) and m.get('role') in ('assistant', 'tool') + for m in candidates + ) + ): + # Some provider retry/fallback paths can return an assistant/tool delta + # without echoing the current user turn. In deferred session-save mode + # the prompt exists only in pending_user_message, so appending that delta + # directly would make the assistant bubble appear attached to the prior + # exchange and then clear the pending prompt. Materialize the current + # turn at the transcript boundary before the assistant/tool response. + current_user_msg = {'role': 'user', 'content': msg_text} + insert_at = 0 + while insert_at < len(candidates) and _is_context_compression_marker(candidates[insert_at]): + insert_at += 1 + candidates = candidates[:insert_at] + [current_user_msg] + candidates[insert_at:] + for msg in candidates: key = _message_identity(msg) if ( diff --git a/docs/pr-media/1787/issue-1787-transcript-order.png b/docs/pr-media/1787/issue-1787-transcript-order.png new file mode 100644 index 0000000000000000000000000000000000000000..b08a2a3e53bd2165acaffcd7506ca0afbba34d47 GIT binary patch literal 48530 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
    |KndP%F)kwJ7(oRqoLf+QyU2mjeufbLH^!zR) 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

    >5Gbt++Sioobc@iB&#TEh8=-_;rJ3X=0Y_ zjls*`S!w*7Y&JaZ9?rWWkt+MPqgz} z)}O8FEu0*Jra9e}S|bmbDmw$2fsn9>7A36^OQ2;P8*r$}ukP?3qAs`U1+B!kNcWPZ z&di=@(Rh;RKm@{xoP$px(Qab*k(ogArJZzyjE zZ>K)eBDu2ETyq%Vax!a$@)0`hPO5`KF@_rKe*!NJ!F@w$^w&zPcr%1G=ku@u%QSfV zxap_-P$>^-oqJ4--@E!IpP)DU8LfEjaf+?Y=Kitnu5q~%zo$DF0pLGh zr?dwg|MZs~9al#rEjRZ|75c$4%0HaN9HT}Ho6?Os<3Kt%ZgOjtJku|vrLd5ZmzkMS zqHZ1k<4~WAz?R|a7t-a@N3N;ug}uDIgE%U#+)b;#j>{=!jWz(&&gYqo%?|ZtI=L|Q zR-XMlJ=GUPoARPmFcEg5?e1nQ)g7@Fs-R)yRPMC$7A})4Vjpqe=2j1PXgcQ+#PQ2U zvG8m>ozdMV>+y_CAMWTLa#CS~+>5BDPRYH9~-Alh%cu>m5~S@sAU_ z74Cpy7w1i$MftM}n>-)4p=fiAn(C&QwRXbk7|}$p)-l>LM1}Cd#Nc-iPK73?@_xuWQ$VIsS`y-%NOXViX_E$n<~Tt#{=LLmwsHUNa|%{ZBSD1CL@*Y|7>EyXxA z-s+@hsHN|W2>mv1c}Hi*qMT?H3{!_K*6|nXi3zj$DwLnrvrbpO-KukgHSeS;1iUq5 zmq3l}+{X|P9DYk8p-}_GCwQFB(<)CDr_9+_sIR`C^iqYE%J6QwstkFH5#C#S88BRg zP%xYWO2&mK>5*(TdVY?m#jdky99cx2RNjKI*ny}z%-ll!pB#gg; zzBdb}xSD4tbY3o>C5&^|Hh7lomV~2j#Vb#>%_k7ps!FmuW}kbHGZ(VpSJ~7W<>uPW zAHmch$PAfI96`u<&@O1>@Wqe$nO{#E800xQ(x+=Wb|$ z#Iwaaan0f5iVQA$TD=fbKs`du9IXmYq>#;&0A5^01oj;~RdN?hD z*TO$JGbW>+)WkdQH2NHo8uRXK#v%-StRBFcQ7clCYDhtWpH&gBwkeqm2B$Y2&wZ7L zOI^S<80eNP;JSA#8`8hlX{`R63n<&DbYeO_DyAsS#M`VWvcB^`j0Mm8cU!GRx1_$kX7uOH^51Y|A-HepFE?w*_fPm8WxE7+ zu<(#kYSz&_YLMYroet+jl+fs64vX(OCi?@R$=1|~--X6j(*=R5ejO}5mAVpj4O5A| zy_SAa;NQCbf$RPMU#?y4uX4)k2o7Byq;d^TwvW$g+L*A!E6DD(M?JG~*RT)LpZHl? zY%i4Px}~YD=Im8+^}Zk8QHDIV9*iSYe90&>qfb!3)iG|*gwg9U=q7xVrUFSN*HqVQ z+UU5Tvvj$3x1#IMzZ-mmW|hX^NoIM~6E4%QJ(tU(xeLyq{mGk_KdKb}rs{e{7%XGf zJqP*F+x(vM2HlUUmWiq&3mTFW(v~6hNGK}-%TkV$exhGv?bX9Wt;r-WEd>;LDitTFxuzwJt z^(~YA#AJ2g>l+hB_g{Nr1DWIQZ)bhrWO9aHd)7HHi$4f{lNMF|G7HjS&*bptN*nmA zB&+PRQ$NM>f>+x=h#7I$!0Xc0MYZC$Cx3=>Jkb6Jk-Q_cLjXCv77YU48Q)x3GOTdz}M&X5#1JuDNkV6Q5j+oPlQepq5akxOR}ZTDYJ@NKvcu|S9XI(^in+Vq zPYKp1d2VFg29R9cp@qAnS1IQo8KT-N%QdH>%^e?tYZt1iuzv{{6*!B&J&4U6B_hO1 zq$cYb1$2(L4*+|6FEAVy_QsQm@OkHQzK=6++Y-R|kDDA(XBnfg04mVTEVSMSIS`3} zQEWa|m zK1OapupX}J_TBkx%`}%2%{^pb2#29G1w9y7 zN)g{D#+-Id+z#~@s@S4Bp<~VSOga(FuaN#VYJPSbATXg#23x0&jF{KdMVHjXO#7HnxJDvoRy09`!{sNq0-RD0Q}#t zZ<_d7I~Zl5p8yr*eVB;4ACj+TB1S1qoaj%(!^k2-LT)Pm08;>j0D@_vm#YiBw{uR~ zzmJnz#7}`{XOrJwo4oy6qOb}d=F10tQ|ec8CpWgSamX$xoU%%Zz~Z<4>6f$G)|_zt zMPI81TyXH%HfS%XpBAsNh@z>2y&F8Ti7rs?U8BXs%}rMIRWB}zc1n-#v1)YA#kVbt zlV7z{E;)Qk0)|}mRaX8JWn~fD*YiIcUvl%u-s89*KB8pkCCydEwY}%#{14^)cIy3E z6>1W0SAwt<>c5Pf9_Mm9gEb>HS3oQ+$RTJ;F4J+OKeHPauLI6M;d_(bnyb0>!t!1Xo6n zpE7u+6Xd>8|At98#2oDZzJskSTNe*DiQZ`qeLt=Vs@y0#@zIymJLlAeG&h{)ssJ^1 zoMSI7iz5-WJN&XKp26=1*~HGLaOA|E+Wey6tBTYo+uoZfSIghs%2gTGPp<-TlfP?x{9XMd=1?DU z6ERwL`g@skQNQYtYPk#AXp-|uZ4I_7fJ^u5)$`npzr(wkNMqF25w_JGVV|!hbKQq6 zJ-Y5Ye!c$hyZUIwoKFNSo*~m!#}TukEZ8h^fjLZXj8e@{)p2R#mZOzD&P}M@RU4&n zxYe$vZ0HKxj46wP>0FP=!|@fL)RZ)mACerGd{pxc27#+fvc@lPN}?v&t2lhv{I?j} ze3&8F#{3jscD5(a%8~EzLl^3anm;|59}8OlVRR?I7qk6)-y=;&yZ4DkP+-D|cvtWKV67R@!h9v~qJYf^*tI#5 z^#_Sy3y9w8)|-*;tDrQluh&zSB}b$s+p)&w>|Z)X=#M@pa4~tv>&*-sV-JXQJOX(^ zS7Qy?3tdegpbB-FmCl z>mN-pZ4S`%xzx*%(()zuRu4l|nQG)rooJui>8dT3!kU%uY=5KN96dEFHw_9umX!$C zXynjG4N@+`K9W9zw_2i&qX~ITe(_y6FWM`_vH9A}SD6fqk^TdFcixKXB8LKVRj}?! zvAIi5rWF@!qFBVZy#srvUyKQ`=7H@NEZ6A=;p4D5#~*n>6mKw?id>7FA)uK_c2xk) zImCJ2K?OMWdyZ{kx|tXDTB&2UX%6~Nc9$J;wnp_fKe@gP(nnrG7s7NR=U)v;PriE1 z*OE`Sd4pNZrBc+L4vfk8O4(n@&jmVw;LqbMa-ZaTZ(==NKFd66X8TiH5}ORv)par+ zDV1R5Zh5`Z=mZNsbrEQi&md|Ee)FC+x|1~jNvk5$jE7sbGZ=2E<|V;jqJR0p<^`|z zdfu)oTOswREjbvn#7ajCJwOhn@nc8KgGKgIqkqG9RR8Jo0T>8x`#Fj zardt)qQyL)AvgsYF7hVxz0fwJNOELiP{ns+z(~uus)mL-ds0&mwY!ahLdm+yq*R&e zNCA~XxXtZk5U2*um7rq!gM|#gu#~5$SUz9k6oeI?JYfwpmj=sxZz|E{7vK9my$9l{ z?OXFVDplik1d+gSrf^HQ_-ZC(gHZzipWu=zE5>9qYsjlTQ0nKICzXRPB9!-So3_|8lQ(yd!RP!*!6JDWI8o z%S?JRJ*~mD(f1R3D+O^q4o%>FQtNzQhBB`;T~5m_uCG>cvgKSZEE*;27ItI7w_~Vy zg3^g+R^*rRSq3%gGm}x-co*@r@Voy2-Q8e4F5(}vpY6&oWmcQqj?!UyG+v1BF8c=H zC+%FKU@6fl)kimRpUfexO+czFyA~6}+W~=*nbzW3h8NJq?Y!Cf=BuXIY2oSFyPY}G z{M$cIrKFUlV=AS%PF$+85yZICQFPurc`8+4U!N}ZN^u_STd>D1tn7cJ+TD9gN7A?s z&Tg5~_Zz(?b(lQg6K@aR<|QE+8b9H_&s+9f5TM+KsSi9Q&~=uu4oFbpPS*pc2cU->2sra z%#;mF3eR#K*_vzYW7EPE6>Ot33IoNRg(;JF+<-*aW6!2}IseUpOET#pl{x>9#|eo? zmYg{Qk&-Xhp6BlCuBhd=piZ&HSO@ze#CiyWPB?YvQMIW-! zi&fu9^ieE_5Czd5w>k@Pbke~^?HX{AbnslSF#f`FkmdFrqKrnrXOHW?cAj;U`aY~$ z?`gJHv_yLMG1!=^NttdxePOp+=IC0ef;n#L9$$Fl8ko9Ae{#{&gIZNryxr;M2(VvH z8y_72aO}#@AqqOflO0reG;{!DFLEIm}Zb<&AY-+&tVEg-T=?htqT0x!Rd z39%s#^X5it?J%{`)=5qC$Kz%m#`_my60owvS@JPXgStt1lqvF5f_}jji<;OL2bumj zTcZ+HIZ8kNGdhzpeF8dmXY!rmg*ZpdoT>HqL<^>mdsJvE-9Iwq9-C6>_vP`bZ|cM} zukD51Au0s*Q$JZSi7-l{5}0pVw|{8SrnrA;Ki|6NymGG^lGNH~kaEF^<4hjhkvvD{ zMGG=niwY^}BL9qrLXDNKzPS%^lx8+IFAZ$5o+XPny#Ft}h1072e7X9t&Ius^1AN+eMyu8M4tXW$8x7tVEdNrv0`zJyZZRe0rBQGJ@`v3mvxl;Xm z&%Igx8%Wi;D5lY)YXn>uXoTPXBV7M3q3j)JQSBlt%_~RpdVa)-cyQ>C%G;X|KPKM4 zIP)tGXV$xV-A?p8Rf3SdDq0=mxOQfCc;t6Kc&e0eu_K3I*wUC<;V*O)K~fS(hiyrR zs%{VrtKNyN{5R;Xi=w$BHIm0IzeV16YZLUX{b(pa=r6X+L5MyyYVh9MUwp<{n*Zph zqymf0!bLzg4g+7kMg7(P!)>-F0+7204bNC;w?pIR6w7=)>T8YuW-x(}z$Ks>cZ7cx zO^Rdq@KMxPWP=kL9S+4=W8gyl4+T+HdyQ>-LXt+*gwTDn!k8kJV2!g^lhI&vZj*ZcR;>?vJ{p*VT%4fs-Bk65;-x$`F z$MC9Xc!-aDd@R?nkK&*IuTOs7HfO5SveM*WIz-;{cO^(D!KA3TRx(zJFDbjtrCpo1OXkDd=03Sjp-kvB5#L!)Dj;u?n$+-XooVy>; zJKjLP?%yj_IU>ilHZ;mGYzpf?y{b_M1|WGJyJO31%5l!IKy+sbtP~sXLwJSGezBX` ziJe|_!(C}Mp1)rF3fQY7USM~4^CtZoUVH+;&WPtpb~or=OG<~}hXdXZy3x2^Q*`Q@p-nOT1dbB=GJ-(APYLBI#FgO^T-<4c@vMW$y7yubd+15 z@7q&enO{~f90rn?+X88L{x&s(&#h00qXZ;qR&R^{Cl4yt8(9%8ku^U<|2}9SH*fid zpA(HG=jMyQWvyaH@QVE;_HI=E8;Su76Alut#?38(ocQa#rvKG5Xp`mpeP`h`I zv5Tr4oSwBeMa-X--gEh0>sRm%doUqB8Evn-?zmw6-25_kLjYVlh8fd^EiDxvMCvzs zwi;VyF5$pWL5{F8Dh;j_pxl4n7&nx+}Y@?HU`+B`num z*5o;!4G-F$Y!NSB^j>~gosA9dZED0-BXfeuwm5miKouYT8}eWFdNOn4ibBW z8ir)38JJ_?P5%q1PY~&2b8Q71Lk+C4`v@Riz0SB9vCLVGWf8?Jh+;jw*J`xVz+}o= zPGSY`UOpP^FxR=b?Gf(!_)V-kVo`n>61my@9vwAy@Rw2<7TumZpYIMi=%&$o1b47^ zC_ON~Tyjj9&4UXk6;K`sWly^7|GG^qaWt*ev-OraWP1UnX(W`!kc?dHyWAP19xB_} zEM@L_^+QRol5JMi#B6nmgbW>#oCZVtPjvo5?H04JE`MWmS`SctR2gNd>5fqmc!3l^ z^}i*2defNd%iq1ln^f*zGU{Os#`UVQ4N2o(M^6&BiSiSqkC3!I?2PmsZ~nE zu&%lNz&Gza<9yJ`>6M~V2^|ab863+y_QqXc*4@V~$a4h>n{=?IWk;TEbFNH?^aX)% z_fVocOV?zL?n!ZEw=!16f#`#u@73#$ zGvFjlQ|Gcuaed-+X!>Ny99B_cx{5SU)XThPv@CDYEyU;RX0}Nk)~}miR62Fvd3(Fh zosxH_4RWun6j>=_${35dENK*4f7hz#lwZ{F{0~!z57AclkPgt-9!^%{w)Z7b!2c2w zaG3*~fk@6@RJq_8yK^5%KrIviR?LTyh)S|s$wT%xDw~7H3^lSV6gQhcEF%JbDDeH` zEuF=K>kdA(#>}FEMf{GLusVJG#owlk~ph)S4BHSY;L(%xVs&j%+qAjDEd_U)u> zPCCaURnf)(rWsY{-r-kX8(q5D0uC`mS!S_ju0=bUYn3cs7yt48+jStK#_3G;#-l+CP&S`)xEJO@N^?D! zc8~ci;NZ=E8$E6OQTt&_6GXl;9JBYtE4swKkb@?g^9;LAi!HC`w=Ed0ZLQa1ivl(N z(qqX#G9%6-Fk04VDdy{B?mp{)-Bqa*<-5}$(Yh@XcH?X&w_$h`b9!I3uEkyoT(JSJ zQ_X!c;C{SW{Y2es^Rggx5e0b{dHnK*_}`uI-hV7sZmMFnTkX3ysLpCyLl0t3Sbw`M z3Xf#>N}g|<-2q6-GtM24B8}@6MS*oL>0;~T5JR!WvJJf4UR5ED4P?agywj1CCTZoG z8Q+%;VzYWL;^l%X5wt7O{(1&R>=kEe&oI-DOwp0mmHe0v~$M2 zb~sR=xRp*{l&WYd;Gs@7?@CJXO+Z>Rw)9{rA=%(;t&7u)h^po{#y_LG|D=fsn(KZP z`E*4S*3xV|Gb`=2wC)7ibjLDp>n<2N7Q=NHP8?}Alir)nCiVsWhS`gyQJ$?6sfuyY z3E6dhp;Nel=DHp-H`7xzKvQKHKxR*NPISwob%rNDBARrbeoB{SW`-0 z|C3|c;DaV3@0aQeo(^ZQjr1pGy2i0q%@k+rwS1_rqO{FZovjsI&e$l&Iy5tP4ea+2 zP4XOfSW1WBR0%C@tJONmP?=`hJo-Y%v9yf)VwaZqBKfPak=ViMO;vb<7_-X^39*dQ zccVdJDq5hJRs-8?XInsS*~A&SX;oiBgOHUaCwy1h`BSFrp)fzudcrJyvXcrkn1Z{f z)tsjwy~G%u_^#-niN=SnU-4D+{K@(qRf(jNE(oT=H&7nh{Bh5F{j<$O-wl^HvVz0Q^oG>o`+&Sw>|~%F)3M$VPFyXc-rM zER({JcDu=$aIH6-X*09{i$@hUwE;d@4z;sE#HJ+=BRD8$qQiVFHKZL;%mZeYyGg#V z43*F(8R{`gurc@Wa-GQvix0|q?{Ny+kFs=Ujo@=mezw9qI6V_FdpCQlLO2k+2V@6* z%w%V=dqPPx)MZh$-ezJnt2UMGA3(2lVCWU9(vuzL`sXrCTRIFi1Z);~OCu&4$R|V* zcU?W+d512^N%gzkKC?UY0wfK2QXKRwM7BPgkn+vS4_oUiKgS@N67nVt;|P9mpD+sO z+qk#XFkWqt)95D@(bpI@)}ih&!L3bFps5sNf4@;zMywLPz*}aAg2tk-7W=dk!XFn# zefGZ|B?_K7=6p@dK41G_YO~C_9@4Er1x~z;`a(d{F3Y6emyn#Q+Fw`^oizE3pUSqf zGU8SZa)MN?%mXYP(PzHr%Bb73*AyR_$$8y%yrz}+*|r+B#0K>%L<&PEC6VpX{Fr07 zx7F{URqEY!ZK=sqK_j7jGRiw5S|o|mW&7dYn`<%XI{{IWUZzmvC_5Bj$qcmU<&YBe zT*z}E)#_w^X8Krqbtv1|Bk9@R7MD?ySSvT9K*^u&HNBi1#}4|wT6wwK1^aKQXbm@q z&D)gMNZf2&QXUfA3HjH6PSOxjWgrJhGF%X10^t z8%2v0o9!y_nY{fzxh4X9`?fR%*(|0VC}GEtQG-rwf@R?20DWXyEp9I@`Ns( z{0zRbuNjtP zTEN2PY}gPmFJ<~nI4nQJpSHDOHQqh)tT=URF3IB^m5?D@u$0M9O4nNPLxe+YdC2ig zH1)0Z3z8<_UQ|hpj1p+>=t;(h^+(jZhiw;geWSlNnqC%nbs4nD2g6i)2y3d0VDon-v1z1or+Uw+Eel;kIOya1^tX+p#ETDFZSy$P2 z6ATPKlSIRoP^wtjM?CB{>r~jg!r060vyjg`6^L|L6Lx9FaUr@vSCdtjr8zLM1%YbP z9!#H3&|`10IPV3nu^2MeO+Fx1>QYVFWuVX1N6MUUO+Kjkri;Y{TuS(zpdBSH`odH@ z9;o|Ztz-J&#!uU!_+`JZBsI(WsBT;IgJDI;EO98r*LI-G@tTJ53&)=uO7gCJZ(ITQSM7V({ug?Z^;1Fk5mZA-hUk{|oy#8A1XViHrZ-3)>Dop+#3|dRa zq-xycp?r;3(cLO{{{v(%LKv8z3SR?U?M=(KZ~j7RvT0Hh)(_Rw6&pYQgN_f-Bk4TH zh@%2tx0qy|^WPP>-bnrnnJ?i;08kw^9f!0r8;b=0M%t7WOsZJa>r_0yT3$v0j9d86 zx_=?<&ga9_A9Vc=YnF_~HIdXNcd4 zp>q)-a!B`TV&_z3*y4RsM(YqE>V+%_g`Ya95m3bN9N%3;A$Ee-_)Mz*j>&Y=ms@cY z5U&gJW6QZZ-$Tzl=YM3rMKC1R`ja2e6K9oZ>0Va|SLG#+P+3WDiWozb|FnJ+`)t>) zn61B4QiG)66DTu7&96b50TZvK309H_VB;2cj1#zg`%5z6q1Dje+<~@CmA2RhE?Q@PaBxhQ`Zm?Eiu+-I@qXNr`U{B#>;4wls0)b zwCXb8VzXH_k`TkzV$a@e$2M2;P3da@-j`TU4f#vn3Vz$2CENz90)etd#-c)jB897N z>1`GRf8?X$%iZ;{RE7lg8+Z>wbg zG#t!-g?Vu{8-FEo`Smrg`?FJV*vL8dC_z{calRK{D1&O`_O~E&(I5ekkob_0Boo%i z-?(RJnAO-^QBhf;HZz>0Z47YmANVty?c=B|;nBs@)7g@&LsfP~o6><=@ukcZ3wB&+ zNo>d9#>u3Dmx*&Tmd!Xp(Qn!20(wlt-Gmj$20ySTzZe6l%=DI?B8lnm9QDgFZi9@0 zZ1}H=MUb1g|KgdM*yJ8L?qILVFQhg*CldY=0@-iy1XH6+PJ^oq?8S4NGx~HGJ#rm@ z$Zs(Rr8+nsG;?dQvzPx3ML=lcIPP?mX77`frlVO}@ypA-U0evl{@L9%ayoN`xSh;S zsJOq&skPv!^ErC;0=Hb#gW!A^1rlDEn^&moo9JS7)v81>dfvrzikREj;&18NwK0oz zkR<}{IP)6dqWdXEVd$TXhuPWC5s8kT z{+TOcjUontbMYoA6_#n*_Gs{4-)@#6a&^K3L}3%8(0ArEV8@?;iu=cclB;1BBt;auM2vIRdoeLJM^`j{u{+?6m{ zcDmf~29Iu#v!%JqV0#>%e~K{Ylev1h34-yVK5|Xue@S6wW$>f_SxXedC zCMt-pyHcZZwQs6EM^ulXt@LLpmR^&x;n8V+pL?TjPzKHElgFLlhtqsTzZSCCP2wm^ z`C3~^j`!i#j!Vj8RnwIMrK_jNBj_IX&Xsggy7zC#izuH9HQ>I7Y5UbKL;Fon_GR6$ znEnae(ZzogrbOkUCPScjHR?i5^1t z!Zba+S_&dVLEYolZDR&X$fqXcHNwVr%3Muoa@Kj}6iGo+n#C%HzO$GKOcc8+{Y1k5 zLiE*;tG{}&51CKZgmSYGmE8&8cdV4&DEl^$D$c}_N+L4z8EJR*5;tDpA@Vsm8MdMu7BCMFsYA>@Nt9*0;Us}za79R!`)b2)Nw~Pi zdyx*W64ri}GQpafEW&rVY<_)zh}SqWo~p{u>zcl2YGS>yUoXkQS~Xd7k`JC9qt`b@kE@Dwo8@hhEw3&w2i73*OO3z@EdFuTYbT>7JOF)o0mKm{O7%_{7Fu) zjEU2?f9u9vGfLkV+}7Y-btq6bU4Hl&zVT9%v;be?z8UYGsRmbZzMil=oKFDm33&KH zkJ|^g`&9ELJ=t{+|L}z-RBNS^pDnGC$$P}8a$Ngxo2W`+iadp52cUb!X1b$z{EI{>=}+K9?VB1dw5fCOOleH^lk1w)vOlDf`TTW`q`d z$nL0GP6dljE8vR>v^mf2(^~m!4(aAID?vfNmDSBgruO^%&a<D8I-+u z|05dzFICyVUy0s_pVw1Fy#LPY=DQN5%imd4@cAExtaAp1ySU@_>e2DE#}n;;ockub z4)Rr}k6@Rwl3{8#_!8el_Pd#AXUjcyzRo_ty>q=9K`_2jJZ%-~4}7f`Bsh&$SY(?*k?fCKm#dL;d7_LXuKxZLV&?rhq90Nlsjk88|$Z*xjH79gy- zrlru-=KyPfY=PJ=C-yFh!z*QTDW(3pAJWT@96Z!bC?;SGei(QEde;LtOZk02eo}gx z3n3#1a@f8-$Cgj9pqc%gh&UWiaPe0yB`$9V0tJH4G}baoVEM?DZBX&m_(JvDNs&M? z%KvB+wz8#KVpym!>;H=3MUg_G6IcRx_&Y*;&&|6?4t1CXW+JJKi>JgL3&!sYU+E_I z5=gY2c!t`*wx+^P+xyN2Vr)^x%FvTdDkep0DJl5K-1qGFp^d|t3-kMwVIf6{ z`{7yVKhlA)*PO%`w~QI$viw3vGIhR9wp zc0*@?B%vO&y)FxPwnDeo3ZaXVXwR4|pN#8yD&I9~u^34`4W!c=si;pkee60~4f;K; zopC_axQAJ1CmGFlKzBQu#;ri2no(UbumyX%$;+Lo8;t;s_r}Q6$N=B(6ZEA>2nLe_ zu@OyH@mmut8{{F=+3i~i_p@mI?r9fb>S2?-jvkWqNOX5Ot8qTx!JerZs1(Sgieqyk z9IGO*Qld-g`v7{!5FyGD{VGgaug~c1vt=3+L6Y662lwsO8|vl3wLKXO3rMONL%*sN)`p< zv(e+-_!?4n+1-nDIf6{G=Fb$Ij0}XE^vtp08<|(1PA9Ni;^bu;9BI6DM@n-Q z;?UN@8vkZ-h*tKV&qY~9@&k!Jc+`VhvZEnPHF{@YCt|Ak_`@gg_^54VyIAY1jCzYG zgXZC>H74@7@ZWKysm!J64s=EtljPZ?nhHDs~BWoJ=ML~+O)pP7P0iT zyc?eOA+MlcBt6Z;NRMiHca0R?E&EN-UPA9t<61%I;H+NUjCa`7fV&~1ll55>Xi*fp zL@9zkY%+;57va+6hSQD||apQ-JL4D&U zxU1dX#kmI1AF~XUrO$vElE4@(UWFADNxkHgC09P|fwZdW?Qp#idNp403cXR)y@1TC zSUrva{E)HtKN>t&kcC(i57pERzam-jpCvgSNY2a+5OW8CG*?=z)`@p=bgdf)9A6ePQ!cEP#J5+m-s+JO_}iz| z+i>mySjW0Q4}hUuToXL5?PhAy*WBoMhTJ+4j3XUd1nS5(j=__y?=FV8lCuL|#E9rB z;Ow%z7L1~b4pSO7lVM)ai)AwRJg=RO(mLv&N+^5z72po>gs$hs7ujjD?40zi<~OLB zoklfs2FyjIqklsEV3cn4?2vZ8dM-m=I&-1kn&k{soAv3a!lo;+bvk&KSG4w7slYMu zQ7Rp)iVz6V))XJ#w{GddFx6PY=D2-WR;M{BUh5nW;0(ph`G0Mi9N=W^1B=rh6++!Z zwWq33l9fuu_V&~c4y~tMp_P~u`W`WC-rH#W3DsoYx&K}vL+mNPxXnlXf zy0_naeA00vI=_T%|4KT1fyR`ic*UL33Of_&Q z%8aOm3>ZfsFGd?+v7QQhSt)En@~lY0largDibO9B@7WJrB?J`?^)t-ri~2a^7Lqnc)C`Trf8?26e93sL4=Skqwhx<1HecneCwuQb@If%?Mzr0P-q!o$YDxk> z*}vtsm9?1o0$M+?{!Yy%F76HsmjA$RF=H;fPSrE~;!-Z__XQXf$RujuGvx`W2RB?_ z`Y!sdM(l}dW=@}hfC^=C_+eN)q=xVdO`NGtLp9KPjh<-C- zRL#4AOh+uT?am%mHKe5!(2$Z#&wi)`_U$~jr9HD%ZjOKrIG`){O9cMJ51-MDN=&ND zABZ~ETIf_zV0(bEwT?vw$Z^Lso2Ml#sCh~Ih1k>-$aqOKk1B4w9%=i9GYUD0NE&t~ zbYMSo;nLP3*Wn9|4QD$P85Q!h_@tsN90oG}RQJwH=H6%1YGsr?DWbPVUpCiZ)TK4mtW8FnDusNY6JCzRZjS)oLKhY6$Gz2 z^~l5|XFi=lSj^D8dVUdG0gZ1{%mWNix|-=Oua0Cx$$O1VJ1dm_sIZ+bQrdIYhGi`L z%T~$5$6j&inP*ZN$l?x!de}~Ta_Js=TKTTw=ER7sw8c@f&Dc^y8#R?7yopUN?;B3k zK&JEaF;NcF*7(cX|HzFSTVgAKNrP!K*!QzutiyxQ;02id`+gkLIZL+CVXEb53E(cO zvm3^oHI~w=C+CDbPx!@@uJ*ttkz!ZjA%1P>*E=VClAu#zpzGtr-#fKAu}~RXhn+l} zxd$t&^%+j&M}c>f^95gR757*}ARif#QgGwsYy_!ve7w}}!vV*E#W{Db?rr=%_p%22 z`lbPuy;ZNVz24C(zFOC2QvX1M>DV+aYL!(S7p0vkYcYI*1HZP3%pQ`B9NlKju(x0@W_Q=gYIxUVeE&tDLh*X7NQ^EEZ@fUX z?4>PDfbw>jnJ95i9w{p*Z=qe&Fwc5t87arMTkM0?p8pw{%OfZ_|I)Z1C)VIwH#;p~ zjX6I{+qkkrVUvK}yj_0?a#GbjUe8=v>ZD@va;U;VqpmoAthz*9128XMwTNphB)qD| z#{xngE{b4qhwe)fK`V_u{5@dVPAfxdVCH`GD}PRS(}}asvv~vbWgz*${kuQ`5+wJZ z_@9REH)q}|QLj^Hk)Cn8hJCQLFFNk{SrIa>JIpr{j+-)b-D>v8bj;P*H}Z-GPO(na zhK{irGKqq^*O}I|M9fL2^qao0vVm_2G7TgLUn)c#U&QlBmp2tS`8CF=yEVv>a+*@p z!F_E?n|Gw^`)eD%_x1DQJS|W8I_1S*>P9p$6-Gno_0r4vBOKB@#*?BxDZy zeRuAiJM-Vn^NfEP&e?mfUDi5#ul2rbA0VrtMstG-zJW%R=aCAC*n~q%K>st?uN(qt z#QAD(L}-5~PEU6S!y-L*nvoS_Ro}Fvt+Ii1v%2m-T7QhHc=GWJ8z<{>zM5NI8&Z+^ zs236ZzTlx%{xjRs>$xR55gj4PG3*b+wQTc>9neh5#-^FYMKcB$U!lLce4(`CvD6jR z$VHagW{VGuu7yMS`P=<|n=F=FsstLa<)ft=U#O)n=d@1u6ru4_*cz>(5`O-ItM}Y= zL*Wg3c@eSgE4Fhv4u%4DYAneFcHz4c8;4?H)F(f5C>-^f{|#5yNkQcJL{@#&lhjM5 z?(wq zdoTQpjpBA+*dfQTH|O?{E#8>&{Hy|S-1!=byK>m${CetkZBA8UU}z*lF*HUuQ>pky z0PPdI#qvbHA08D(hI8gw6ka0yVX?9)f|5QB2fiJS0(7`I>JA%EZrvJ>f z@G%1c6Cao;=+ji@@>aR*nskYCwj0XIT)d!?Tu!5C>$Tg|qfqpK;AoryLTZ*O89%c6 zar(7>Ne!YISKw-G0?@Fxw-`KVkP@i_M(OFz&-Vz#X6%EhN>eJKIExgquV$jJV z7+2aeeKRgYnwHv~I)6y35ZzFbUS8j)IwYz^vYYiBB8aXttUGP62xe%AiHsfYhI;6El?|8T7pnFJ{@5$0c*kAo7I$SETM zHi(l0cmAM;3g~muzQO2(NoL|^$YRKlaD4Dsbh`#ojj%rL3RG?H^$jB@E$Ghsi2ye~GNuURfeUJM;_dAirv zyZnP{X(?P7vtz5bY~x_=v^kETVA=3$%XTUW z!OgfXuWkGbcf-2Mr26XCmQeEXd+GsHU9w8jwL6~%F8{6(uGYRkcS%RjhEdc%SQp(T zZ0eX7X)=SI2~T`0Zxi_jiE!Z5G$+3fz5j=-aBa=$-&}=ZAEd9)JC?89#4V5c&X?&m z4!sRYH4Emai_fmwoahlWP6j2CLh-(0j3IQ6g_q4ZY0T&VFWF4IDGHoiQ^Km1?Hz69GT$S8shQll@lo*2STag~!#+%bnh>;!T8EZ8PhgFON`% z=)D{^Cs}XF)rO_eW91%b z;4r6@%2=$gk68M(Ba6C?8eM5x-lk`&-OBIUZjU@joWgysVsUJG0zJ_>%e&Fe=e?2I zQaoELD*zB2j7?QhlP`NG2}*7*5I-zAJkGdD#&Dlm^WVOJHW(6D)}M44sy3m|EFW81 zeATmahad_h`x49nTT9sOR^q7Gwxy1L26a4Hnkv;3pWb`>x0|-@Y9OSFl}rZMFJt>S4mp(iW6_-L*~*hj5N!X_7S- zsT{mL!>DPL{aLRLQD5xsavVW{O4y%W(xDHjxQ0iaS-_!=|3id2h}mo;&K$u;vK5wR ziq|@3Yufz*xRprW0f$4qC>N1@LI0CUsNYM5s@)Y5Ev7!PT+X9w6}5F$r-ksd4N0si z41cu_T=Iut8zga@Ie6=64JC?F_IhmqUR6%kW}*NIWB42e20j z#&{Nf?)Bs(dOzcg^`pxtdH(~;i$I_}lWX2XDjFmInMpW`$IZA&^1D)Aw}y132v?TY zD!#DebbIhr`(8k8fUf`1$ZRV-y=a!r9jjX1F$T${%TzlP;g|K@E9cJJI7)Yq3+ygK zFlmm*>ykcr>NEP{gb(y=N^7sT@F) zm14Y`$^N;EKUBD>O2vk+1EMjx0)f5=p162)Z|aQ8pi7-^QJo?%K1*GnM{fJ%3PfvP z9)Dm3$oKtcmd5*+bzDXf4SBQXeN*M+_rw@^ydRQ(4|B<=z_TK1A@yJ*23LdF1XB3zyEj%MdaN&~$ zB%g;>pmS}xW!D?&XdhW=vFgkxWbfeXDHV%@({@QqK>}h=nR(G2aW~?ho<%@&Lf@Cw zcMKDtHerm0#t2hpn;K06qWUv~XPh^x$mU!&w8t@Ta{O&{_@hL&vGLv?c#gb6yeqDq z&7zQ{JV=G0!Wymu$MX~jn>{AxgeyIxcb zt->u}()?2XI^eFxTYZty;Wh~hhgrZxc&r2x5=U^U`0qxlzShu%XL02O_^e&>Z*#r%|rxG9aMDc$+Lp`Wkytym;Hf0vYi3ITakad*Vij83UDqr~*s&};i z9cvLZ{O%73hGH_vK}W6zJDZZt68z*b-M5LH0c!54V5x)-#!2f%q*T6WtD4(aG;Hdt7gKghRxz6XECjH~7o4xlKan>eIjXdkz ze*iNyFaV3u zfp)}a^9mfeM9W1y8b)oR6a_19{ONSadh(s9mNpgp*$0wbTvAY4Rc)_W|9CDDYbq5YWdPXaBefb63WTjS;ig>Mon%W)k|YvcV&db?#i#a zf8t|8d=sa%IftnxEW!uqquB?{?Z1i>8N^l!DxDcCT~~GDwk{Cm@0^8y{<&!>^Ne+R zLtaqnI3C5P$3>=qZ8&ZbDp?267M|oHw>Z`*|4vL;c5JHR#BRv0gKlXtb&??2QbzQ2sRDV@_> z$dzz{UB46ZBb7dPBjCE1h^r0#{y%>w;K{19*hJpaxg%xcQ6rMsKXuO3=W>hyyv1ji zqV^Z7_7B$2{}m{Bx=uYh@{wqA%*`x`XsFpedarx4m+0pOtYcO`$o&=PC6l4D2gr9; zlIpwAu2AhH(bnZE~`9PaftknN;5?Wa0V?EZ(lS^ z^qz_x1q!MIPzu1?@EN#ldlA0A%ud$U-qo#-%W8iOQl^LoB9~;}g`(n_HUg?DE3UmW ze>i{`?Ol&n-RH3XZ?^!ReZ9%Pdld9e?H)!#;LfPuq2z?OrXG0$sxn9Y$Sjaeg35LJ z4}qBseBt}GcK$K1;=QnN%pr?LvmUoQHc6DzcX-hjvudtAZQ5K}Z##g`wRyBZo{K%| zWCY1-PFkt=ePHu(Rp@=!69;a=zbcq*DkX}~JYAbs`pfuA5Hui-G|~4Pa^v#dy78zG zeH=*Lc<~)G2@5^$Cne~0-%v-!*$^!@MCta_=|^rRX`bL;bwZEOteaipMOg4gJ!+#M zlC*c|kj|)~PntovB!{r*{DlYN^QdCD<6qosO{&}CY59KmJyUshuLVxOtbz&HE)N&? zxM(v%rDd^dcZ@*Kt-)(n5d4s>Y!^CxkDcS|R;f8_pKueoGWKmG#_^Fha^@C>9b=N- z#~lZ{v7SBd*PBsd`jj?3?8Yh5)j1qjgEEi&yVg|ohUy{ErLAZ7po32bElC?+^LYlO zp?FY(oWEEhAsdB6CQwHA1B|ixG(3I?^>!S%;C_wznwsy{am8;6@_*Vw|EQ!9j7Rvb z-8tRUTGy?GrJLICou2BU3l_H?)#~#yhIrdrPPW_P!nXtSdPbdg&Hj8aXOVyW%#x82;HuSf29naxhH+o)@*9SBX$%B5=oUJ<-*#eQpQ85$E ztkz7wpcLSGtr>)h(`_TpV{#B_|M3&+B*dQ3>crAYYcN=D{y@PkARbX#PS>bmj9&ag z-=XtLBu7!BQkRREl8Yu(kC~%0U+h%{miwG%T_SsNqxpxpN4>sPo7C%!da}bUtF^G7 zd9&xNI=VFIaO;umTRoNmUb`wJ=>)2cO&kahgW+16Y}TmA`GGhIW@6r1%$v-InT0#IKE%y zlL5^9jF(h68NN?Q5iKg3q8*jX`giG-IEPcIWL%B^n8EKK^W)c`17D6#dsLVU{hX;k zI;l$Ub?ube5y@UHaWE6^{Zvvd!ixlz~y=?yHQ$a-|1P-RERVS_*iR{~}~FM&t^-h=De*RhN^!E^lBG0ES> z_Fd&S8Ig^35~r@=poe|_*L;CT2mY^{AnVtm5&BJSZaGB(dKlg zOXYbJow{Fgk&u(ksUq|Pb7T8ZgA>81n(4Z2#cJ(uE~&hkk8oSNP-s)>3}l?er0wQ- z)y1-kp9iJIPEG~SjR|cK668+)FGgc(8DYhL$r>@hb)Babg9&^58aH$wrcge^&IeAq zGrZi1iJ9NCdzI7)uwIWwx}d^Y#mg_*wX8Z=V`ufX{PY)vkRZp7QI$+zfqiE0bpC=0 z%SutC7x`O&_D1MZfdAVUkj}IXtnjYuE6aHT+wRJ#Z6w|;GjzrybK9{M5I7*E%gxJ;oKxA?&*>1dB z*!%Sfx)C5lid9^=G=(r8+{De72xdSFPFg^Dm~^IjysT8r4WT>UwAs? z#$5f&n2tIZ9o@!=4RJTZw_bti|D|Hnq<2V+E+bhMqR039v7cGuf} z4z`#wNI?tV-GY%I&~IIhFdVP6nijxkyBYAQ5Y)Tj(RLt&mJZ@sL~-tgIIc>3p&yFVuy`dAPN4xGm$jOUW4bEkx0)9RionmHUa-f zKrTfcT9A}xN{?}AnxipdB2-G^Hkb{LU507Y4gg=cM)I^dLS==2vmiiiU@@oH1xtD0 zf0Hw()md6Ex36GQ9{%il{AVLV*0zG32FrmmQ$$ZPP@ww~`TY?mt8o}P|A)mdjtKEq z0$kW%kwn_v+-q;^S z5~l~TEA*QuAc3@ooc992Nd++68~7D1LrwO~IXP?A}Y(G`hyawz1j$KmX(X%Yt* zp43@YI#FCpm(;RV4ujfRS#4OcGu`=%{r6jbCFn2S^-b1buH0pzYE2geCBWlWsA1A@ zJv9o-!|Kme(E`m^M{^9S4?O-8SI*zxp)1&{FJ`K2X9EX{PTkE7#v-{T?B+vRTnmLA zPC9kzl8Xpkq2NKVlB;{d{MCcj^P8ZfwNJqqK4w(!m|i2`P82Xi>79=&n=_Eeob) zT5T~A~ySD)QIYvkK@B<)nRJa;VxtwX)^90!Vs{T* z)QilWhwi@=arm+2y4^78Gz+V7ePh2=KWQXV?`dJBvbQP{DHYd^E+4-u=2YjWrWxy1 z=u2o!TAHmXK~BvjBp0fx(dY~s>9v@-O(AM5^VgF2yTd)I#aI+D#;BpXVz+_l$%&k% z43?I#A8=dQg940%5gT zGK37ku=O`d>@|Pl@87;#Sl}wAy>_d}YO*uuaEQ&UUd>df93~^%QR#-;foLIsS14N-8J}p+zt>W|j?3A|$jLo|k6ydNEH;>&4jLVtqN4NzL`_q#ovfZDQTBF5A3)1Jy z&|byVHjT~JhKcxUje+C}|B={)(&;f7=wgVr+IAd+kyv#W+3cb7Y_-H~d!s5BY-S%! zGQYlhlkrm#t0_ybRp!P8V4tm+vousKoi-(D?n(Smij=bSdrlB-@g~W}ZqrC11a7Fr zXJF~Qkht+my= z&PL_F<9mW72EL|kBcW@=$>*%iS(ZC*=k}+o<9Q{Tf3FVw#&*_F)~cloIWKO_6m(4z zJx>yD3Od`dNUx#0?Mj`O8^Hl<8a6ssrys>eJFQ5cEMEZ5k;hueld_d=mMh$(E)F2~ z#=dklr5Px64p zOZa)}tQ=a!^7S@i<>eW>R1RkQD+|5EPCK#+an?6;YHbF^7RMYI1`4O=f3GjH6-~+R z^uSluwjjy7bL@Rh4lq9d@~@F6R)o6l zw>^UX_{oIKp0|Rg+v~|BnYN^Y`l1Tg4h~en@0Y~*r9ua;v4O;wvRS8tU{jy2tk^lX z-kDkF)4r4kOL0yO5+!=bvV1giB&OFRVc7YzCga>ew2k;&!+r@f)N9m9!X%#RTTM=X zp-zzzJ;Ukp4}6TrwTk?4?K^s159q{a@VN^^y++9b#4Q8eawU?7x% zv_FgymAlnyl@7snH>_#t_8(7h4EB3(A)hDkA0s1Go^;un*_SrjFKi!F7Et@(m#d_q z`|V@dbf}j7jT1)M`SR>l`n{4g$Xc}fpow2;txbBoLwmA5wVdY3m?g6y+z@KDL+_^3 ze>`(Ol9!S6t9}J1U?AtQdSkDd@GE^%6uBF}a@RCI&e}xSgV^hk=IcFOGtVDynLCiz zum=@Dxc`_d87WMYYp5x3)t+6hguz}AA8VE*i!GE#H*^l--{SuXGM_t$O!LXyISmb{ z+ZsN(H9#xph5TT+nOpe7`C3~jciTn@JojYoZm*@ZGXcFzA|9V40RAPWk2xqYY2vEo zWPsQZEJ2s8c_pT+Z96iZpkplWdP~7n@3?Ir4reuC?)e4Y$tMLGl6sTC^lLR-51Us# zcZOr`0v^8#JCnUJY;-qb)|n7=tMQKh+1GY|Xrj@T7~(M~>q@F@;GX|oe5{#Lyw`dU zV5q)RbyDNS5V8IaGYSWNgZ?-;^drW{iOKP7<~}}<%0BHrICxK;YI(+HwNM7^%N0iM z*mTvFY2SU@cVVKntg0xO?4_$kXP@(^*{HgIKGz()Vb>$9wlDzGi{$Kh+|Ga@1-E2o1AiFy4 zHuM>Y05W}#X@W`;tw%pjjOJ>P-`7V6R@vw|;1et{EVO~|0e|Nm0fXAxF9g3wM23{$ z=R?RiPsTeZLyTmKHdi+^bAe|x|9VZGMcU_E{;cT0C_I4v>ziH#^kdAHYJR*1~Uq3Zo{Mnd-z9$fsA5uTIU_l zFOwe^6j)~nku4A(wRbWyCq2m+u!+g1+sVzl-#b^^W-oP(b0H{zZNj204&(%CtmO1p zLC2n0@s|dW(r;_LU^{ht+9pCiVKrukUaDGyVS;{e72Ht;RvnX~dT>rU*pBo|4_^}z z(T>k(XxXo9@wJ&?Un`%I&BrArN9nxAmxulx=M28Juu8i>Gbf zgmoH0{Iz51DD6Rb!z7AOIHlqLZLR4>7B4O+>+*9X z#q)E*VmvgIO(enZ&D9X3X_JWX3%ak;dj{YipBOSAWw$%QjxdIQ7(tkmE+7sKpa7Z6I6U!zS zKrlO5VBzmNyiLo_7gn?3DqQ>Gy0l|5RwIU_JL7nk%zDcz>+4rqIuTNog6CK zRz*P+U_e~b?mcW~`19F(tV#(iwRefv05u^K=KNz`>}|uM;`)H!`++|fd(S?u|9%U7 zGbmV9&VUoJW-hEZ7_5?F1*}6}0uw++bHBsN;HeViJm6DV_hWi@L;0-9kZbB^N&K!D z{uSVC93QL3-wukA2ZWOpR30dgSnT}#9%$;k;xHpe(fU#V@PB~|O+jgYEget99YUE% zY)v(H=;gD!0KUlc)V-eeIDB@USDN?9TV6#Rn~bRMav1RF@y)24QWmK93U{eeZ|V_f z%m<_9pkF=qe=Yz$e)o_`GoGq7Au2k%@3$3ot3~G=jH)&A;+a7D->iQngKQ}~)@65j zu->Z8f#86Xd0~#YKjmIroXn|3Z5)+Ud2YTQQL=hy(l#@RN;Z^!0JQn?lDmVTzg64p zhM}?yhw2wts<*>Q$t%WK7pAkCmpgT0>+VZAZpO&oePk0T^npG)?WP5=5d$5R@1E8E zq8~qXH0~hb>8I<~;&J)qr-QW2v}HD(W>NnU&Oa|?zusglG@EV?JBPhDiw--yHcpPaLHF1`|lKpc;k(RxO zALG35@Rz%7A+-INPseh3D?^|1*;q`qW!=`0izTr@bKj*}NZl%iI0@3yUg_Jpp9q2o zT(PruLt1A!!0*Sv*2(up5-GhTUCPb-421FZ!Z;%*I0@H{AsyMUNGQit(+nGVX0H8& z5^U&@xQ1@!GR2?iZ+LmzD30C?S|96V$#m>B#$JCBEWdgZ$b_FY(@<1aARaME1t( zV1=#ec&3+hG{`D5<$E+Y@j*l27T!qkmfJ=11dLnnt4}DrGBHtc6$CG`{_=sLQ7U|Q? zNtCSj{?U7dE;(CS{Ev(*r!E#7Kyss>pW8ytltXnqY?vc7w!Y5Ic{`htGn9y5nS_B_ zJl(sFEq%2N73HTko23GUu2-hITp1sg=rHSbEYe5;e)uwRGPvtUS4#xtL z&^W#_aw`3}OV!-6e~ZTd!orXvBz=G&U{K$=?U#}3j$z64H-7~MVBhbK?u%Vi*tx}L zV!FmvO!1UPXI+8bAN1{4gEU*l67YQQ{;RZGeBMFqY$n4vrjBR2_tX->3_J?JvP9j( zs{LShC_C!NY@+#W8T7%LLLoyiXP=Aa7?k}Gusl5lAJ^}nzTzA=Gl$Uh%f1Fbzs3~- z@-4*~pRksdSza1N{lgszOoQ^PPA-+@`r<^J0ZU-YXj@;rnJ}5)qVcgdzn_PF7~ty< z^l6!)Ti(4xR{YaoVCLBKE6*M(C7RNQ5JLGKTg%qcnnof3`^WaFQ%98B|3UR7>NHlG z;QlMm>U64>xoA4nm{vt@1D1j{!afW;c$uNX9VMU0IZRd3W|Ay)y~VF;jTXo;2N;@w ztAY=rSI-57H;Ny8oTM?=vVm<_g&JuFXN2uGgaN(2!;{T_Uv(L(kuR2rvlv$AOw;0e zWmLIR>nD007Q6w;i3^a=+5qS zMs&m#9Sq75H9<_4MBDkn4qXAgam0-mT9PH!04nc-(t*y_)VSuFK z+Ds|(fURNrcy`xsR&abm2@@2Cio~FDW z!4zbs3JQqB+o=aRG!IK+_XjY#-ZN_npG08;9sZ2KKNFlLE{bYQKuz8UdG&^@kw>6YRRPn z*7T)el=ML&?o_+Z~|syFwXQ)^NJ_W@8ySQ z<(bB=U7VjLP0FuN-r4#hMy-%;#ngTm*dUZ~MgR^)<7*h13+A~NgMu8izzOI**Q+^& z0bO!WDX{$10|&CzYNM*P2JWlCBRAe}OIX?PzGK(4z%mt-6%)3*={BZ72WS|p`=sKA z%cZ0}$FCR6VMdyPocxUZJE^cwKr>SZD#15A@rmy(zF#zl$)QWr6C!D+OaXm!Nn6&X z49w)bT{j*Iw_k!tz~oG$182>9)?pqzgF_RJow zKCr4?7B=eT-rB~HKLG5|yB`8wt{)Wkrqyl&1!)A1Qv|JTe=6V~F9IvV%#3IMTZYd? z^BV3ep+Gfjx({???n_d*%aqFj19ZQZqLfAN^%d)(vxlE}QR7QlG_5pE&9?DCGauEC zXG(RgXj)BHj&`fqff*nt8u?4@dtF)mxCYN;K3hX}zrL8HU3z(CHD486J^*O^5!2fh z9j-t@ir#i|K%Ou-V2;Ti^Zj2Q_IxOyStOFkI{Xl*{?gfT<~$izLbj*Ch4VS^7c!-% L>WU>#%s%`N*}jil literal 0 HcmV?d00001 diff --git a/tests/test_session_save_mode.py b/tests/test_session_save_mode.py index 32759574..66c3fe3d 100644 --- a/tests/test_session_save_mode.py +++ b/tests/test_session_save_mode.py @@ -130,3 +130,30 @@ def test_eager_checkpointed_user_is_not_duplicated_after_agent_result(): msg_text="repeat me", ) assert [m["role"] for m in merged] == ["user", "assistant"] + + +def test_deferred_turn_is_materialized_when_agent_returns_assistant_only_delta(): + merged = streaming._merge_display_messages_after_agent_result( + previous_display=[ + {"role": "user", "content": "older prompt"}, + {"role": "assistant", "content": "older answer"}, + ], + previous_context=[ + {"role": "user", "content": "older prompt"}, + {"role": "assistant", "content": "older answer"}, + ], + result_messages=[ + {"role": "user", "content": "older prompt"}, + {"role": "assistant", "content": "older answer"}, + {"role": "assistant", "content": "current answer"}, + ], + msg_text="latest prompt", + ) + + assert [m["role"] for m in merged] == [ + "user", + "assistant", + "user", + "assistant", + ] + assert [m["content"] for m in merged[-2:]] == ["latest prompt", "current answer"]