
    D_i;                         S r SSKrSSKJr  SSKJr  SSKJr  SSKJ	r	  SSK
JrJr  SrS	\S
\S\4S jrS\S\4S jr " S S\5      r " S S\5      rg)z"Tracers that print to the console.    N)Callable)Any)
BaseTracer)Run)get_bolded_textget_colored_texti  objfallbackreturnc                 T     [         R                  " U SSS9$ ! [         a    Us $ f = f)zTry to stringify an object to JSON.

Args:
    obj: Object to stringify.
    fallback: Fallback string to return if the object cannot be stringified.

Returns:
    A JSON string if the object can be stringified, otherwise the fallback string.
   F)indentensure_ascii)jsondumps	Exception)r	   r
   s     W/home/james-whalen/.local/lib/python3.13/site-packages/langchain_core/tracers/stdout.pytry_json_stringifyr      s.    zz#ae<< s    ''runc                     U R                   U R                  -
  nUR                  5       nUS:  a  U[        -  S S3$ US S3$ )zGet the elapsed time of a run.

Args:
    run: any object with a start_time and end_time attribute.

Returns:
    A string with the elapsed time in seconds or
        milliseconds if time is less than a second.

   z.0fmsz.2fs)end_time
start_timetotal_secondsMILLISECONDS_IN_SECOND)r   elapsed_timesecondss      r   elapsedr       sP     <<#..0L((*G{2237r::c]!    c                   8  ^  \ rS rSr% SrSr\\S'    S\\/S4   S\	SS4U 4S	 jjr
S
\SS4S jrS
\S\\   4S jrS
\S\4S jrS
\SS4S jrS
\SS4S jrS
\SS4S jrS
\SS4S jrS
\SS4S jrS
\SS4S jrS
\SS4S jrS
\SS4S jrS
\SS4S jrSrU =r$ )FunctionCallbackHandler0   z9Tracer that calls a function with a single str parameter.function_callback_handlernamefunctionNkwargsr   c                 2   > [         TU ]  " S0 UD6  Xl        g)zVCreate a FunctionCallbackHandler.

Args:
    function: The callback function to call.
N )super__init__function_callback)selfr'   r(   	__class__s      r   r,    FunctionCallbackHandler.__init__6   s     	"6"!)r!   r   c                     g )Nr*   )r.   r   s     r   _persist_run$FunctionCallbackHandler._persist_run?   s    r!   c                     / nUnUR                   (       a_  U R                  R                  [        UR                   5      5      nU(       a  UR	                  U5        UnO U$ UR                   (       a  M_  U$ )znGet the parents of a run.

Args:
    run: The run to get the parents of.

Returns:
    A list of parent runs.
)parent_run_idrun_mapgetstrappend)r.   r   parentscurrent_runparents        r   get_parents#FunctionCallbackHandler.get_parentsB   sg     ''\\%%c+*C*C&DEFv&$ ''' r!   c                 z    U R                  U5      SSS2   nSR                  S [        / UQUP5       5       5      $ )zGet the breadcrumbs of a run.

Args:
    run: The run to get the breadcrumbs of.

Returns:
    A string with the breadcrumbs of the run.
Nz > c              3   \   #    U  H"  u  pUR                    S UR                   3v   M$     g7f):N)run_typer&   ).0ir<   s      r   	<genexpr>:FunctionCallbackHandler.get_breadcrumbs.<locals>.<genexpr>`   s-      
7	 q.7s   *,)r=   join	enumerate)r.   r   r:   s      r   get_breadcrumbs'FunctionCallbackHandler.get_breadcrumbsV   sH     ""3'"-zz 
&#7
 
 	
r!   c           
          U R                  U5      nUR                  R                  5       nU R                  [	        SSS9 S3[        SU SU S35      -   [        UR                  S5       -   5        g )	Nz[chain/start]greencolor [z] Entering z run with input:
[inputs])rJ   rC   
capitalizer-   r   r   r   inputsr.   r   crumbsrC   s       r   _on_chain_start'FunctionCallbackHandler._on_chain_startf   sx    %%c*<<**,w?@B&XJ>PQRS#CJJ
;<>	
r!   c                     U R                  U5      nUR                  R                  5       nU R                  [	        SSS9 S3[        SU S[        U5       SU S35      -   [        UR                  S	5       -   5        g )
Nz[chain/end]bluerN   rP   rQ   ] [z
] Exiting z run with output:
z	[outputs])	rJ   rC   rS   r-   r   r   r    r   outputsrU   s       r   _on_chain_end%FunctionCallbackHandler._on_chain_endo   s    %%c*<<**,V<=Q?F83ws|nJxj@ST $CKK=>	@	
r!   c                     U R                  U5      nUR                  R                  5       nU R                  [	        SSS9 S3[        SU S[        U5       SU S35      -   [        UR                  S	5       -   5        g )
Nz[chain/error]redrN   rP   rQ   r[   ] z run errored with error:
[error])	rJ   rC   rS   r-   r   r   r    r   errorrU   s       r   _on_chain_error'FunctionCallbackHandler._on_chain_errorz   s    %%c*<<**,u=>a@F83ws|nBxj8RS $CIIy9:	<	
r!   c                 :   U R                  U5      nSUR                  ;   a/  SUR                  S    Vs/ s H  o3R                  5       PM     sn0OUR                  nU R                  [	        SSS9 S3[        SU S35      -   [        US5       -   5        g s  snf )	Npromptsz[llm/start]rM   rN   rP   rQ   z] Entering LLM run with input:
rR   )rJ   rT   stripr-   r   r   r   )r.   r   rV   prT   s        r   _on_llm_start%FunctionCallbackHandler._on_llm_start   s    %%c* CJJ& CJJy,AB,Aq,ABC 	
 	W=>a@&)IJKL#FJ78:	
	 Cs   Bc                     U R                  U5      nU R                  [        SSS9 S3[        SU S[	        U5       S35      -   [        UR                  S5       -   5        g )	Nz	[llm/end]rZ   rN   rP   rQ   r[   z] Exiting LLM run with output:
z
[response])rJ   r-   r   r   r    r   r\   r.   r   rV   s      r   _on_llm_end#FunctionCallbackHandler._on_llm_end   so    %%c*6:;1=F83ws|n,LM $CKK>?	A	
r!   c                     U R                  U5      nU R                  [        SSS9 S3[        SU S[	        U5       S35      -   [        UR                  S5       -   5        g )	Nz[llm/error]r`   rN   rP   rQ   r[   z] LLM run errored with error:
rb   )rJ   r-   r   r   r    r   rc   rm   s      r   _on_llm_error%FunctionCallbackHandler._on_llm_error   sn    %%c*U;<A>F83ws|n,KL $CIIy9:	<	
r!   c                     U R                  U5      nU R                  [        SSS9 S3[        SU S35      -   SUR                  S   R                  5        S3-   5        g )	Nz[tool/start]rM   rN   rP   rQ   z ] Entering Tool run with input:
"input)rJ   r-   r   r   rT   rh   rm   s      r   _on_tool_start&FunctionCallbackHandler._on_tool_start   sn    %%c*g>?qA&)JKLM#**W%++-.a01	
r!   c                    U R                  U5      nUR                  (       ad  U R                  [        SSS9 S3[	        SU S[        U5       S35      -   S[        UR                  S	   5      R                  5        S3-   5        g g )
Nz
[tool/end]rZ   rN   rP   rQ   r[   z ] Exiting Tool run with output:
rt   output)rJ   r\   r-   r   r   r    r8   rh   rm   s      r   _on_tool_end$FunctionCallbackHandler._on_tool_end   s    %%c*;;""#L?@B!xs73<.0QR c#++h/06689;	< r!   c                     U R                  U5      nU R                  [        SSS9 S3[        SU S[	        U5       S35      -   SUR
                   3-   5        g )	Nz[tool/error]r`   rN   rP   rQ   r[   ra   zTool run errored with error:
)rJ   r-   r   r   r    rc   rm   s      r   _on_tool_error&FunctionCallbackHandler._on_tool_error   sh    %%c*e<=Q?&WS\N"=>?.yyk	
r!   )r-   )__name__
__module____qualname____firstlineno____doc__r&   r8   __annotations__r   r   r,   r   r2   listr=   rJ   rW   r]   rd   rj   rn   rq   rv   rz   r}   __static_attributes____classcell__r/   s   @r   r#   r#   0   s%   C+D#+R*3%+!6 *# *$ *  s tCy (
3 
3 
 
3 
4 
	
 	
 	
	
3 	
4 	

 
 

s 
t 

 
 

# 
$ 
	 	 	
# 
$ 
 
r!   r#   c                   H   ^  \ rS rSr% SrSr\\S'   S\SS4U 4S jjr	S	r
U =r$ )
ConsoleCallbackHandler   z"Tracer that prints to the console.console_callback_handlerr&   r(   r   Nc                 2   > [         TU ]  " SS[        0UD6  g)z Create a ConsoleCallbackHandler.r'   Nr*   )r+   r,   print)r.   r(   r/   s     r   r,   ConsoleCallbackHandler.__init__   s    2%262r!   r*   )r   r   r   r   r   r&   r8   r   r   r,   r   r   r   s   @r   r   r      s(    ,*D#*3 3 3 3r!   r   )r   r   collections.abcr   typingr   langchain_core.tracers.baser   langchain_core.tracers.schemasr   langchain_core.utils.inputr   r   r   r8   r   r    r#   r   r*   r!   r   <module>r      si    (  $  2 . H C 3 3    $P
j P
f34 3r!   