
    &<i              	       `   d Z ddlZddlmZ ddlmZ ddlmZmZ  G d d      Ze	dk(  rddl
Z
 e       Z ee
j                        d	k  r eej                                ye
j                  d
   Zedk(  r ee
j                        dk  r ed        e
j"                  d
        ee
j                  d	         Z ee
j                        dkD  re
j                  d   ndZej+                  ee      Z ededde d        eded   dded   dded    d       yedk(  r eej                                yedk(  rD ee
j                        d	kD  r ee
j                  d	         ndZ eej1                  e             y ede        ed        ed        ed         ed!       yy)"u?   
토큰 사용량 추적 시스템
일일 토큰 예산 관리
    N)datetime)Path)DictOptionalc                   p    e Zd ZdZddefdZdefdZd Zdde	d	edefd
Z
defdZdefdZdde	defdZy)TokenTrackeru   토큰 사용량 추적기Nmemory_pathc                 
   |t        t              j                  }t        |      | _        | j                  dz  | _        d| _        t        j                         j                  d      | _	        | j                         | _        y)u	   초기화Nztoken-usage.jsoni z%Y-%m-%d)r   __file__parentr	   tracker_filedaily_limitr   nowstrftimetoday	load_datadata)selfr	   s     E/home/jay/workspace/.worktrees/task-2057-dev2/memory/token_tracker.py__init__zTokenTracker.__init__   sj    x.//K, ,,/AA! \\^,,Z8
 NN$	    returnc                     | j                   j                         r7t        | j                   dd      5 }t        j                  |      cddd       S i g dS # 1 sw Y   yxY w)u   데이터 로드rutf-8encodingN)dailyhistory)r   existsopenjsonloadr   fs     r   r   zTokenTracker.load_data   sZ    ##%d''w? $1yy|$ $  B//$ $s   AA c                     t        | j                  dd      5 }t        j                  | j                  |dd       ddd       y# 1 sw Y   yxY w)u   데이터 저장wr   r   F   )ensure_asciiindentN)r!   r   r"   dumpr   r$   s     r   	save_datazTokenTracker.save_data&   sE    $##S7; 	BqIIdiiqA	B 	B 	Bs   $AAtokenscategoryc                    | j                   | j                  d   vrdi d| j                  d   | j                   <   | j                  d   | j                      dxx   |z  cc<   || j                  d   | j                      d   vr"d| j                  d   | j                      d   |<   | j                  d   | j                      d   |xx   |z  cc<   | j                          | j                         S )u   
        토큰 사용량 기록

        Args:
            tokens: 사용한 토큰 수
            category: 카테고리 (search, generate, boris, delegation, etc.)

        Returns:
            상태 정보
        r   r   )total
categoriesr0   r1   )r   r   r,   status)r   r-   r.   s      r   trackzTokenTracker.track+   s     ::TYYw//78-KDIIgtzz* 			'4::&w/69/ 499W-djj9,GGEFDIIgtzz*<8B		'4::&|4X>&H> 	 {{}r   c                 b   | j                   | j                  d   vr| j                   d| j                  di dS | j                  d   | j                      d   }| j                  |z
  }|| j                  z  dz  }| j                   ||t        |d      | j                  d   | j                      d   dS )	uR   
        현재 상태 반환

        Returns:
            상태 정보
        r   r   g        )dateused	remaining
percentager1   r0   d   r(   r1   )r   r   r   round)r   r6   r7   r8   s       r   r2   zTokenTracker.statusH   s     ::TYYw// JJ@P@P`csuvvyy!$**-g6$$t+	T---4
 JJ"
A.))G,TZZ8F
 	
r   c                    | j                         }g }|j                  d       |j                  d       |j                  d       |j                  d|d           |j                  d|d   dd       |j                  d	|d
   dd       |j                  d|d    d       |j                  d       |d   rE|j                  d       |d   j                         D ]  \  }}|j                  d| d|dd         |j                  d       |d   dkD  r|j                  d       |d   dkD  r|j                  d       dj                  |      S )u^   
        사용량 보고서 생성

        Returns:
            보고서 문자열
        2==================================================u   📊 토큰 사용량 보고서u   📅 날짜: r5   u   ✅ 사용: r6   ,z tokensu   ⏳ 남음: r7   u   📈 비율: r8   % r1   u   📋 카테고리별 사용량:z  - : P   u1   ⚠️ 주의: 일일 예산의 80% 이상 사용_   u(   🚨 경고: 일일 예산 거의 소진
)r2   appenditemsjoin)r   r2   reportcatcounts        r   rG   zTokenTracker.report^   sW    h78hfVn%567VF^A$6g>?VK%8$;7CDf\&:%;1=>b,MM;<$\288: >
USEE!9G<=> 	h ,"$MMMN,"$MMDEyy  r   daysc           	         g }|j                  d       |j                  d| d       |j                  d       t        | j                  d   j                         d      d| }|D ]E  }| j                  d   |   d   }|| j                  z  d	z  }|j                  | d
|dd|dd       G |j                  d       dj                  |      S )u   
        지난 N일간 사용량 이력

        Args:
            days: 조회할 일수

        Returns:
            이력 문자열
        r<   u   📊 지난 u   일간 토큰 사용량r   T)reverseNr0   r9   r@   r=   	 tokens (z.1f%)rC   )rD   sortedr   keysr   rF   )r   rJ   rG   datesr5   r6   r8   s          r   r   zTokenTracker.history   s     hTF*ABCh tyy)..0$?F 	JD99W%d+G4D!1!11S8JMMTF"T!HIj5ERHI	J
 	hyy  r   )N)general)   )__name__
__module____qualname____doc__strr   r   r   r,   intr3   r2   rG   r    r   r   r   r      si    $%C %04 0B
C 3 t :
 
,!! !!F!C ! !r   r   __main__r(      r3      uD   사용법: python3 token_tracker.py track <토큰수> [카테고리]rR   u   ✅ 기록됨: r=   rM   )u   📊 현재: r6   /r7   z (r8   rN   r2   r   rS   u   알 수 없는 명령:u
   사용법:u7     python3 token_tracker.py status       # 현재 상태u7     python3 token_tracker.py track <n>    # 토큰 기록u7     python3 token_tracker.py history [n]  # 이력 확인)rW   r"   r   pathlibr   typingr   r   r   rT   systrackerlenargvprintrG   commandexitrY   r-   r.   r3   r2   rJ   r   rZ   r   r   <module>ri      s  
    !M! M!b znG
388}qgnn((1+g388}q \]!%F&)#((ma&7sxx{YH]]684FOF1:YxjBCM&.!31VK5H4K2fUaNbMccefg '.."#	!'*388}q'83sxx{#aD'//$'( *G4,KLKLKLM r   