
    /ju                         S SK r S SKrS SKrS SKrS SKJrJrJrJrJ	r	J
r
  SSKJr  SSKJrJrJrJrJrJr   " S S5      r " S S	\5      rg)
    N)LiteralSequenceOptionalListUnion	Generator   )get_max_items_from_list)UsageLimitExceededErrorInvalidAPIKeyErrorMissingAPIKeyErrorBadRequestErrorForbiddenErrorTimeoutErrorc            )          \ rS rSrSrSKS\\   S\\\\4      S\\   S\\   S\\   S	\\R                     4S
 jjr
S rS rS r                  SLS\S\S   S\S   S\S   S\S\S\S\S\\   S\\   S\\\S   4   S\\\S   4   S\S \S!\S"\S#\S$\S%\S&\4(S' jjr                  SLS\S\S   S\S   S\S   S\S\S\S\S\\   S\\   S\\\S   4   S\\\S   4   S\S \S!\S"\S#\S$\S%\S&\4(S( jjr        SMS)\\\   \4   S\S*\S   S+\S   S \S#\S$\S\S,\S&\4S- jjr        SMS)\\\   \4   S\S*\S   S+\S   S \S#\S$\S\S,\S&\4S. jjr                SNS/\S0\S1\S2\S3\S4\\   S5\\   S6\\   S\\   S7\S\S*\S   S+\S   S \S#\S$\S,\S&\4$S8 jjr                SNS/\S0\S1\S2\S3\S4\\   S5\\   S6\\   S\\   S7\S\S*\S   S+\S   S \S#\S$\S,\S&\4$S9 jjr            SOS/\S0\S1\S2\S3\S4\\   S5\\   S6\\   S\\   S7\S\S \S$\S&\4S: jjr            SOS/\S0\S1\S2\S3\S4\\   S5\\   S6\\   S\\   S7\S\S \S$\S&\4S; jjr          SPS\S\S   S\S   S\S\S\\   S\\   S<\S \S!\S#\S&\4S= jjr         SQS\S\S   S\S   S\S\S\\   S\\   S \S!\S#\S&\4S> jjr     SRS?\S@\SA   SB\SC\SD\SE   S \\   S&\\\\ SS4   4   4SF jjr!     SRS?\S@\SA   SB\SC\SD\SE   S \\   S&\\\\ SS4   4   4SG jjr"SH\S&\4SI jr#SJr$g)STavilyClient	   z
Tavily API client class.
Napi_keyproxiesapi_base_urlclient_source
project_idsessionc                 b   Uc  [         R                  " S5      nU(       d  Uc
  [        5       eU(       a  UR                  S5      O[         R                  " S5      U(       a  UR                  S5      O[         R                  " S5      S.nUR	                  5        VV	s0 s H  u  pU	(       d  M  X_M     sn	n=(       d    S nU=(       d    [         R                  " S5      n
U=(       d    SU l        Xl        Xpl        S	S
0U R                  (       a  SSU R                   30O0 ESU=(       d    S0EU
(       a  SU
0O0 EU l        US LU l	        Ub  UO[        R                  " 5       U l        U R                  R	                  5        H8  u  pXR                  R                  ;  d  M   XR                  R                  U'   M:     U R                  (       aW  U R                  R	                  5        H8  u  pXR                  R                  ;  d  M   XR                  R                  U'   M:     g g s  sn	nf )NTAVILY_API_KEYhttpTAVILY_HTTP_PROXYhttpsTAVILY_HTTPS_PROXY)r   r   TAVILY_PROJECTzhttps://api.tavily.comzContent-Typezapplication/jsonAuthorizationzBearer zX-Client-Sourceztavily-pythonzX-Project-ID)osgetenvr   getitemsbase_urlr   r   headers_external_sessionrequestsSessionr   )selfr   r   r   r   r   r   resolved_proxieskvtavily_projectkeyvalueprotocolurls                  >/app/agent/.venv/lib/python3.13/site-packages/tavily/tavily.py__init__TavilyClient.__init__   s   ?ii 01G7?$&& ,3GKK'		BU8V-4W[[)"))DX:Y

 .>-C-C-EK-ETQDAD-EKSt#Bryy1A'B$@(@' .
>Bll74<<.!9:PR
 }?
 4B/r	
 ")!4")"5w8;K;K;M,,,,.JC,,...,1$$S) / <<!%!3!3!5<<#7#7758LL((2 "6 ) Ls   H+/H+c                 \    U R                   (       d  U R                  R                  5         gg)z(Close the session and release resources.N)r(   r   closer+   s    r4   r8   TavilyClient.close3   s     %%LL  &    c                     U $ N r9   s    r4   	__enter__TavilyClient.__enter__8   s    r;   c                 $    U R                  5         g r=   )r8   )r+   exc_typeexc_valexc_tbs       r4   __exit__TavilyClient.__exit__;   s    

r;   querysearch_depth)basicadvancedfastz
ultra-fasttopic)generalnewsfinance
time_range)dayweekmonthyear
start_dateend_datedaysmax_resultsinclude_domainsexclude_domainsinclude_answer)rI   rJ   include_raw_content)markdowntextinclude_imagestimeoutcountryauto_parametersinclude_faviconinclude_usageexact_matchreturnc                    0 SU_SU_SU_SU_SU_SU_SU_SU_S	U_S
U_SU	_SU
_SU_SU_SU_SU_SU_SU0EnUR                  5        VVs0 s H  u  nnUc  M  UU_M     nnnU(       a  UR                  U5        [        US5      nU R                  S-   n[        R
                  " U5      n U R                  R                  UUUS9nUR                  S:X  a  UR	                  5       $ Sn UR	                  5       R                  S0 5      R                  SS5      nUR                  S:X  a  [        U5      eUR                  S;   a  [!        U5      eUR                  S:X  a  [#        U5      eUR                  S:X  a  [%        U5      eUR'                  5       es  snnf ! [        R                  R                   a    [        U5      ef = f! [         a     Nf = f)z8
Internal search method to send the request to the API.
rG   rH   rL   rP   rU   rV   rW   r[   r\   rX   rY   rZ   r_   ra   rb   rc   rd   re   Nx   z/searchdatar`       detailerror  i  i  i      )r%   updateminr&   jsondumpsr   postr)   
exceptionsTimeoutr   status_coder$   	Exceptionr   r   r   r   raise_for_status)r+   rG   rH   rL   rP   rU   rV   rW   rX   rY   rZ   r[   r\   r_   r`   ra   rb   rc   rd   re   kwargsrj   r-   r.   r3   payloadresponserm   s                               r4   _searchTavilyClient._search>   s_   4
U
L
 U
 *	

 *
 
 D
 n
 "#6
 ;
 
 
 n
 w
 
  !
" ]#
$ ;%
* "&?A1?KKgs#mmi'**T"	(||((7G(LH 3&==?"F!,,Xr:>>wM ##s*-f55%%8$V,,%%,(00%%,%f--//11A @ ""** 	(w''	(  s*   
FF/F -0G *G	
GGc                     U R                   " U40 SU_SU_SU_SU_SU_SU_SU_SU	_S	U
_S
U_SU_SU_SU_SU_SU_SU_SU_SU_UD6nUR                  S/ 5        U$ )z
Combined search method.
rH   rL   rP   rU   rV   rW   rX   rY   rZ   r[   r\   r_   r`   ra   rb   rc   rd   re   results)r   
setdefault)r+   rG   rH   rL   rP   rU   rV   rW   rX   rY   rZ   r[   r\   r_   r`   ra   rb   rc   rd   re   r}   response_dicts                         r4   searchTavilyClient.search   s    4 U /2>/+0/ 1;/ 1;	/
 /7/ +// 2=/ 6E/ 6E/ 5C/ :M/ 5C/ .5/ .5/ 6E/  6E!/" 4A#/$ 2='-'/( 	  B/r;   urlsextract_depthformatchunks_per_sourcec
           
      :   UUUUUUUUU	S.	nUR                  5        VVs0 s H  u  pUc  M
  X_M     nnnU
(       a  UR                  U
5         U R                  R                  U R                  S-   [
        R                  " U5      US9nUR                  S:X  a  UR                  5       $ Sn UR                  5       R                  S0 5      R                  SS5      nUR                  S	:X  a  [        U5      eUR                  S
;   a  [        U5      eUR                  S:X  a  [!        U5      eUR                  S:X  a  [#        U5      eUR%                  5       es  snnf ! [        R                  R                   a    [        U5      ef = f! [         a     Nf = f)z:
Internal extract method to send the request to the API. 
)	r   r_   r   r   r`   rc   rd   rG   r   Nz/extractri   rk   rl   rm   rn   ro   rp   rq   rr   )r%   rs   r   rw   r&   ru   rv   r)   rx   ry   r   rz   r$   r{   r   r   r   r   r|   )r+   r   r_   r   r   r`   rc   rd   rG   r   r}   rj   r-   r.   r   rm   s                   r4   _extractTavilyClient._extract   s     ,*.*!2

 "&??KK	(||(()C$**UYJZdk(lH 3&==?"F!,,Xr:>>wM ##s*-f55%%8$V,,%%,(00%%,%f--//119 @ ""** 	(w''	(  s(   	EE<E  .0F  *F

FFc
                     U R                   " UUUUU4UUUU	S.U
D6nUR                  S/ 5        UR                  S/ 5        U$ )z
Combined extract method.
)rc   rd   rG   r   r   failed_results)r   r   )r+   r   r_   r   r   r`   rc   rd   rG   r   r}   r   s               r4   extractTavilyClient.extract   sg     d&4&3&,&-		0
 7F4A,18I	0 )/	0 	  B/  !126r;   r3   	max_depthmax_breadthlimitinstructionsselect_pathsselect_domainsexclude_pathsallow_externalc                    0 SU_SU_SU_SU_SU_SU_SU_SU_S	U	_S
U
_SU_SU_SU_SU_SU_SU_SU_nU(       a  UR                  U5        UR                  5        VVs0 s H  u  nnUc  M  UU_M     nnn U R                  R                  U R                  S-   [
        R                  " U5      US9nUR                  S:X  a  UR                  5       $ Sn UR                  5       R                  S0 5      R                  SS5      nUR                  S:X  a  [        U5      eUR                  S;   a  [        U5      eUR                  S:X  a  [!        U5      eUR                  S:X  a  [#        U5      eUR%                  5       es  snnf ! [        R                  R                   a    [        U5      ef = f! [         a     Nf = f)z{
Internal crawl method to send the request to the API.
include_favicon: If True, include the favicon in the crawl results.
r3   r   r   r   r   r   r   r   rZ   r   r_   r   r   r`   rc   rd   r   Nz/crawlri   rk   rl   rm   rn   ro   rp   rq   rr   rs   r%   r   rw   r&   ru   rv   r)   rx   ry   r   rz   r$   r{   r   r   r   r   r|   )r+   r3   r   r   r   r   r   r   r   rZ   r   r_   r   r   r`   rc   rd   r   r}   rj   r-   r.   r   rm   s                           r4   _crawlTavilyClient._crawl  s>   0
3

 ;
 U	

 L
 L
 n
 ]
 
 n
 n
 ]
 f
 w
 
  ]!
"  !2#
( KK!%?A1?	(||(()A

SWHXbi(jH 3&==?"F!,,Xr:>>wM ##s*-f55%%8$V,,%%,(00%%,%f--//113 @ ""** 	(w''	(  s*   !
F/F:<F 0F8 *F58
GGc                     U R                   " U40 SU_SU_SU_SU_SU_SU_SU_SU	_S	U
_S
U_SU_SU_SU_SU_SU_SU_UD6$ )z\
Combined crawl method.
include_favicon: If True, include the favicon in the crawl results.
r   r   r   r   r   r   r   rZ   r   r_   r   r   r`   rc   rd   r   )r   )r+   r3   r   r   r   r   r   r   r   rZ   r   r_   r   r   r`   rc   rd   r   r}   s                      r4   crawlTavilyClient.crawla  s    0 {{3 %%.%'2% "'% )5	%
 )5% +9% *7% ,;% +9% +9% *7% #)% $+% ,;% *7%  .?##% 	%r;   c                 F   UUUUUUUUU	U
UUUS.nU(       a  UR                  U5        UR                  5        VVs0 s H  u  nnUc  M  UU_M     nnn U R                  R                  U R                  S-   [
        R                  " U5      US9nUR                  S:X  a  UR                  5       $ Sn UR                  5       R                  S0 5      R                  SS5      nUR                  S	:X  a  [        U5      eUR                  S
;   a  [        U5      eUR                  S:X  a  [!        U5      eUR                  S:X  a  [#        U5      eUR%                  5       es  snnf ! [        R                  R                   a    [        U5      ef = f! [         a     Nf = f)z5
Internal map method to send the request to the API.
)r3   r   r   r   r   r   r   r   rZ   r   r_   r`   rd   Nz/mapri   rk   rl   rm   rn   ro   rp   rq   rr   r   )r+   r3   r   r   r   r   r   r   r   rZ   r   r_   r`   rd   r}   rj   r-   r.   r   rm   s                       r4   _mapTavilyClient._map  s   ( "&((,*.,,*
  KK!%?A1?	(||(()?djjQUFV`g(hH 3&==?"F!,,Xr:>>wM ##s*-f55%%8$V,,%%,(00%%,%f--//113 @ ""** 	(w''	(  s)   
E 
E <E& 40F &*F
F F c                 B    U R                   " U4UUUUUUUU	U
UUUS.UD6$ )z
Combined map method.

)r   r   r   r   r   r   r   rZ   r   r_   r`   rd   )r   )r+   r3   r   r   r   r   r   r   r   rZ   r   r_   r`   rd   r}   s                  r4   mapTavilyClient.map  sJ    ( yy ##,%0$&2&2(6'4)8(6(6!('4# "# 	#r;   
max_tokensc                    [         R                  " S[        SS9  U R                  " U4UUUUUUSSSU	U
US.UD6nUR	                  S/ 5      nU Vs/ s H  nUS   US   S	.PM     nn[
        R                  " [        UU5      5      $ s  snf )
aa  
Get the search context for a query. Useful for getting only related content from retrieved websites
without having to deal with context extraction and limitation yourself.

max_tokens: The maximum number of tokens to return (based on openai token compute). Defaults to 4000.

Returns a string of JSON containing the search context up to context limit.
zHget_search_context is deprecated and will be removed in future versions.   
stacklevelF)rH   rL   rW   rX   rY   rZ   r[   r\   r_   r`   ra   rc   r   r3   content)r3   r   )warningswarnDeprecationWarningr   r$   ru   rv   r
   )r+   rG   rH   rL   rW   rX   rY   rZ   r   r`   ra   rc   r}   r   sourcessourcecontexts                    r4   get_search_contextTavilyClient.get_search_context  s    , 	`(Q	8 U '2>+0*.1<5D5D499>49-4-45D' (.'  ##Ir2!(*!(v "%=VI5FG!( 	 *zz1':FGG*s   Bc                     [         R                  " S[        SS9  U R                  " U4UUUUUUSSSUU	U
S.UD6nUR	                  SS5      $ )	zP
Q&A search method. Search depth is advanced by default to get the best answer.
z@qna_search is deprecated and will be removed in future versions.r   r   FT)rH   rL   rW   rX   rY   rZ   r\   r_   r[   r`   ra   rc   answerrl   )r   r   r   r   r$   )r+   rG   rH   rL   rW   rX   rY   rZ   r`   ra   rc   r}   r   s                r4   
qna_searchTavilyClient.qna_search  sp      	X(Q	8U '2>+0*.1<5D5D9>4948-4-45D' (.'   2..r;   inputmodel)miniproautooutput_schemastreamcitation_format)numberedmlaapachicagoc                   ^ UUUUUS.nUR                  5        V	V
s0 s H  u  pU
c  M
  X_M     nn	n
U(       a  UR                  U5        U(       Ga   U R                  R                  U R                  S-   [
        R                  " U5      USS9mTR                  S:w  a  Sn TR                  5       R                  S0 5      R                  S	S5      nTR                  S
:X  a  [        U5      eTR                  S;   a  [        U5      eTR                  S:X  a  [!        U5      eTR                  S:X  a  [#        U5      eTR%                  5       eS[&        [(        SS4   4U4S jjnU" 5       $  U R                  R                  U R                  S-   [
        R                  " U5      US9mTR                  S:X  a  TR                  5       $ Sn TR                  5       R                  S0 5      R                  S	S5      nTR                  S
:X  a  [        U5      eTR                  S;   a  [        U5      eTR                  S:X  a  [!        U5      eTR                  S:X  a  [#        U5      eTR%                  5       es  sn
n	f ! [        R                  R                   a    [        U5      ef = f! [         a     GNf = f! [        R                  R                   a    [        U5      ef = f! [         a     Nf = f)z:
Internal research method to send the request to the API.
)r   r   r   r   r   Nz	/researchT)rj   r`   r   rk   rl   rm   rn   ro   rp   rq   rr   rf   c               3      >#     TR                  S S9 H  n U (       d  M  U v   M     TR                  5         g ! TR                  5         f = f7f)N)
chunk_size)iter_contentr8   )chunkr   s    r4   stream_generator0TavilyClient._research.<locals>.stream_generatorv  sD     %!)!6!6$!6!G 5"'K "H NN$HNN$s   A9 9 AAAri   )r%   rs   r   rw   r&   ru   rv   r)   rx   ry   r   rz   r$   r{   r   r   r   r   r|   r   bytes)r+   r   r   r   r   r   r`   r}   rj   r-   r.   rm   r   r   s                @r4   	_researchTavilyClient._research@  s    *.
 "&??KK,<<,,MMK/D)#	 -  ##s*%]]_002>BB7DQF ''3.1&99))_<(00))S0,V44))S0)&11"3355%itT0A&B % $%%,<<,,MMK/D)# -  ##s*}}&%]]_002>BB7DQF ''3.1&99))_<(00))S0,V44))S0)&11"3355O @ &&.. ,"7++, ! < &&.. ,"7++, ! sF   	I;I;=J $0J. 0<J? 0K, *J+.
J<;J<?*K),
K98K9c           
      4    U R                   " SUUUUUUS.UD6$ )ax  
Research method to create a research task.

Args:
    input: The research task or question to investigate (required).
    model: The model used by the research agent - must be either 'mini', 'pro', or 'auto'.
    output_schema: Schema for the 'structured_output' response format (JSON Schema dict).
    stream: Whether to stream the research task.
    citation_format: Citation format - must be either 'numbered', 'mla', 'apa', or 'chicago'.
    timeout: Optional HTTP request timeout in seconds. 
    **kwargs: Additional custom arguments.

Returns:
    dict: Response containing request_id, created_at, status, input, and model.
)r   r   r   r   r   r`   r>   )r   )r+   r   r   r   r   r   r`   r}   s           r4   researchTavilyClient.research  s6    2 ~~ 
'+
 
 	
r;   
request_idc                 X    U R                   R                  U R                  SU 3-   5      nUR                  S;   a  UR                  5       $ Sn UR                  5       R                  S0 5      R                  SS5      nUR                  S:X  a  [        U5      eUR                  S	;   a  [        U5      eUR                  S
:X  a  [        U5      eUR                  S:X  a  [        U5      eUR                  5       e! [         a  n[        SU 35      eSnAff = f! [         a     Nf = f)z
Get research results by request_id.

Args:
    request_id: The research request ID.

Returns:
    dict: Research response containing request_id, created_at, completed_at, status, content, and sources.
z
/research/zError getting research: N)rk      rl   rm   rn   ro   rp   rq   rr   )r   r$   r&   r{   rz   ru   r   r   r   r   r|   )r+   r   r   erm   s        r4   get_researchTavilyClient.get_research  s#   	<||''*ZL8Q(QRH :-==?"F!,,Xr:>>wM ##s*-f55%%8$V,,%%,(00%%,%f--//11+  	<6qc:;;	<  s)   +C< 0D <
DDD
D)(D))r(   r   r&   r'   r   r   )NNNNNN)NNNNNNNNNNNN<   NNNNN)NNN   NNNN)NNNNNNNNNNNN   NNN)NNNNNNNNNNr   N)
rI   rM         NNi  r   NN)	rJ   rM   r   r   NNr   NN)NNFr   N)%__name__
__module____qualname____firstlineno____doc__r   strdictr)   r*   r5   r8   r?   rE   r   intr   r   boolfloatr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__r>   r;   r4   r   r   	   s
   #9 #9xSRUX?W #9nvwzn{ #9  T\  ]`  Ta #9  v~  B  vC #9  U]  ^f  ^n  ^n  Uo #9J!

 TX?CFJ"& $ #'1515LPPT'+!##(,(,&*$('O2O2%&OPO2 ;<O2 $$BC	O2
  O2 O2 O2 !O2 "*#O2 "*#O2 !&dG4G,H&H IO2 &+49K1L+L%MO2 !%O2 O2 O2  "&!O2" "&#O2$  $%O2& "'O2* +O2h SW?CEI!%#"&0404KOOS&* ""'+'+%)#''//$%NO/ :</ ##AB	/
 / / /  / !)/ !)/  %T73F+G%GH/ %*$8J0K*K$L/  $/ / /  !%!/" !%#/$ #%/& !'/* +/f )-?C7;"$)-'+"*.72T#Y^,72!%72 !((; <72 !!34	72
  72 #'72 !%72 72 %(72 72v (,>B6:!#(,&*!)-DIsN+ $  '':;   23	
  "&  $  $' > "# $*.,0+/-1#'#':>26 $("&%)#H2H2H2 H2 	H2
 H2 #3-H2 %SMH2 $C=H2 &c]H2 !H2 !H2 ##67H2 ./H2 H2 "H2   !H2"  ##H2& 'H2X  $!%"&,0.2-1/3%)%)<@48"&*$('+#)%)%)% )% 	)%
  )% %SM)% 'sm)% &c])%  (})% #)% #)% %%89)% 01)% )%  $)%  "!)%" "%#)%& ')%Z "# $*.,0+/-1#'#' "&?2?2?2 ?2 	?2
 ?2 #3-?2 %SM?2 $C=?2 &c]?2 !?2 !?2 ?2  ?2 ?2F  $!%"&,0.2-1/3%)%)"$(!#!#!# !# 	!#
  !# %SM!# 'sm!# &c]!#  (}!# #!# #!# !# "!# !#J _fJS'(./<@<@-1,.*.37+H"%+H)01Z)[+H #**F"G+H "%	+H
 ),+H -5SM+H -5SM+H (++H %*+H %(+H -1+H !$+H^ WaBK &'4848$&"&+/!/!/!()R!S!/ "">?!/ 	!/
 !$!/ %-SM!/ %-SM!/ "!/  !/ %)!/ !/J ;?(,!&R\-1[6[6 !67[6 "&[6 	[6
 $++N#O[6 $E?[6 T9UD$->#??@[6~ :>'+ %Q[,0!
!
 56!
 !%!
 	!

 #**M"N!
 #5/!
 D)E4,=">>?!
F#2!$#2#2r;   r   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )Clienti  z_
Tavily API client class.

WARNING! This class is deprecated. Please use TavilyClient instead.
c                 X   > [         R                  " S[        SS9  [        TU ]  U5        g )Nz5Client is deprecated, please use TavilyClient insteadr   r   )r   r   r   superr5   )r+   r}   	__class__s     r4   r5   Client.__init__  s$    M(Q	8 r;   r>   )r   r   r   r   r   r5   r   __classcell__)r   s   @r4   r   r     s    ! !r;   r   )r)   ru   r"   r   typingr   r   r   r   r   r   utilsr
   errorsr   r   r   r   r   r   r   r   r>   r;   r4   <module>r      s?      	  F F * C  CZ2 Z2z
!\ 
!r;   