+
    Pj  c                   n    R t ^ RIt^ RIHu Ht ^ RIt ! R R]P                  4      t	R t
R tR tR tR# )uH   Brain tool-calling loop with a fake adapter — no network, no real LLM.Nc                   0   a  ] tR t^t o RtR tR tRtV tR# )FakeAdapterzEReplays scripted event lists, one per stream() call (per tool round).c                4    \        V4      V n        . V n        R # )N)list_roundsseen_messages)selfroundss   &&F/Users/ahmed/devFolder/Ultron/claude-voice/gateway/tests/test_brain.py__init__FakeAdapter.__init__   s    F|    c                  "   V P                   P                  V Uu. uF  p\        V4      NK  	  up4       V P                  P	                  ^ 4       F  pV5x  K
  	  R# u upi 5i)    N)r   appenddictr   pop)r   messagestoolsmevs   &&&  r	   streamFakeAdapter.stream   sO     !!H"=Hq47H"=>,,""1%BH & #>s   A%A 5A%)r   r   N)	__name__
__module____qualname____firstlineno____doc__r
   r   __static_attributes____classdictcell__)__classdict__s   @r	   r   r      s     O  r   r   c                     R RRV /# )typetext )ss   &r	   _textr%      s    FFA&&r   c                    "   \        R 4      \        R4      RRRR/..p \        P                  ! \        V 4      RRR7      pRR	R
R/RRR
R/.pVP	                  V4       Uu. u Rj  xL
 q3NK   LDMu upi ppRR.qTT8H  qf'       g   \
        P                  ! RT3RYE34      RR\        P                  ! 4       9   g   \
        P                  ! T4      '       d   \
        P                  ! T4      MRR\
        P                  ! T4      /,          pRRT/,          p\        \
        P                  ! T4      4      hR;reTR,          R,          p	RqT
8H  qU'       gy   \
        P                  ! RT3RY34      R\
        P                  ! T	4      R\
        P                  ! T
4      /,          pRRT/,          p\        \
        P                  ! T4      4      hR;p	;rZRqR,          R
,          qT
9   qU'       gy   \
        P                  ! RT3RY34      R\
        P                  ! T	4      R\
        P                  ! T
4      /,          pRRT/,          p\        \
        P                  ! T4      4      hR;p	;rZR# 5i)zRight away, sir. zIt is done.r!   finishreasonstopN
tool_specs	tool_execrolesystemcontentsysuserzdo itzRight away, sir.py0outpy3assert %(py5)spy5	assistantpy1py4assert %(py6)spy6==z%(py0)s == %(py3)sz%(py1)s == %(py4)sin)z%(py1)s in %(py4)sr%   brainBrainr   run
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)r   br   r$   r3   @py_assert2@py_assert1@py_format4@py_format6@py_assert0@py_assert3@py_format5@py_format7s                r	   :test_plain_text_turn_streams_sentences_and_commits_historyrX      s    !"m	8V, F
 	K'DDIA9e4G46HEE(O
,
,q1
,
,C
,%}555555553555555355553555555555555B<.;.;...........;........3RL33333333=333=333333333333s>   AI0 A2"A0&A.
'A0*A2.A00A21A'I0FI0c            	        a"   . oV3R  lp RRRRRRRRR	/./RR
RR/.\        R4      RR
RR/..p\        V4      p\        P                  ! VR^/.V R7      pRRRR/RRRR/.pVP	                  V4       Uu. u Rj  xL
 qUNK   LDMu upi ppRRR/3.pST8H  q'       g   \
        P                  ! R+T3R,ST34      RR\        P                  ! 4       9   g   \
        P                  ! S4      '       d   \
        P                  ! S4      MRR\
        P                  ! T4      /,          p	RRT	/,          p
\        \
        P                  ! T
4      4      hR;rR.qvT8H  q'       g   \
        P                  ! R+T3R,Yg34      RR\        P                  ! 4       9   g   \
        P                  ! T4      '       d   \
        P                  ! T4      MRR\
        P                  ! T4      /,          p	RRT	/,          p
\        \
        P                  ! T
4      4      hR;rT Uu. uF  qR,          NK  	  Mu upi ppRqT9   qw'       g   \
        P                  ! R-T3R.Y34      R\
        P                  ! T4      RR \        P                  ! 4       9   g   \
        P                  ! T4      '       d   \
        P                  ! T4      MR /,          p	RRT	/,          p
\        \
        P                  ! T
4      4      hR;rTP                  R4      pYN^,
          ,          R,          pR!qT8H  qw'       gy   \
        P                  ! R+T3R/Y34      R\
        P                  ! T4      R"\
        P                  ! T4      /,          pR#R$T/,          p\        \
        P                  ! T4      4      hR;p;rYN^,
          ,          R,          ^ ,          R%,          R,          pRqT8H  qw'       gz   \
        P                  ! R+T3R/TT34      R\
        P                  ! T4      R"\
        P                  ! T4      /,          pR#R$T/,          p\        \
        P                  ! T4      4      hR;p;rYN,          R,          pR&qT8H  qw'       gy   \
        P                  ! R+T3R/Y34      R\
        P                  ! T4      R"\
        P                  ! T4      /,          pR#R$T/,          p\        \
        P                  ! T4      4      hR;p;rR' TP                  ^,           4       p\        T4      q'       g   R(RR)\        P                  ! 4       9   g!   \
        P                  ! \        4      '       d   \
        P                  ! \        4      MR)R*\
        P                  ! T4      R"\
        P                  ! T4      /,          p\        \
        P                  ! T4      4      hR;rR# 5i)0c                 4   <"   SP                  W34       R # 5i)Ahmed likes flat whites)r   )nameargscallss   &&r	   r,   =test_tool_call_round_executes_then_answers.<locals>.tool_exec*   s     d\"(s   r!   
tool_callsr^   idc1r\   memory_search	argumentsz{"query": "coffee"}r'   r(   zYou like flat whites, sir.r)   xr*   r-   r.   r/   r0   r1   zhow do I like coffeeNquerycoffeer2   r4   r5   r6   r3   toolr8   rolesr7   r9   r:   r;   functionr[   c              3   J   "   T F  pVP                  R 4      R8H  x  K  	  R# 5i)r-   rh   N)get).0r   s   & r	   	<genexpr>=test_tool_call_round_executes_then_answers.<locals>.<genexpr>L   s$      201 uuV}&0s   !#z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}anypy2r<   r>   rA   )z%(py1)s in %(py3)sr@   )r%   r   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   indexr   rp   )r,   r   adapterrO   r   r$   r3   rP   rQ   rR   rS   r   ri   rT   tool_idxrU   rV   rW   r^   s                     @r	   *test_tool_call_round_executes_then_answersru   '   sA    E) \7tV_35-6 7 Xx6		
 ./Xx0	
F &!GG#q
iHA9e4,BCEHEE(O
,
,q1
,
,C
,%':;<<5<<<<<<5<<<<<<<5<<<<5<<<<<<<<<<<</000000003000000300003000000000000 ()1vYY)E)U?66UU{{6"HqL!&)8[8[88888)888)888[88888888qL!,/2:>vF   		F F       i(E,EE,EEEEEE(EEE(EEE,EEEEEEEEE2--a02 23 2 2 2 2 2+162 21123 2 2(1	23 2 2(1	2 2 2 2(1	2 2 2 2 2112 2s`   A3W6B8B<B
=B BBBA,W4C W5A&WH-,A;W(J3WA3Wc            	        "   R  p RRRRRRRRR	/./RR
RR/.\        R4      RR
RR/..p\        P                  ! \        V4      / .V R7      pRRRR/.pVP	                  V4       Uu. u Rj  xL
 qDNK   LDMu upi ppR.qeT8H  qw'       g   \
        P                  ! RT3RYV34      RR\        P                  ! 4       9   g   \
        P                  ! T4      '       d   \
        P                  ! T4      MRR\
        P                  ! T4      /,          pRRT/,          p	\        \
        P                  ! T	4      4      hR;rvR# 5i)c                   "   / q!V8H  q3'       g   \         P                  ! RV3R	W34      RR\        P                  ! 4       9   g   \         P                  ! V4      '       d   \         P
                  ! V4      MRR\         P
                  ! V4      /,          pRRV/,          p\        \         P                  ! V4      4      hR;r2R# 5i)
r=   r2   r]   r4   r5   r6   Nokr<   r>   )rG   rH   rI   rJ   rK   rL   rM   rN   )r\   r]   rP   rQ   rR   rS   s   &&    r	   r,   7test_bad_tool_arguments_do_not_crash.<locals>.tool_execQ   se     rztttrs   AC!A$Cr!   r`   r^   ra   rb   r\   
tasks_listrd   z	{not jsonr'   r(   zDone.r)   r*   r-   r1   r/   re   Nr2   r3   r4   r5   r6   r<   r>   rC   )
r,   r   rO   r   r$   r3   rP   rQ   rR   rS   s
             r	   $test_bad_tool_arguments_do_not_crashr{   P   s    
 ,4{KH*J 
K
(Hl	3	5 
w&(Hf=>	F 	K'RDINAC01HEE(O
,
,q1
,
,C
,))333)s>   A%E'A9)A7-A5
.A71A95A77A98A&EA$E)r   builtinsrI   _pytest.assertion.rewrite	assertionrewriterG   rD   
LLMAdapterr   r%   rX   ru   r{   r#   r   r	   <module>r      s6    N   %"" '4 &2Rr   