o
    egi/                  
   @   s4  d dl Z d dlZd dlZd dlmZ d dlmZ d dl	Z
d dlmZ d dlmZmZmZ G dd dZdeeef deeef fdd	Zed
krz3eddZeeZW d   n1 s^w   Y  eeZe D ]\ZZee de  qkW dS  ey Z zedee  W Y dZ[dS dZ[ww dS )    N)LinearSegmentedColormap)DictListAnyc                   @   sp   e Zd ZdZdeeef fddZdd Zdeeef defd	d
Z	deeef defddZ
defddZdS )ExecutionVisualizerz9Utility for visualizing CrewAI-Playwright execution flowsexecution_datac                 C   s.   || _ d| _tj| jst| j dS dS )z
        Initialize the visualizer
        
        Args:
            execution_data: The execution data from TaskExecutionManager
        visualizationsN)r   
output_dirospathexistsmakedirs)selfr    r   //var/www/html/minaions/visualization_utility.py__init__   s
   zExecutionVisualizer.__init__c                 C   s\   i }d| j v r,| j d }| |}|r||d< | |}|r"||d< |  }|r,||d< |S )z
        Generate all visualizations for the execution data
        
        Returns:
            Dictionary with paths to generated visualizations
        flow_visualizationagent_graphtimelinesummary)r   _generate_agent_graph_generate_timeline_generate_execution_summary)r   output_filesvis_data
graph_pathtimeline_pathsummary_pathr   r   r   generate_visualizations   s   



z+ExecutionVisualizer.generate_visualizationsvisualization_datareturnc              
   C   s\  z| dg }| dg }|r|sW dS t }|D ]}|| q|D ]}|j|d |d |d d q$tjdd	 tj|d
d}g d}tj||dd|dt	| d tj
||dddddd tj||ddd tj| jd}	tjddd td t  tj|	dd d! t  |	W S  ty }
 ztd"t|
  W Y d}
~
dS d}
~
ww )#z
        Generate a graph visualization of agent interactions
        
        Args:
            visualization_data: The flow visualization data
            
        Returns:
            Path to the generated image file
        agentsconnections fromto	timestamp)r&   )      figsize*   )seed)#4CAF50#2196F3#FFC107z#E91E63#9C27B0i  g?N)	node_sizealpha
node_color   ffffff?z#555555   z->)widthr2   
edge_color	arrowsize
arrowstyle
   z
sans-serif)	font_sizefont_familyzagent_interaction_graph.pngzAgent Interaction Graph   fontsizeoff,  tightdpibbox_incheszError generating agent graph: )getnxDiGraphadd_nodeadd_edgepltfigurespring_layoutdraw_networkx_nodeslendraw_networkx_edgesdraw_networkx_labelsr
   r   joinr	   titleaxistight_layoutsavefigclose	Exceptionprintstr)r   r   r!   r"   Gagentconnposnode_colorsoutput_pather   r   r   r   9   sD   

z)ExecutionVisualizer._generate_agent_graphc              
   C   s$  z| dg }|sW dS |D ]}tj|d d|d< q|jdd d i }|D ]}|d	 |vr6g ||d	 < ||d	  | q(tjd
d\}}dddddd}i }g }	t| D ]D\}
\}}|
}|||< |	| |D ]0}| |d d}|j	|d ||ddd |d dv r|j
d|d  |d |fddddd qmqZ|tt|	 ||	 |jtd tjd d! d"d# | D }|j|d$d% |jd&d'd( tjd)d*d+ t  tj| jd,}tj|d-d.d/ t  |W S  ty } ztd0t |  W Y d1}~dS d1}~ww )2z
        Generate a timeline visualization of agent activities
        
        Args:
            visualization_data: The flow visualization data
            
        Returns:
            Path to the generated image file
        r   r#   r&   z%Y-%m-%d %H:%M:%Sdatetimec                 S   s   | d S )Nrc   r   )xr   r   r   <lambda>   s    z8ExecutionVisualizer._generate_timeline.<locals>.<lambda>)keyr]   )   r(   r)   r/   r-   #F44336r.   #9E9E9E)in_progresssuccessfailedretrypendingstatusr0   d   r5   )colorsr2   action)complete_taskhandle_failurez	Subtask: 
subtask_id)r;   r   zoffset pointsr(   )xytext
textcoordsr@   r2   z%H:%M:%S-   )rotationc                 S   s,   g | ]\}}t jd gd gdd|d|dqS )r   owr;   )markerrq   markerfacecolor
markersizelabel)rL   Line2D).0ro   rq   r   r   r   
<listcomp>   s
    
z:ExecutionVisualizer._generate_timeline.<locals>.<listcomp>zupper right)handleslocT333333?)r2   zAgent Activity Timeliner>   r?   zexecution_timeline.pngrB   rC   rD   zError generating timeline: N)!rG   rc   strptimesortappendrL   subplots	enumerateitemsscatterannotate
set_yticksrangerP   set_yticklabelsxaxisset_major_formattermdatesDateFormatterxtickslegendgridrT   rV   r
   r   rS   r	   rW   rX   rY   rZ   r[   )r   r   r   itemr!   figaxstatus_colorsy_positionsy_labelsi
agent_nameeventsy_poseventrq   legend_elementsra   rb   r   r   r   r   u   sv   
	


z&ExecutionVisualizer._generate_timelinec              
      s&  z| j di }|sW dS dddddd}i  | D ]6\}}|dd}|dd}||v r8||  d7  < n|d	  d7  < | v rM |  d7  < qd |< qtjdd
dd\}\}}	t| }
t| }g d}|j|
||d |j	ddd |
d |jddd t   fddD }tdg d}|fddD }|	j||d |	j	ddd |	d |	
d |	 |	jddd tjddd tjg dd  tj| jd!}tj|d"d#d$ t  |W S  ty } ztd%t|  W Y d&}~dS d&}~ww )'z
        Generate a summary visualization of execution statistics
        
        Returns:
            Path to the generated image file
        execution_trackingr#   r   )	completedrl   rj   rn   rm   ro   unknownattempts   rn   r4   )rg      r)   )r-   rh   r/   ri   r.   )rq   zTask Status Distribution   r?   zNumber of Tasksyr   )rU   r2   c                    s   g | ]} | qS r   r   )r   a)attempt_countsr   r   r     s    zCExecutionVisualizer._generate_execution_summary.<locals>.<listcomp>
GreenToRed)greenyellowredc                    s   g | ]}|t d t   qS )r   )max)r   r   )attempt_labelsr   r   r     s    zRetry Attempts DistributionzNumber of AttemptszExecution Summaryr>   )r   r   r   gffffff?)rectzexecution_summary.pngrB   rC   rD   z$Error generating execution summary: N)r   rG   r   rL   r   listkeysvaluesbar	set_title
set_ylabelr   sortedr   	from_list
set_xlabel
set_xtickssuptitlerV   r
   r   rS   r	   rW   rX   rY   rZ   r[   )r   r   status_countsrv   dataro   r   r   ax1ax2status_labelsstatus_valuesr   attempt_valuescmapcolorsra   rb   r   )r   r   r   r      sX   




z/ExecutionVisualizer._generate_execution_summaryN)__name__
__module____qualname____doc__r   r[   r   r   r   r   r   r   r   r   r   r   r   
   s    <^r   execution_resultr    c                 C   s   t | }| S )z
    Generate visualizations for an execution result
    
    Args:
        execution_result: The execution result from main()
        
    Returns:
        Dictionary with paths to generated visualizations
    )r   r   )r   
visualizerr   r   r   visualize_execution  s   
r   __main__zexecution_result.jsonrz: z"Error visualizing execution data: ) r
   jsonrc   matplotlib.pyplotpyplotrL   matplotlib.datesdatesr   networkxrH   matplotlib.colorsr   typingr   r   r   r   r[   r   r   openfloadr   visualization_pathsr   vis_typer   rZ   rY   rb   r   r   r   r   <module>   s4      " 