
    ~h#                        d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ g dZe G d d             Ze G d d             Z G d d      Z G d de      ZdZ G d d      Zy)    N)	dataclassfield)IntEnum)box)ConsoleGroup)Panel)Rule)Syntax)Table)Text)Tree)escape_code_brackets)AgentLoggerLogLevelMonitor
TokenUsageTimingc                   N    e Zd ZU dZeed<   eed<    ed      Zeed<   d Zd Z	y	)
r   zG
    Contains the token usage information for a given step or run.
    input_tokensoutput_tokensF)inittotal_tokensc                 @    | j                   | j                  z   | _        y Nr   r   r   selfs    Q/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/smolagents/monitoring.py__post_init__zTokenUsage.__post_init__.   s     --0B0BB    c                 J    | j                   | j                  | j                  dS )Nr   r   r   s    r   dictzTokenUsage.dict1   s'     --!// --
 	
r!   N)
__name__
__module____qualname____doc__int__annotations__r   r   r    r#    r!   r   r   r   $   s/     5)L#)C
r!   r   c                   R    e Zd ZU dZeed<   dZedz  ed<   ed        Zd Z	de
fdZy)	r   zB
    Contains the timing information for a given step or run.
    
start_timeNend_timec                 P    | j                   d S | j                   | j                  z
  S r   )r-   r,   r   s    r   durationzTiming.durationB   s#    }},tQ$--$//2QQr!   c                 J    | j                   | j                  | j                  dS )Nr,   r-   r/   r1   r   s    r   r#   zTiming.dictF   s!    //
 	
r!   returnc                 V    d| j                    d| j                   d| j                   dS )NzTiming(start_time=z, end_time=z, duration=)r1   r   s    r   __repr__zTiming.__repr__M   s/    #DOO#4KkZ^ZgZgYhhijjr!   )r$   r%   r&   r'   floatr)   r-   propertyr/   r#   strr5   r*   r!   r   r   r   9   sD     !Hedl!R R
k# kr!   r   c                   *    e Zd Zd ZdefdZd Zd Zy)r   c                 J    g | _         || _        || _        d| _        d| _        y Nr   )step_durationstracked_modelloggertotal_input_token_counttotal_output_token_count)r   r=   r>   s      r   __init__zMonitor.__init__R   s)     *'($()%r!   r2   c                 D    t        | j                  | j                        S )N)r   r   )r   r?   r@   r   s    r   get_total_token_countszMonitor.get_total_token_countsY   s!    5577
 	
r!   c                 .    g | _         d| _        d| _        y r;   )r<   r?   r@   r   s    r   resetzMonitor.reset_   s     '($()%r!   c                    |j                   j                  }| j                  j                  |       dt	        | j                         d|dd}|j
                  s| xj                  |j
                  j                  z  c_        | xj                  |j
                  j                  z  c_        |d| j                  dd| j                  dz  }|d	z  }| j                  j                  t        |d
      d       y)zUpdate the metrics of the monitor.

        Args:
            step_log ([`MemoryStep`]): Step log to update the monitor with.
        z[Step z: Duration z.2fz secondsNz| Input tokens: ,z | Output tokens: ]dimstyle   level)timingr/   r<   appendlentoken_usager?   r   r@   r   r>   logr   )r   step_logstep_durationconsole_outputss       r   update_metricszMonitor.update_metricsd   s     !00""=1"3t':':#;"<KVYGZZbc+((H,@,@,M,MM())X-A-A-O-OO)"4#?#?"BBTUYUrUrstTuvO 	3_E:!Dr!   N)r$   r%   r&   rA   r   rC   rE   rW   r*   r!   r   r   r   Q   s    *

 
*
Er!   r   c                       e Zd ZdZdZdZdZy)r   r   rL      N)r$   r%   r&   OFFERRORINFODEBUGr*   r!   r   r   r   x   s    
CEDEr!   r   z#d4b702c                      e Zd Zej                  dfdededz  fdZej                  ddeez  ez  ddfdZ	deddfd	Z
dej                  efd
ededz  ddfdZej                  fded
ededdfdZej                  fdededdfdZdej                  fd
edededz  deddf
dZej                   fdee   deddfdZd Zy)r   NrN   consolec                 D    || _         |t               | _        y || _        y r   )rN   r   r`   )r   rN   r`   s      r   rA   zAgentLogger.__init__   s    
?"9DL"DLr!   rM   r2   c                    t        |t              rt        |j                            }|| j                  k  r | j
                  j                  |i | yy)zyLogs a message to the console.

        Args:
            level (LogLevel, optional): Defaults to LogLevel.INFO.
        N)
isinstancer8   r   upperrN   r`   print)r   rN   argskwargss       r   rS   zAgentLogger.log   sH     eS!U[[]+EDJJDLL// r!   error_messagec                 Z    | j                  t        |      dt        j                         y )Nzbold red)rK   rN   )rS   r   r   r\   )r   rh   s     r   	log_errorzAgentLogger.log_error   s    %m4Jhnn]r!   contenttitlec           	          t        |ddd      }|r-| j                  t        t        d|z   d|      |      |       y | j                  ||       y )	Nmarkdowngithub-darkTlexertheme	word_wrapz[bold italic]left)alignrK   rM   )r   rS   r   r
   )r   rk   rl   rN   rK   markdown_contents         r   log_markdownzAgentLogger.log_markdown   sj    !	
 HH'%/$#
 %   
 HH%UH3r!   c           
          | j                  t        t        |ddd      d|z   dt        j                        |       y )	NpythonmonokaiTrp   [bold]rt   )rl   title_alignr   rM   )rS   r	   r   r   HORIZONTALS)r   rl   rk   rN   s       r   log_codezAgentLogger.log_code   sH    "#"	 &"OO
  	 	
r!   c                 l    | j                  t        d|z   dt              t        j                         y )Nr{   u   ━)
charactersrK   rM   )rS   r
   
YELLOW_HEXr   r]   )r   rl   rN   s      r   log_rulezAgentLogger.log_rule   s2    5   
 -- 	 	
r!   subtitlec           	      |    | j                  t        dt        |       dd|rd| ndz   |t        d      |       y )	Nz
[bold]
z[bold]New runz -  rt   )rl   r   border_stylesubtitle_alignrM   )rS   r	   r   r   )r   rk   r   rl   rN   s        r   log_taskzAgentLogger.log_task   sN    /89<%%3ugRH!'%  	 		
r!   messagesc           
          dj                  |D cg c]"  }t        j                  t        |      d      $ c}      }| j	                  t        |ddd      |       y c c}w )	Nr      )indentrn   ro   Trp   rM   )joinjsondumpsr#   rS   r   )r   r   rN   messagemessages_as_strings        r   log_messageszAgentLogger.log_messages   s]    !YY[c'dPW

4=(K'de" #	  	 	
 (es   'Ac                    d ddt         d z  fdfdt         |            }|j                  j                  dk(  r|j	                  d|j
                           ||       | j                  j                  |       y )Nc                    t        dd      }|j                  dd       |j                  d       |j                  d       | j                         D ]  \  }}t        |d	i       j                         D cg c]E  \  }}| d
|j	                  dd       d|j	                  d      rdnd d|j	                  dd       G }}}|j                  |t        |dt        |            dj                  |              t        d|      S c c}}w )NTbold)show_headerheader_styleNamez#1E90FFrJ   Description	Argumentsinputsz (`typeAny`optionalz
, optionalr   z): descriptionr   u/   🛠️ [italic #1E90FF]Tools:[/italic #1E90FF])	r   
add_columnitemsgetattrgetadd_rowr8   r   r   )
tools_dicttablenametoolarg_nameinforf   s          r   create_tools_sectionz>AgentLogger.visualize_agent_tree.<locals>.create_tools_section   s%   d@EV95]+[)(..0 ^
d +2$"*E*K*K*M&$  jDHHVU$;#<AdhhWaNblhj=kknosowow  yF  HJ  pK  oL  M  dGD-T$KTYYW[_]^ JERRs   7A
Dr   c                     |r| dnd}dt          d| | j                  j                   d| j                  j                   S )Nz | r   z[bold rH   )r   	__class__r$   modelmodel_id)agentr   name_headlines      r   get_agent_headlinez<AgentLogger.visualize_agent_tree.<locals>.get_agent_headline   sH    ,0tfCLbMJ<q8P8P7QQTUZU`U`UiUiTjkkr!   c                    | j                   |j                               |j                  r| j                  d      }|j                  j                         D ]{  \  }}|j                   ||            }|j                  j
                  dk(  r|j                  d|j                          |j                  d|j                           ||       } yy)z"Recursively builds the agent tree.u$   🤖 [italic #1E90FF]Managed agents:	CodeAgent9   ✅ [italic #1E90FF]Authorized imports:[/italic #1E90FF] u3   📝 [italic #1E90FF]Description:[/italic #1E90FF] N)addtoolsmanaged_agentsr   r   r$   additional_authorized_importsr   )	parent_tree	agent_objagents_branchr   managed_agent
agent_treebuild_agent_treer   r   s	         r   r   z:AgentLogger.visualize_agent_tree.<locals>.build_agent_tree   s    OO0AB'' +0V W+4+C+C+I+I+K @'D-!.!2!23EmUY3Z![J$..77;F"WXe  YD  YD  XE  F NN%XYfYrYrXs#tu$Z?@ (r!   r   r   r   )r8   r   r   r$   r   r   r`   re   )r   r   	main_treer   r   r   s      @@@r   visualize_agent_treez AgentLogger.visualize_agent_tree   s    	S	lC$J 	l	@ +E23	??##{2MMKELoLoKpq 	E*9%r!   )r$   r%   r&   r   r]   r   rA   r(   r8   rS   rj   r   rw   r~   r   r   r^   listr#   r   r   r*   r!   r   r   r      sJ   )1RV #h #4 # 8@}} 	0c	H 4 	0SW 	0^s ^t ^ >B^h 4C 4d
 4mq 4, ?Gmm 
c 
C 
 
PT 
  19 
c 
# 
$ 
 IM`h`m`m 

 

s 

3: 

U] 

rv 

 DL>> 

T$Z 

 

VZ 

)&r!   r   ) r   dataclassesr   r   enumr   richr   rich.consoler   r   
rich.panelr	   	rich.ruler
   rich.syntaxr   
rich.tabler   	rich.textr   	rich.treer   smolagents.utilsr   __all__r   r   r   r   r   r   r*   r!   r   <module>r      s   "  (   '       1 I 
 
 
( k k k.$E $ENw  
G& G&r!   