
    jy                     2   d dl 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mZmZmZmZmZmZ  e            ZdefdZ G d d          ZdefdZdddZdddZdefdZde ee!f         fdZ"dddddddZ#dedefdZ$de%defd Z&d!e'defd"Z(d#e'defd$Z)d%ede%fd&Z*	 djd(ed)ed*e'd+e%d,eddfd-Z+d(ed.e'd/e'ddfd0Z,d1e'defd2Z-d*e'defd3Z.	 dkd(ed)ed*e'd5e%dz  d+e%d6eddfd7Z/	 dld(ed8ed9edz  ddfd:Z0d;e!e         d.e%ddfd<Z1d=edefd>Z2	 dmd@e!e         dAe%dBe'dCe%dDe%dEe%dFeddfdGZ3dHeddfdIZ4	 	 	 	 	 dndKe!e         dLe!e         dMe!e         dNe!e         dOe!e         dPedz  dQedz  d@e!e         dz  dRe%dFeddfdSZ5dldTedUedz  ddfdVZ6dWe!e         ddfdXZ7dldWe!e         d@e!e         dz  ddfdYZ8dldWe!e         dZedz  ddfd[Z9dldWe!e         d@e!e         dz  ddfd\Z:dldWe!e         dZedz  ddfd]Z;dldWe!e         d@e!e         dz  ddfd^Z<dWe!e         ddfd_Z=dodWe!e         dae%ddfdbZ>	 	 dpdceddedz  dQed8edz  d9edz  ddfdeZ?	 	 	 	 dqdfedPedz  d8edz  dgedz  d9edz  ddfdhZ@	 	 dpdPed8edz  d9edz  ddfdiZAdS )r    N)defaultdict)datetimetimezone)Console)Panel)Table)Text)box   )
DailyStatsMonthlyStats	P90Limits
RateLimitsSessionBlockSessionStatsWeeklyStatsreturnc                  Z   t           j                            dd                                          } | dk    rdS | dk    rdS t           j                            dd          }|rF|                    d          }	 t          |d	                   d
k    S # t          t          f$ r Y nw xY wdS )NTT_THEME lightTdarkF	COLORFGBG;   )osenvirongetlowersplitint
ValueError
IndexError)theme	colorfgbgpartss      aC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\venv\Lib\site-packages\src/ui/tables.py_is_light_themer)      s    JNN:r**0022E t u
{B//I $$	uRy>>A%%J' 	 	 	D	5s   ;B B('B(c                       e Zd ZdZ e            ZerdndZerdndZerdndZerdnd	Z	erd
ndZ
erdndZerdndZerdndZdZerdndZerdndZdZdS )_Su0   语义化样式，根据终端主题自动切换grey50dim	dark_cyanzdim cyanzbold dark_cyanz	bold cyanzrgb(180,130,0)z
dim yellowzbold rgb(180,130,0)zbold yellowzbold dark_greenz
bold green
dark_greengreenzrgb(200,150,0)yellowredN)__name__
__module____qualname____doc__r)   r   r-   token
token_boldcost	cost_boldaccentbar_lowbar_midbar_highgoodwarnbad     r(   r+   r+       s        ::OE
&((C 0KKjE%*;!!J$6,D).A%%MI"'9\F#0llG"'5XGH -<<gD$2(D
CCCrC   r+   c                  >    t           j        } | dk     rdS | dk     rdS dS )Nd   compactx   mediumwide)consolewidth)ws    r(   _width_moderM   1   s0    A3w y3w x6rC   CCCodex)claude-codecodexClaude Codec                 V    t          t          d | D                                 dk    S )Nc              3   2   K   | ]}|j         	|j         V  d S N)agent_id.0ss     r(   	<genexpr>z"_is_multi_agent.<locals>.<genexpr>@   s+      ;;!
;1:;;;;;;rC      )lenset)statss    r(   _is_multi_agentr_   ?   s,    s;;u;;;;;<<q@@rC   c                 x    t          t                    }| D ]"}||j                                     |           #|S rU   )r   listrV   append)r^   by_agentrY   s      r(   _group_by_agentrd   C   sA     +D 1 1H ' '##A&&&&OrC   zOpus 4.6zOpus 4.7z
Sonnet 4.6Sonnetz	Haiku 4.5Haiku)zclaude-opus-4-6zclaude-opus-4-7zclaude-sonnet-4-6zclaude-sonnetzclaude-haiku-4-5-20251001zclaude-haikumodelc                     | t           v rt           |          S d| v r#|                     d          d         d d         S | d d         S )N/r      )MODEL_SHORTr!   )rg   s    r(   _model_shortrl   T   sT     "5!!
e| ){{3#CRC((":rC   nc                 z    | dk    r	| dz  ddS | dk    r	| dz  ddS | dk    r	| dz  ddS t          |           S )	Ni ʚ;.2fBi@B .1fMi  K)str)rm   s    r(   _fmt_tokensru   \   su    M +m#*****I~ 'i-&&&&&Ez #e)"""""q66MrC   usdc                 N    | dk    rd| dS | dk    rd| dS | dk    rd| dS dS )	NrE   $.0fr[   ro   r   z.3fz$0rB   )rv   s    r(   	_fmt_costrz   f   sU    
cz 3}}}
ax 3}}}
Qw 3}}}4rC   minutesc                     | dk    r-t          | dz            }t          | dz            }| d|ddS t          |            dS )N<   h02dmmin)r"   )r{   r~   r   s      r(   _fmt_durationr   p   sY    "} 2"a'llrC   rY   c                 H    d}| D ]}|t          |          dk    rdndz  }|S )Nr      r   r[   )ord)rY   rL   chs      r(   _display_widthr   x   s:    	A ( (	#b''D.'QQa'HrC   r   lineslabelpct	bar_widthsuffixc                    t          |dz  |z            }d|z  d||z
  z  z   }|dk    rt          j        n|dk    rt          j        nt          j        }|                     |t          j                   |                     ||           |                     d|dd	|           |r!|                     |t          j                   |                     d
           d S )NrE      █   ░P   2   style  ry   %
)r"   r+   r>   r=   r<   rb   r-   )r   r   r   r   r   filledbar	bar_styles           r(   _append_barr      s    sY&''F
&.5I$67
7C"RxS38-SRZZI	LLbfL%%%	LLIL&&&	LLc	L222 +V26***	LLrC   currentpreviousc                     ||k    rdnd}||k    rt           j        nt           j        }|                     | |           d S )Nu   ↑u   ↓r   )r+   rA   r?   rb   )r   r   r   arrowr   s        r(   _append_trendr      sJ    (3EEeE)6BFFrwE	LLE5L)))))rC   ratioc                 Z    | dk    rdt           j         S | dk    rdt           j         S dS )Ng?zbold g      ?bold)r+   rA   r@   )r   s    r(   _token_heat_styler      s?    s{  rvs{ ! rw   6rC   c                 b    | dk    rt           j        n| dk    rt           j        nt           j        S )Nr   r   )r+   r>   r=   r<   )r   s    r(   
_pct_styler      s(    (N2;;cBh(N

BJNrC   %H:%M	resets_atdate_fmtc                     d}|r8t          j        |t          j                  }d|                    |           }t          | d| d|||           d S )Nr   )tzu     重置于 r   z    )r   fromtimestampr   utcstrftimer   )r   r   r   r   r   r   reset_suffixreset_dts           r(   _render_rate_barr      sl     L D))EEECh&7&7&A&ACC'E'''iFFFFFrC   week	last_weekc                 t   t          j        t          j                  }|                                dz   }|dk    r
|j        |z  nd}|                     dt          |j                   t          j
                   |rt          | |j        |j                   |                     dt          |j                   t          j                   |                     dt          |j        |z             dt          j                   |                     dt          |j                   t          j                   |                     d	t          |           t          j                   |                     d
           |                     d|j         d|j         t          j                   d S )Nr[   r     Token     r   
  Output: 
     速率:    /天
     等效成本  
     日均: r        消息      u    条  会话: )r   nowr   r   weekdaycost_usdrb   ru   total_tokensr+   r7   r   output_tokensr-   rz   r9   message_countsession_count)r   r   r   r   elapsed_daysdaily_avg_costs         r(   _render_week_sectionr      s   
,x|
$
$C;;==1$L5AA5ELT]\111N	LL@D,= > >@@LQQQ HeT.	0FGGG	LL?k$*<==??rvLNNN	LLTk$*;|*KLLTTT\^\bLccc	LL>Idm$<$<>>bgLNNN	LL9i7799LHHH	LL	LLX$"4XXDDVXX`b`fLgggggrC   agent_namesc                    t                      }|                    d           t          j        dk     }t	          |           D ]\  }}|dk    r!|                    dt
          j                   t                              |dk    rdn|	                                |          }|r	|dk    rd}n|r
|d d	         }||k    r|                    d
| d
d           |                    d
| d
t
          j                   |rdnd}|                    |t
          j                   t          
                    |           d S )Nr   H   r   u    │ r   rR   rP   rN   r    zbold reverseu     ←→ jk q/ESC退出u0     ← → 切换  ↑ ↓ 滚动  q / ESC 退出)r	   rb   rJ   rK   	enumerater+   r-   AGENT_SHORTr   r    print)r   r   linerF   inamer   	help_texts           r(   render_tab_barr      sS   66DKKmb G[)) 4 44q5 	/KKrvK...1F XDJJLLZ^__ 	t}, 	EE 	!HE< 	4KKENK;;;;KKEBFK3333-4l)):lIKK	K(((MM$rC   projectc                     | r| ndS )NunknownrB   )r   s    r(   _project_shortr      s    ,779,rC   Tagentsr   
total_costtotal_sessionstotal_messagesdays
top_marginc                    d                     d | D                       }|rt                                           t                              t          d| dd                     t	                      }|                    dd	           |                    d
t          j        	           |                    t          |           t          j	        	           |                    dt          j        	           |                    t          |           t          j        	           |                    dt          j        	           |                    | d	           |                    dt          j        	           |                    | d	           |                    dt          j        	           |                    | t          j        	           t                              |           d S )Nr   c              3   T   K   | ]#}d t           j         dt           j         d| V  $dS )[u   ]●[/z] N)r+   r?   )rX   as     r(   rZ   z!_render_header.<locals>.<genexpr>   s?      LL;bg;;RW;;;;LLLLLLrC   z[bold]Token Tracker[/bold]  bluer   r[   border_stylepaddingu   历史总览r   r   	  Token:      等效成本: 
     会话: 
     消息: u
     天数: )joinrJ   r   r   r	   rb   r+   r-   ru   r8   rz   r:   r;   )	r   r   r   r   r   r   r   
agent_textr   s	            r(   _render_headerr      s    LLVLLLLLJ MM%3z33      FFE	LLvL...	LLRVL,,,	LLK--/r}LEEE	LL$BFL333	LLIj))+2<L@@@	LLbfL---	LLN$FL333	LLbfL---	LLN$FL333	LLbfL---	LLD")L,,,MM%rC   multi_agentc                    |sd S t          d           }| D ]k}|j        s
||j                 }|dxx         |j        z  cc<   |dxx         |j        z  cc<   |dxx         |j        z  cc<   |dxx         |j        z  cc<   lt          |          dk     rd S t          |                                          D ]\  }}t                      }t                              ||          }|                    | d           |                    d	t          j                   |                    t          |d                    t          j                   |                    d
t          j                   |                    t#          |d                    t          j                   |                    dt          j                   |                    |d          d           |                    dt          j                   |                    |d          d           t&                              |           d S )Nc                      dddddS )Nr           )tokensr9   sessionsmessagesrB   rB   rC   r(   <lambda>z)_render_agent_summaries.<locals>.<lambda>   s    q#[\jk4l4l rC   r   r9   r   r   r   r   r   r   r   r   r   )r   rV   r   r   r   r   r\   sorteditemsr	   AGENT_LABELr   rb   r+   r-   ru   r8   rz   r:   rJ   r   )	
stats_listr   rc   rY   r   rV   dr   r   s	            r(   _render_agent_summariesr      s#     +,l,l m mH ) )z 	QZ 	(q~%	&			QZ				*(	*(
8}}q hnn..//  !(33Zv...\000AhK002"-HHH(777	!F),,.blCCC]"&111*'v666]"&111*'v666e rC   
   daily_statsweekly_statsmonthly_statsr   blocksrate_limitsp90session_limitc
           
      
   | s7t                               dt          j         dt          j         d           d S t	          d | D                       }
t	          d | D                       }t	          d | D                       }t	          d | D                       }t          |pdg|
|||t          |           |		           |r3t          |          d
k    r|d         nd }t          |d         |           |r|d         nd }t          |          d
k    r|d         nd }|o|j        d up|j	        d u}|rA|s?| r| d         nd }t          |           d
k    r| d         nd }|rt          |||||           nRd |D             }d |D             }|r|d         nd }|r|D ]}t          |||||           n|rt          |||           |r|dk    rt          |d |                    t                                            d S )Nr      ]暂无数据[/]c              3   $   K   | ]}|j         V  d S rU   r   rW   s     r(   rZ   z#render_dashboard.<locals>.<genexpr>  s$      ;;!q~;;;;;;rC   c              3   $   K   | ]}|j         V  d S rU   r   rW   s     r(   rZ   z#render_dashboard.<locals>.<genexpr>  s$      55AQZ555555rC   c              3   $   K   | ]}|j         V  d S rU   r   rW   s     r(   rZ   z#render_dashboard.<locals>.<genexpr>  s$      ::Q_::::::rC   c              3   $   K   | ]}|j         V  d S rU   r   rW   s     r(   rZ   z#render_dashboard.<locals>.<genexpr>  s$      >>Q>>>>>>rC   rR   )r   r   r   c                 .    g | ]}|j         	|j        |S rB   is_gap	is_activerX   bs     r(   
<listcomp>z$render_dashboard.<locals>.<listcomp>8  s&    KKKq!(Kq{KKKKrC   c                 .    g | ]}|j         	|j        |S rB   r  r  s     r(   r  z$render_dashboard.<locals>.<listcomp>9  s&    QQQAHQQ[Q1QQQrC   r   )rJ   r   r+   r@   sumr   r\   _render_month_overviewfive_hour_pctseven_day_pct_render_daily_panel_render_active_block_render_idle_panel_render_recent_sessions)r   r   r   r   r   r   r   r   r   r   r   r   
total_msgsr   
last_monthcur_weekr   
has_limitstoday	yesterdayactive_blocksfinished_blocks
last_blockr  s                           r(   render_dashboardr&  	  s     <"'<<"'<<<===;;{;;;;;L5555555J::k:::::J>>+>>>>>N!=/K     >*-m*<*<*AK]2&&t
}R0*=== $09|BTH$'$5$5$:DR  Iq+";4"G"p;KdlpKpJ
 A: A#.8BD'*;'7'71'<FKOO$	 	Ly#xKKKKKFKKKQQfQQQ,;E_R((
 	A" V V$QXz9UUUUV 	A{Hi@@@  :MA% :- 8999MMOOOOOrC   monthr  c                    t          j        t          j                  }|j        }|dk    r
| j        |z  nd}t                      }|                    dd           |                    dt          j	                   |                    t          | j                   t          j                   |rt          || j        |j                   |                    dt          j	                   |                    t          | j                   t          j                   |                    dt          j	                   |                    | j         d           |                    dt          j	                   |                    | j         d           |                    d	t          j	                   |                    t          |           t          j                   t&                              |           d S )
Nr   u   本月概览r   r   r   r   r   r   r   )r   r   r   r   dayr   r	   rb   r+   r-   ru   r   r8   r   rz   r:   r   r   r9   rJ   r   )r'  r  r   r   r   r   s         r(   r  r  H  s   
,x|
$
$C7L6BQ6FMU^l22ANFFE	LLvL...	LLRVL,,,	LLK 2335R]LKKK JeU/1HIII	LL$BFL333	LLIen--/r|LDDD	LLbfL---	LLE')L888	LLbfL---	LLE')L888	LLbfL---	LLIn--/rwL???MM%rC   r^   c           	      <   t          |           }t                      }t          dt          j        ddd          }|                    dt          j        d           |r|                    dd	           |                    d
dd           |dk    r"|                    dt          j        d           |                    dd           |                    dd           |                    ddt          j	                   |                    ddt          j
                   |                    ddt          j                   | D ]3}|j                            d          g}|r8|                    t                              |j        |j                             |                    t%          |j                             |dk    r'|                    t)          |j                             |t-          |j                  t-          |j                  t3          t-          |j                  t          j	                  t7          |j                  t;          |j                  gz  } |j        |  5t@          !                    |           d S )Nu   最近十条会话r   r   Ttitler
   header_styler   expand   时间r   no_wrap   来源r1     项目   r1  	max_widthrF      模型InputrightjustifyOutput   总Tokenr<  r      等效成本   消息%m-%d %H:%Mr   )"r_   rM   r   r
   SIMPLE_HEAVY
add_columnr+   r7   r9   r8   r?   r-   
start_timer   rb   r   r   rV   r   r   rl   rg   ru   input_tokensr   r	   r   rz   r   rt   r   add_rowrJ   r   )r^   r   modetablerY   rows         r(   r  r  b  sq   !%((K==D"  E 
XRXt<<< 14000	Xtr:::y @$???	Wg...	Xw///	ZFFF	^WBGDDD	Xwbf===  \**=99: 	@JJ{qz1:>>???

>!),,---9 	.JJ|AG,,---''((Q^,,BMBBBaj!!  
 	
 	sMM%rC   c           
      b   | s7t                               dt          j         dt          j         d           d S t	          |           }t          d | D                       }t          d | D                       }t          d | D                       }t          d | D                       }t          d | D                       }t          |pd	g||||t          |                     t          | |           t                      }t          t          j        d
dd          }	|	                    dt          j        d           |r|	                    dd           |dk    r.|	                    dd           |	                    dd           |dk    r|	                    dd           |	                    ddd
           |	                    ddt          j                   |	                    ddt          j                   |	                    ddt          j                   | rt%          d | D                       nd}
| D ],}|j        |j        z   }|j        g}|r8|                    t.                              |j        |j                             |dk    r+|t5          |j                  t5          |j                  gz  }|dk    r"|                    t5          |                     |t;          t5          |j                  t?          |j        |
z                       tA          |j!                  tE          |j#                  tE          |j$                  gz  } |	j%        |  .t                               |	           t                                            d S )!Nr   r  r  c              3   $   K   | ]}|j         V  d S rU   )daterW   s     r(   rZ   zrender_daily.<locals>.<genexpr>  $      &&1&&&&&&rC   c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   zrender_daily.<locals>.<genexpr>  $      55!q~555555rC   c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   zrender_daily.<locals>.<genexpr>  $      //AQZ//////rC   c              3   $   K   | ]}|j         V  d S rU   r	  rW   s     r(   rZ   zrender_daily.<locals>.<genexpr>  $      44Q_444444rC   c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   zrender_daily.<locals>.<genexpr>  $      88Q888888rC   rR   r   r   T)r
   r-  r   r.  u   日期r0  r2  r3  rF   r9  r:  r;  r=  rI   Cacher>  r?  r@     会话rA  c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   zrender_daily.<locals>.<genexpr>  $      33Q^333333rC   r[   r   )&rJ   r   r+   r@   r_   r]   r  r   r\   r   rM   r   r
   rC  rD  r7   r?   r-   maxcache_creation_tokenscache_read_tokensrM  rb   r   r   rV   ru   rF  r   r	   r   r   rz   r   rt   r   r   rG  )r^   r   r   datesr   r   r  r   rH  rI  
max_tokensrY   cache_totalrJ  s                 r(   render_dailyra    s    <"'<<"'<<<===!%((K&&&&&&&E55u55555L///////J44e44444J88%88888N6,m_lJXbdghmdndnoooE;///==Dc&VVTXYYYE	XRXt<<< 14000y 4'2227333v~ 3'222	Z???	^WBGDDD	Xwbf===	Xwbf===7<C33U333333!J  -0CCVH 	@JJ{qz1:>>???9 	OK//Q_1M1MNNC6> 	1JJ{;//000Q^,,4EanWaFa4b4bcccaj!!    	
 	
 	sMM%MMOOOOOrC   r,  c                    t                      }t          |dt          j        ddd          }|                    dt
          j        d           |dk    r.|                    dd	
           |                    dd	
           |dk    r|                    dd	
           |                    dd	d           |                    dd	t
          j                   |                    dd	t
          j                   |                    dd	t
          j                   | rt          d | D                       nd}| D ]}|j
        |j        z   }|j         d|j         }|g}|dk    r+|t          |j                  t          |j                  gz  }|dk    r"|                    t          |                     |t%          t          |j                  t)          |j        |z                      t+          |j                  t/          |j                  t/          |j                  gz  } |j        |  |                                 dg}	|dk    rO|	t          t9          d | D                                 t          t9          d | D                                 gz  }	|dk    r9|	                    t          t9          d | D                                            |	dt
          j         dt          t9          d | D                                  dt
          j         ddt
          j         dt+          t9          d | D                                  dt
          j         dt/          t9          d  | D                                 t/          t9          d! | D                                 gz  }	 |j        |	  t>                               |           d S )"Nr   r   Tr,  title_styler
   r-  r   r.  u   周r0  rF   r9  r:  r;  r=  rI   rW  r>  r?  r@  rX  rA  c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z'_render_weekly_table.<locals>.<genexpr>  rZ  rC   r[   z ~ r      [bold]合计[/bold]c              3   $   K   | ]}|j         V  d S rU   rF  rW   s     r(   rZ   z'_render_weekly_table.<locals>.<genexpr>  $      ::qAN::::::rC   c              3   $   K   | ]}|j         V  d S rU   r   rW   s     r(   rZ   z'_render_weekly_table.<locals>.<genexpr>  $      ;;AO;;;;;;rC   c              3   4   K   | ]}|j         |j        z   V  d S rU   )r\  r]  rW   s     r(   rZ   z'_render_weekly_table.<locals>.<genexpr>  s.      (f(f[\)@1CV)V(f(f(f(f(f(frC   r   r  c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z'_render_weekly_table.<locals>.<genexpr>  $      +J+JqAN+J+J+J+J+J+JrC   [/c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z'_render_weekly_table.<locals>.<genexpr>  $      (C(C(C(C(C(C(C(CrC   c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z'_render_weekly_table.<locals>.<genexpr>  $      //A//////rC   c              3   $   K   | ]}|j         V  d S rU   r	  rW   s     r(   rZ   z'_render_weekly_table.<locals>.<genexpr>  rt  rC   )!rM   r   r
   rC  rD  r+   r7   r?   r-   r[  r\  r]  
week_startweek_endru   rF  r   rb   r	   r   r   rz   r   rt   r   r   rG  add_sectionr  r8   r:   rJ   r   )
r^   r,  rH  rI  r_  rY   r`  
week_labelrJ  	total_rows
             r(   _render_weekly_tabler{    s   ==DS-=VD  E 
U"(D999y 4'2227333v~ 3'222	Z???	^WBGDDD	Xwbf===	Xwbf===7<C33U333333!J  -0CC5555
L9 	OK//Q_1M1MNNC6> 	1JJ{;//000Q^,,4EanWaFa4b4bcccaj!!    	
 	
 	s	,-Iy 
::E:::::;;;;U;;;;;<<
 	
	 v~ iS(f(f`e(f(f(f%f%fgghhh_BM__K+J+JE+J+J+J(J(JKK__r}___WBLWW9S(C(CU(C(C(C%C%CDDWWWWWC///////00C///////00	 I EM9MM%rC   c           
         | s7t                               dt          j         dt          j         d           d S t	          |           }t          d | D                       }t          d | D                       }t          d | D                       }t          d | D                       }t          d | D                       }t          |pd	g||||t          |          d
z             |r_t          t          |                                                     D ]/\  }}	t          |	t                              ||                     0nt          |            t                                            d S )Nr   r  r  c              3   $   K   | ]}|j         V  d S rU   )r   rW   s     r(   rZ   z render_weekly.<locals>.<genexpr>  rN  rC   c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z render_weekly.<locals>.<genexpr>  rP  rC   c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z render_weekly.<locals>.<genexpr>  rR  rC   c              3   $   K   | ]}|j         V  d S rU   r	  rW   s     r(   rZ   z render_weekly.<locals>.<genexpr>   rT  rC   c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z render_weekly.<locals>.<genexpr>  rV  rC   rR      r,  )rJ   r   r+   r@   r_   r]   r  r   r\   r   rd   r   r{  r   r   )
r^   r   r   weeksr   r   r  r   rV   groups
             r(   render_weeklyr    s    <"'<<"'<<<===!%((K&&&&&&&E55u55555L///////J44e44444J88%88888N6,m_lJXbdghmdndnqrdrsss $%oe&<&<&B&B&D&DEE 	S 	SOHe kooh.Q.QRRRRR	S 	U###MMOOOOOrC   c                 x   t                      }t          |dt          j        ddd          }|                    dt
          j        d           |dk    r.|                    dd	
           |                    dd	
           |dk    r.|                    dd	
           |                    dd	
           |                    dd	d           |                    dd	t
          j                   |                    dd	t
          j                   |                    dd	t
          j                   | D ]}|j	        g}|dk    r+|t          |j                  t          |j                  gz  }|dk    r+|t          |j                  t          |j                  gz  }|t          |j                  t!          |j                  t%          |j                  t%          |j                  gz  } |j        |  |                                 dg}|dk    rO|t          t/          d | D                                 t          t/          d | D                                 gz  }|dk    rO|t          t/          d | D                                 t          t/          d | D                                 gz  }|dt
          j         dt          t/          d | D                                  dt
          j         ddt
          j         dt!          t/          d | D                                  dt
          j         dt%          t/          d | D                                 t%          t/          d | D                                 gz  } |j        |  t4                              |           d S ) Nr   r   Trc  u   月份r0  rF   r9  r:  r;  r=  rI   u   Cache创建u   Cache读取r>  r?  r@  rX  rA  rf  c              3   $   K   | ]}|j         V  d S rU   rh  rW   s     r(   rZ   z(_render_monthly_table.<locals>.<genexpr>2  ri  rC   c              3   $   K   | ]}|j         V  d S rU   rk  rW   s     r(   rZ   z(_render_monthly_table.<locals>.<genexpr>3  rl  rC   c              3   $   K   | ]}|j         V  d S rU   )r\  rW   s     r(   rZ   z(_render_monthly_table.<locals>.<genexpr>7  s%      CCA3CCCCCCrC   c              3   $   K   | ]}|j         V  d S rU   )r]  rW   s     r(   rZ   z(_render_monthly_table.<locals>.<genexpr>8  s%      ??AA/??????rC   r   r  c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z(_render_monthly_table.<locals>.<genexpr>;  ro  rC   rp  c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z(_render_monthly_table.<locals>.<genexpr><  rr  rC   c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z(_render_monthly_table.<locals>.<genexpr>=  rt  rC   c              3   $   K   | ]}|j         V  d S rU   r	  rW   s     r(   rZ   z(_render_monthly_table.<locals>.<genexpr>>  rt  rC   )rM   r   r
   rC  rD  r+   r7   r?   r-   r'  ru   rF  r   r\  r]  r   rz   r   rt   r   r   rG  rx  r  r8   r:   rJ   r   )r^   r,  rH  rI  rY   rJ  rz  s          r(   _render_monthly_tabler    s   ==DS-=VD  E 
XRXt<<<y 4'2227333v~ 9888888	Z???	^WBGDDD	Xwbf===	Xwbf===  WI9 	OK//Q_1M1MNNC6> 	\K 788+aFY:Z:Z[[C''aj!!    	
 	
 	s	,-Iy 
::E:::::;;;;U;;;;;<<
 	
	 v~ 
CCUCCCCCDD???????@@
 	
	 _BM__K+J+JE+J+J+J(J(JKK__r}___WBLWW9S(C(CU(C(C(C%C%CDDWWWWWC///////00C///////00	 I EM9MM%rC   c                 j   | s7t                               dt          j         dt          j         d           d S t	          |           }t          d | D                       }t          d | D                       }t          d | D                       }t          d | D                       }t          d | D                       }t          |          d	z  }t          |pd
g|||||           |r_t          t          |                                                     D ]/\  }	}
t          |
t                              |	|	                     0nt          |            t          |           dk    r(t                                            t          |            t                                            d S )Nr   r  r  c              3   $   K   | ]}|j         V  d S rU   )r'  rW   s     r(   rZ   z!render_monthly.<locals>.<genexpr>K  s$      ((Q((((((rC   c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z!render_monthly.<locals>.<genexpr>L  rP  rC   c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z!render_monthly.<locals>.<genexpr>M  rR  rC   c              3   $   K   | ]}|j         V  d S rU   r	  rW   s     r(   rZ   z!render_monthly.<locals>.<genexpr>N  rT  rC   c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z!render_monthly.<locals>.<genexpr>O  rV  rC      rR   r  r[   )rJ   r   r+   r@   r_   r]   r  r\   r   r   rd   r   r  r   r   _render_model_breakdown)r^   r   r   monthsr   r   r  r   r   rV   r  s              r(   render_monthlyr  E  s    <"'<<"'<<<===!%((K((%(((((F55u55555L///////J44e44444J88%88888Nv;;D6,m_lJXbdhiii %%oe&<&<&B&B&D&DEE 	T 	TOHe!%{x/R/RSSSSS	T 	e$$$
5zzA~ '&&&MMOOOOOrC   c           
         i }| D ]=}|j                                         D ]!\  }}|                    |d          |z   ||<   ">|sd S t          |                                          }t          |                                d d          }t          dt          j        ddd          }|	                    d	t          j        d
           |	                    dd           |	                    dd           |	                    dd           |d d         D ]\  }}|dk    r||z  dz  nd}t          |dz  dz            }	d|	z  dd|	z
  z  z   }
|dk    rt          j        }n|dk    rd}nt          j        }|                    t!          |          t#          |          |ddt%          |
|                     t&                              |           d S )Nr   c                     | d         S )Nr[   rB   xs    r(   r   z)_render_model_breakdown.<locals>.<lambda>k  s
    QqT rC   T)keyreverseu   模型分布r   r   r+  r8  r0  Tokenr:  r;  u   占比r      )	min_widthr   rE   r   r   r   r   rq   r   r   )modelsr   r   r  valuesr   r   r
   SIMPLErD  r+   r9   r"   r8   r-   rG  rl   ru   r	   rJ   r   )r^   
all_modelsrY   rg   r   totalsorted_modelsrI  r   r   bar_textr   s               r(   r  r  a  s2   !#J B BX^^-- 	B 	BME6 *ua 8 86 AJu	B  
!!##$$E:++-->>4PPPMJ  E 
XRWd;;;	Wg...	Xw///	R2&&&&rr* 
 
v&+ai6funs""Qc	B''	9$uY'??8 	II2X 	IIIMMMM+++		
 	
 	
 	
 MM%rC   r  limitc                 X   | s7t                               dt          j         dt          j         d           d S t	          |           }| d |         }t          d |D                       }t          d |D                       }t                                            t                               t          dt          |           dt          |            dt          j         dt          |           d	t          j         d
t          j
         dt          |           d	t          j
         ddd                     t                      }t          t          j        dd          }|                    dt          j        d           |r|                    dd           |                    ddd           |dk    r9|                    dt          j        d           |                    dd           |dk    r.|                    dd           |                    dd           |                    d dd!           |                    d"dt          j        !           |                    d#dt          j        !           |rt+          d$ |D                       nd%}|D ]M}	|	j                            d&          g}
|r8|
                    t2                              |	j        |	j                             |
                    t9          |	j                             |dk    r+|
t=          |	j                  tA          |	j!                  gz  }
|dk    r+|
t          |	j"                  t          |	j#                  gz  }
|
tI          t          |	j%                  tM          |	j%        |z            '          t          |	j'                  tQ          |	j)                  gz  }
 |j*        |
  Ot                               |           t                                            d S )(Nr   r  r  c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z"render_sessions.<locals>.<genexpr>  rP  rC   c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z"render_sessions.<locals>.<genexpr>  rR  rC   u#   [bold]Token Tracker[/bold]  最近  / u    个会话  Token: [rp  u   ]  等效成本: [r   r   r   r   )r
   r-  r   r/  Tr0  r2  r3  r4  r5  r6  rF   r8  u   时长r:  r;  rI   r9  r=  r>  r?  r@  rA  c              3   $   K   | ]}|j         V  d S rU   r  rW   s     r(   rZ   z"render_sessions.<locals>.<genexpr>  rZ  rC   r[   rB  r   )+rJ   r   r+   r@   r_   r  r   r\   r8   ru   r:   rz   rM   r   r
   rC  rD  r7   r9   r?   r-   r[  rE  r   rb   r   r   rV   r   r   rl   rg   r   duration_minutesrF  r   r	   r   r   r   rt   r   rG  )r^   r  r   shownr   r   rH  rI  r_  rY   rJ  s              r(   render_sessionsr    sA    <"'<<"'<<<===!%((K&5&ME55u55555L///////JMMOOOMM%	Rc%jj 	R 	RSZZ 	R 	R=	R 	R#.|#<#<	R 	R@B	R 	R,	R 	R)2:)>)>	R 	RBD,	R 	R 	R       ==Dc&VVLLLE	XRXt<<< 14000	Xtr:::y 4$???7333v~ 4'2227333	Z???	^WBGDDD	Xwbf===7<C33U333333!J  \**=99: 	@JJ{qz1:>>???

>!),,---9 	NL))=9K+L+LMMC6> 	OK//Q_1M1MNNCQ^,,4EanWaFa4b4bcccaj!!  
 	

 	sMM%MMOOOOOrC   r!  r"  c                 j	   t                      dk    rdnd}t                      }|                    dd           d| j        |j        t
          fd| j        |j        t          fd	| j	        |j
        d
 fg}d}|D ]\  }	}
}}|dk    rt          |
|z  dz  d          nd}t          ||          }d|	 ddt          |	          z
  z  z   }d ||
           d ||           }t          |||||           |                    d           |                    dt          | j                   t          j                   |rt#          || j        |j                   |                    dt          | j                   t          j                   |                    dt          | j        | j        z              dt          j                   |                    dt          | j                   t          j                   |rt#          || j        |j                   |                    d| j         d| j	         t          j                   | j	        dk    rA| j        | j	        z  }|                    dt          |           dt          j                   |rt1          j        t4          j                  }|                                dz   }|dk    r
|j        |z  nd}|                    dt          |j                   t          j                   |rt#          ||j        |j                   |                    dt          |j                   t          j                   |                    dt          |j        |z             dt          j                   |                    dt          |j                   t          j                   |rt#          ||j        |j                   |                    dt          |           t          j                   |                    d|j         d|j	         t          j                   |                    d           t:                              t?          |tA          |          d !                     d S )"NrF   r  r  u   当日数据面板 (P90)

r   r   zToken Usagez
Cost Usagez	Msg Usagec                     |  dS )N    条rB   r  s    r(   r   z%_render_daily_panel.<locals>.<lambda>  s    1


 rC   r   r   rE   r   r   r5  r  r   r   r   z	  Cache: r   r   r   r   u   /条r[   u   

  本周 Token r   u     本周成本  r   r   r   )!rM   r	   rb   r   token_limitru   r   
cost_limitrz   r   message_limitr   r[  r   r   r+   r7   r   r   r-   r\  r]  r9   r   r   r   r   r   r   rJ   r   r   r   )r!  r"  r   r   r   r   r   	p90_itemsmax_pctr   r   r  unit_fmtr   display_labelr   tokens_per_msgr   r   r   s                       r(   r  r    s    "mmy08bIFFE	LL/vL>>> 
*CO[I	u~s~yA	e)3+<>R>RSI
 G+4  'wx16Ac'E/C'---gs##$Usb>%3H3H.H'II=hhw''==HHUOO==E=#y&AAAT	LLAE,> ? ?AALRRR IeU/1GHHH	LL@k%*=>>@@LOOO	LLc[)DuG^)^__ccckmkqLrrr	LL?Ien$=$=??rwLOOO AeU^Y-?@@@	LLRe1RRU=PRRZ\Z`LaaaQ S+u/BBC+n"="=CCC26RRR dl8<(({{}}q(9E9IP55qK;t7H+I+IKKSUS[\\\ 	L%!2I4JKKKC+d.@"A"ACC26RRRX+d.?<.O"P"PXXX`b`fgggB	$-(@(@BB"'RRR 	D%	0BCCC=)N";";==RVLLLT$"4TT@RTT\^\bccc	LLMM%Jw,?,?PPPQQQQQrC   r  r%  c           	         t          j        t          j                  }|| j        z
                                  }| j        |z
                                  }t          |dz            }t          |dz            }	|	dz  }
|	dz  }t                      dk    rdnd}t                      }|
                    dd           |r$|j        t          |d|j        |j        |           |
                    d	t          j                   |
                    d
| d|
 d|ddt          j                   |
                    dt!          | j                   t          j                   |rt'          || j        |j                   |
                    dt!          | j                   t          j                   |
                    dt!          t          | j                             dt          j                   |
                    dt-          | j                   t          j                   |r0|j        r)|
                    d|j         t          j                   |
                    d           |
                    dt5          | j                   dt          j                   |rM|j        F|
                    d           t          |d|j        |j        |d           |rt=          |||           |
                    d           |r|j        |j        nd}t>                               tC          |tE          |          d                     d S )Nr}   rF   r  r  u   当前 5h&7d 数据面板

r   r   	   5h 限额u     时间      u   已用 u   min / 剩余 r~   r   zm
r   r   r   z/min
r   u
     模型: r   r   r  z

	   7d 限额rB  r   r   r   )#r   r   r   r   rE  total_secondsend_timer"   rM   r	   rb   r  r   five_hour_resets_atr+   r-   ru   r   r7   r   r   	burn_raterz   r   r9   rg   r\   entriesr  seven_day_resets_atr   rJ   r   r   r   )r  r   r   r%  r   r   elapsed	remainingelapsed_minremaining_minremaining_hremaining_mr   r   r   s                  r(   r  r    sM    ,x|
$
$CQ\!0022Gc!0022Igl##K	B''M2%K"$K!mmy08bIFFE	LL0L??? E{0 E[-F$8)	E 	E 	E 
LL""&L111	LLW;WW[WW;WWWW_a_eLfff	LL=AN ; ;==RXLNNN FeQ^Z-DEEE	LL<k!/::<<BFLKKK	LLCk#ak*:*:;;CCC26LRRR	LL;Iaj$9$9;;27LKKK E{( E5+"355RVDDD	LL	LL6#ai..666bfLEEE 9{0 9V[-F$8)]	T 	T 	T 	9 i888	LL'2
c{7P
c+
#
#bcCMM%JsOOVLLLMMMMMrC   c                    t                      dk    rdnd}t                      }|                    dd           | j        t	          |d| j        | j        |           | j        M| j        |                    d           t	          |d	| j        | j        |d
           |rt          |||           | j	        r)|                    d| j	         t          j                   |                    d           t          | j        pd| j        pd          }t                              t          |t!          |          d                     d S )NrF   r  r  u   限额数据面板

r   r   r  r   r  rB  u   
  模型: r   r   r   )rM   r	   rb   r  r   r  r  r  r   rg   r+   r-   r[  rJ   r   r   r   )r   r   r   r   r   r  s         r(   r  r  7  si   
 "mmy08bIFFE	LL)L888  E[-F$8)	E 	E 	E   9$ 	LL[-F$8)]	T 	T 	T 	9 i888 G7K$577rvFFF	LL++0q+2K2PqQQGMM%Jw,?,?PPPQQQQQrC   )r   )r   rU   )T)NNNr   T)r  )NN)NNNN)Br   collectionsr   r   r   rich.consoler   
rich.panelr   
rich.tabler   	rich.textr	   richr
   adapters.typesr   r   r   r   r   r   r   rJ   boolr)   r+   rt   rM   r   r   r_   dictra   rd   rk   rl   r"   ru   floatrz   r   r   r   r   r   r   r   r   r   r   r   r   r&  r  r  ra  r{  r  r  r  r  r  r  r  r  rB   rC   r(   <module>r     s   				 # # # # # # ' ' ' ' ' ' ' '                                     u u u u u u u u u u u u u u u u u u
'))            "S     #W55+g>>Ad A A A Ad39o     "!%!,      3 3    5 S     5  S        c c     /1
 
t 
C 
e 

(+
59
 
 
 
* * * *4 * * * *U s    OE Oc O O O O &-G GD G G5 G #d
G7:G"G15G G G G :>h h hK h$/$$6hBFh h h h S	 C D    *-C -C - - - - '+ 49 C U #&8;CF#/3   6T d    F &* #< <j!<{#< %< < 	<
 < d"< 
T	< I< < < 
< < < <~ , L4<O [_    4&4#5 &$ & & & &R2 2Z( 2$s)d2B 2d 2 2 2 2j4 4[ 1 4#* 4PT 4 4 4 4n k* DI4D PT    .4 4l!3 4C$J 4RV 4 4 4 4n $|, d3i$6F RV    8+4#5 +$ + + + +\6 64- 6c 64 6 6 6 6z  $$(8R 8R8RD 8R 
8R 
	8R
 T!8R 
8R 8R 8R 8Rz &*#&*$(1N 1N1Nd"1N 
1N t#	1N
 T!1N 
1N 1N 1N 1Nl  $$(R RR

R T!R 
	R R R R R RrC   