
    +QjE                         d Z ddlZddlmc mZ ddlZddlZddl	Z	h dZ
h dZe
ez  Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zy)uD   Tool JSON schemas + executors. HTTP is monkeypatched — no network.    N>	   task_add	task_done
tasks_listultron_leadsultron_statsmemory_searchmemory_rememberultron_contact_statsultron_team_activity>   	get_place
save_placeget_contactlist_placesroutine_listsave_contactlist_contactssms_watch_addroutine_cancelroutine_createsms_watch_listsms_watch_removec                     g } t         j                  D ]  }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }g }|d   }t        |t              }	|	}|	r|d   }
|
}|s<d	d
t        j                         v st        j                  t              rt        j                  t              nd
t        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |	      dz  }|j                  |       |	r+ddt        j                  
      iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d x}x}x}x}	}
g }|d   }t        |t              }	|	}|	r|d   }
|
}|s<d	d
t        j                         v st        j                  t              rt        j                  t              nd
t        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |	      dz  }|j                  |       |	r+ddt        j                  |
      iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d x}x}x}x}	}
|d   }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }t        |t              }|sdd
t        j                         v st        j                  t              rt        j                  t              nd
t        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d x}}|j                  dg       }t        |t               }|sdd
t        j                         v st        j                  t              rt        j                  t              nd
dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t               rt        j                  t               ndt        j                  |      dz  }t        t        j                  |            d }|D ]  }|d   }||v }|st        j                  d|fd||f      d t        j                         v st        j                  |      rt        j                  |      nd t        j                  |      d!z  }t        j"                  |d    d"| d#      d$z   d%|iz  }t        t        j                  |            d x}} t%        j&                  |       | j                  |d           t)        |       }|t*        k(  }|s/t        j                  d|fd&|t*        f      d't        j                         v st        j                  t(              rt        j                  t(              nd'd(t        j                         v st        j                  |       rt        j                  |       nd(t        j                  |      d)t        j                         v st        j                  t*              rt        j                  t*              nd)d*z  }d+d,|iz  }t        t        j                  |            d x}}t-        |       }t)        |       }
t-        |
      }||k(  }t-        t*              }||k(  }|r|st        j                  d-||fd.|||f      d/t        j                         v st        j                  t,              rt        j                  t,              nd/d(t        j                         v st        j                  |       rt        j                  |       nd(t        j                  |      d/t        j                         v st        j                  t,              rt        j                  t,              nd/d't        j                         v st        j                  t(              rt        j                  t(              nd'd(t        j                         v st        j                  |       rt        j                  |       nd(t        j                  |
      t        j                  |      d/t        j                         v st        j                  t,              rt        j                  t,              nd/d)t        j                         v st        j                  t*              rt        j                  t*              nd)t        j                  |      d0z  }d1d2|iz  }t        t        j                  |            d x}x}x}x}
x}}t)        |       }t         j.                  }t)        |      }
||
k(  }|st        j                  d|fd3||
f      d't        j                         v st        j                  t(              rt        j                  t(              nd'd(t        j                         v st        j                  |       rt        j                  |       nd(t        j                  |      d't        j                         v st        j                  t(              rt        j                  t(              nd'd4t        j                         v st        j                  t               rt        j                  t               nd4t        j                  |      t        j                  |
      d5z  }d6d7|iz  }t        t        j                  |            d x}x}x}}
y )8Ntypefunction==z%(py1)s == %(py4)spy1py4assert %(py6)spy6namez.%(py7)s
{%(py7)s = %(py2)s(%(py4)s, %(py5)s)
}
isinstancestr)py2r    py5py7z%(py10)spy10r   zassert %(py13)spy13description
parametersobject
propertiesz5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}dict)py0r&   py3r'   requiredz5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}reqlist)r0   r   r&   r    in)z%(py0)s in %(py3)srr0   r1   z: z not declaredz
>assert %(py5)sr'   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)ssetnames	_EXPECTED)r0   r   r1   r'   zassert %(py7)sr(   )r   r   )zp%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py12)s
{%(py12)s = %(py6)s(%(py10)s
{%(py10)s = %(py7)s(%(py8)s)
})
}zt%(py12)s
{%(py12)s = %(py6)s(%(py10)s
{%(py10)s = %(py7)s(%(py8)s)
})
} == %(py16)s
{%(py16)s = %(py13)s(%(py14)s)
}len)r0   r   r1   r"   r(   py8r)   py12r*   py14py16zassert %(py18)spy18)zp%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py10)s
{%(py10)s = %(py5)s(%(py8)s
{%(py8)s = %(py6)s._EXECUTORS
})
}tools)r0   r   r1   r'   r"   r=   r)   zassert %(py12)sr>   )rB   
TOOL_SPECS
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationr$   r%   @py_builtinslocals_should_repr_global_nameappend_format_boolopr/   getr4   _format_assertmsgjsondumpsr9   r;   r<   
_EXECUTORS)r:   spec@py_assert0@py_assert3@py_assert2@py_format5@py_format7fn@py_assert1@py_assert6@py_assert9@py_format8@py_format11@py_format12@py_format14params@py_assert4@py_format6r3   r7   @py_format4@py_assert11@py_assert15@py_assert5@py_format17@py_format19@py_assert7@py_format13s                               F/Users/ahmed/devFolder/Ultron/claude-voice/gateway/tests/test_tools.py1test_tool_specs_are_valid_openai_function_schemasrm      s   E  F|)z)|z))))|z)))|)))z)))))))*9"V*9z*c*9*9*r&z9z999999z999z999*999999c999c999*9999*999z9999999999999G"]+Gz+S1G1G1b6GG6GGGGGGGzGGGzGGG+GGGGGGSGGGSGGG1GGGG1GGG6GGGGGGGGGGGGGGL!f~))~))))~)))~)))))))))) .5z.55555555z555z555.5555555555555555555jjR(#t$$$$$$$$z$$$z$$$$$$#$$$#$$$$$$t$$$t$$$$$$$$$$A|,O1,,OOO1,OOOOOO1OOO1OOO,OOOFBqc.OOOOOOO  	

4RZ  !  u:":"""":""""""3"""3""""""u"""u""":""""""""""""""""u::SZ:Z::::C	N:N::::::N::::::3:::3::::::u:::u:::::::::::::::::::S:::S::::::::::::Z:::::::::C:::C::::::	:::	:::N::::::::u:.U--.-..:.....:.......3...3......u...u...:...............U...U...-...........    c                   K   dd}| j                  t        d|       t        j                  dddi       d {   }d}||v }|st        j                  d|fd||f      t        j
                  |      d	t        j                         v st        j                  |      rt        j
                  |      nd	d
z  }dd|iz  }t        t        j                  |            d x}}d}||v }|st        j                  d|fd||f      t        j
                  |      d	t        j                         v st        j                  |      rt        j
                  |      nd	d
z  }dd|iz  }t        t        j                  |            d x}}y 7 Pw)Nc                   K   g }d}| |k(  }|}|r	d}	||	k(  }
|
}|sXt        j                  d|fd| |f      dt        j                         v st        j                  |       rt        j
                  |       ndt        j
                  |      dz  }dd|iz  }|j                  |       |rt        j                  d
fd	|	f      d
t        j                         v st        j                  |      rt        j
                  |      nd
t        j
                  |	      dz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d x}x}x}x}x}
}	|d   }d}||k(  }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}dddddgiS w)NGETz/searchr   )z%(py2)s == %(py5)smethod)r&   r'   %(py7)sr(   )z%(py9)s == %(py12)spath)py9r>   %(py14)sr?   r   assert %(py17)spy17qcoffeer   r   r!   r"   factsAhmed likes flat whitesm1F)factidlinked)
rD   rE   rI   rJ   rK   rF   rL   rM   rG   rH   )rr   rt   ra   bodytimeoutrZ   rb   rU   rT   re   @py_assert10rc   r]   rk   @py_format15@py_format16@py_format18rV   rW   rX   s                       rl   fake_reqz2test_memory_search_formats_facts.<locals>.fake_req1   s7    44v49449#44444v444444v444v44444444444944444444444444944444444444444c{&h&{h&&&&{h&&&{&&&h&&&&&&&#<D%*, - . 	.s   HH	_mem_requestr   queryrz   r|   r5   z%(py1)s in %(py3)soutr   r1   assert %(py5)sr'   r}   NNg      4@)setattrrB   executerD   rE   rF   rI   rJ   rK   rG   rH   )monkeypatchr   r   rT   rV   rd   rc   s          rl    test_memory_search_formats_factsr   0   s     .
 ~x8o/BC
CC$+$++++$+++$++++++++++++++++43;43433 Ds   7FF	EFc                   K   i dfd	}| j                  t        d|       t        j                  dddi       d {   }d}||k(  }|st        j                  d|fd||f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      d
z  }dd|iz  }t        t        j                  |            d x}}d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}}d   d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}}y 7 w)Nc                 (   K   |d<   |d<   ddiS w)Nrt   r   r   x )rr   rt   ra   r   r   seens        rl   r   z,test_memory_remember_posts.<locals>.fake_req>   s#     VVc{s   r   r	   textzAli is the new PMzRemembered.r   )z%(py0)s == %(py3)sr   r8   r   r'   rt   z	/rememberr   r   r!   r"   r   r   )r   rB   r   rD   rE   rI   rJ   rK   rF   rG   rH   )r   r   r   rV   rZ   rd   rc   rT   rU   rW   rX   r   s              @rl   test_memory_remember_postsr   <   sF    D ~x8/&:M1NO
OC3-3-33-<&;&<;&&&&<;&&&<&&&;&&&&&&&<6#66#66666#6666666#66666666 Ps   ;G0G-F/G0c                   K   dd}| j                  t        d|       t        j                  dddd       d {   }g }d}||v }|}|rd}||v }|}|sXt        j                  d|fd	||f      t        j
                  |      d
t        j                         v st        j                  |      rt        j
                  |      nd
dz  }	dd|	iz  }
|j                  |
       |rt        j                  dfd|f      t        j
                  |      d
t        j                         v st        j                  |      rt        j
                  |      nd
dz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d x}x}x}x}x}}t        j                  di        d {   }g }d}||v }|}|rd}||v }|}|sXt        j                  d|fd	||f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      nddz  }	dd|	iz  }
|j                  |
       |rt        j                  d|fd||f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      nddz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d x}x}x}x}x}}y 7 7 w)Nc                 <   K   |dk(  rddiS |dk(  r	ddddd	giS i S w)
Nz/taskr   t9z/taskstaskst1Call supplier2026-07-11T09:00:00)r   r   duer   )rr   rt   ra   r   r   s        rl   r   z)test_tasks_list_and_add.<locals>.fake_reqJ   sB     7?$<8T?&;= > ? ?	s   r   r   z
Email Sarar   )r   r   zreminder setr5   )z%(py3)s in %(py5)sadd)r1   r'   rs   r(   )z%(py10)s in %(py12)s)r)   r>   rv   r?   r   rw   rx   r   r   r   lstr   )r   rB   r   rD   rE   rF   rI   rJ   rK   rL   rM   rG   rH   )r   r   r   rZ   rV   rb   rT   r\   re   rc   r]   rk   r   r   r   r   s                   rl   test_tasks_list_and_addr   I   s     ~x8j<2G+I J JC8<8<38>8>S#88888<3888<888888388838888888>S888>888888S888S88888888888888lB/
/C1?1?c!1d1dck1111?c111?111111c111c1111111dc111d111111c111c11111111111111	J 0s#   8MMFMMFMMc                   
K   i 
d
fd	}| j                  t        d|       t        j                  ddddd       d {   }
d   }d	}||k(  }|slt        j                  d
|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}
d   d   }d}||k(  }|slt        j                  d
|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}
d   d   }d}||k(  }|slt        j                  d
|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}d}||v }|st        j                  d|fd||f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      nddz  }dd|iz  }	t        t        j                  |	            d x}}y 7 1w)Nc                 0   K   | d<   |d<   dddddgS w)NrY   argsAcme Coffeecafe	Al Khobar
0501234567)companycategorycityphoner   )rY   r   r   captureds      rl   fake_rpcz9test_ultron_leads_uses_search_leads_rpc.<locals>.fake_rpc[   s3     )v$|= > 	>s   _rpcr   rz   r   mobile)r   r   phone_filterrY   search_leadsr   r   r   r!   r"   r   p_cityp_phoner   r5   r   r   r   r   r'   Ng      >@)r   rB   r   rD   rE   rF   rG   rH   rI   rJ   rK   )r   r   r   rT   rU   rV   rW   rX   rd   rc   r   s             @rl   'test_ultron_leads_uses_search_leads_rpcr   Y   s    H>
 vx0n7B?G/I J JC D>+^+>^++++>^+++>+++^+++++++FH%44%4444%444%4444444444FI&2(2&(2222&(222&222(2222222=C=C=CCJs   =I4 I1H1I4c                   K   dd}| j                  t        d|       d}t        j                  di        d {   }||v }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}}d
}t        j                  di        d {   }||v }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}}t        j                  dddi       d {    y 7 67 7 
w)Nc                 J  K   | dk(  rdddS | dk(  rdddgS | d	k(  r|d
   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}dg iS i S w)Nget_dashboard_statsi     )totalverifiedget_team_activitySara
   )usercontactsget_contact_statsp_range7dr   r   r   r!   r"   days)rD   rE   rF   rG   rH   )rY   r   r   rT   rU   rV   rW   rX   s           rl   r   z9test_ultron_stats_and_team_and_contacts.<locals>.fake_rpck   s     &&!s33$$#455$$	?*d*?d****?d***?***d*******B<	s   B!B#r   1234r   r5   z%(py1)s in %(py4)sr   r!   r"   r   r   r
   r      r   )r   rB   r   rD   rE   rF   rG   rH   )r   r   rT   rU   rV   rW   rX   s          rl   'test_ultron_stats_and_team_and_contactsr   j   s      vx0<5==<<<6<<<<<6<<<<6<<<<<<<<<<<D5==)?DDD6DDDDD6DDDD6DDDDDDDDDDD
--.
<<< =D<s5   7E6E/BE6E2BE6)E4*E62E64E6c                 L  K   d }| j                  t        d|       t        j                  dddi       d {   }d}|j                  } |       }||v }|st	        j
                  d|fd||f      t	        j                  |      d	t        j                         v st	        j                  |      rt	        j                  |      nd	t	        j                  |      t	        j                  |      d
z  }dd|iz  }t        t	        j                  |            d x}x}x}}y 7 w)Nc                      K   t        d      w)Nznetwork down)RuntimeError)aks     rl   boomz6test_executor_never_raises_on_tool_error.<locals>.boom{   s     >**s   r   r   r   r   failedr5   )zD%(py1)s in %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.lower
}()
}r   )r   r1   r'   r(   zassert %(py9)sru   )r   rB   r   lowerrD   rE   rF   rI   rJ   rK   rG   rH   )	r   r   r   rT   rb   r[   rV   r]   @py_format10s	            rl   (test_executor_never_raises_on_tool_errorr   z   s     +~t4o~>
>C"syy"y{"8{""""8{"""8""""""s"""s"""y"""{""""""" ?s   6D$D"C*D$c                  @  K   d} t        j                  di        d {   }| |v }|slt        j                  d|fd| |f      t        j                  |       t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}}y 7 }w)Nzunknown toolnoper5   r   r   r!   r"   )rB   r   rD   rE   rF   rG   rH   )rT   rU   rV   rW   rX   s        rl   test_unknown_toolr      sd     <5==#<<<><<<<<><<<<><<<<<<<<<<<<s   BBA>Bc                  z   t         j                  } d} | |      }|sddt        j                         v st	        j
                  t               rt	        j                  t               ndt	        j                  |       t	        j                  |      t	        j                  |      dz  }t        t	        j                  |            d x} x}}t         j                  } d} | |      }| }|sddt        j                         v st	        j
                  t               rt	        j                  t               ndt	        j                  |       t	        j                  |      t	        j                  |      dz  }t        t	        j                  |            d x} x}x}}t         j                  } d} | |      }| }|sddt        j                         v st	        j
                  t               rt	        j                  t               ndt	        j                  |       t	        j                  |      t	        j                  |      dz  }t        t	        j                  |            d x} x}x}}t         j                  } d} | |      }| }|sddt        j                         v st	        j
                  t               rt	        j                  t               ndt	        j                  |       t	        j                  |      t	        j                  |      dz  }t        t	        j                  |            d x} x}x}}y )	Nz1The new supplier is Journey Joy, based in Riyadh.zMassert %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s._is_salient
}(%(py4)s)
}rB   )r0   r&   r    r"   hizQassert not %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s._is_salient
}(%(py4)s)
}zwhat time is it?thanks)	rB   _is_salientrI   rJ   rD   rK   rF   rG   rH   )rZ   rU   rg   rX   rj   r]   s         rl   test_salience_gater      s   QPQPQQQQQQQQ5QQQ5QQQQQQPQQQQQQQQQQ  && &&&&&&&&&&&u&&&u&&& &&&&&&&&&&&&&  4!34 !344444444444u444u444 444!34444444444  ** ***********u***u*** *************rn   )__doc__builtinsrI   _pytest.assertion.rewrite	assertionrewriterD   rP   pytestrB   _CORE_PHONEr;   rm   r   r   r   r   r   r   r   r   r   rn   rl   <module>r      s[    J     	
 FN	/0	
72  "= #=+rn   