
    {h              
          d dl mZmZ d dlmZ d dlmZmZ d dlZ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mZ d dlmZ d d	lmZ d d
lmZ  ej0                         Z e       Zej6                  j9                  d      Zdedeeef   fdZ de!deeeef      fdZ"i ddddddddddddddddddddddddddddddddddddd dddd!dddd"dd#dd$dd#dd%dd#dd&d'd(dd)d*d+dd,d(d-dd(d-dd.d-dd'd(dd*d+dd(d-dd/d0d1d2Z#d3edeeee$f   e$f   fd4Z%d5ed6e!d7e!de$fd8Z&d9eeeef      defd:Z'ejQ                  d;<       ejR                  d d=<      fd>e!ddfd?       Ze*d@k(  r e        yy)A    )AnyUnion)	Awaitable)datetime	timedeltaN)listdefaultdict)Console)Table)Progress)
ModelNamesOPENAI_API_KEYdatereturnc                   K   ddt          i}d|  }t        j                         4 d {   }|j                  ||      4 d {   }|j	                          d {   cd d d       d {    cd d d       d {    S 7 Z7 @7 *7 7 # 1 d {  7  sw Y   nxY wd d d       d {  7   y # 1 d {  7  sw Y   y xY ww)NAuthorizationzBearer z%https://api.openai.com/v1/usage?date=)headers)api_keyaiohttpClientSessiongetjson)r   r   urlsessionresps        U/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/instructor/cli/usage.pyfetch_usager      s     '' 34G1$
8C$$& % %';;sG;4 	% 	%$	% 	% 	%% % %	%$	%%	% 	% 	%% % % % %s   )CBCB7BB7BB
 B#B7/B0B74C BCB7
BB7CB"	BB"	B7%C0B31C7C	=C >C	Cn_daysc                 b  K   g }g }t               5 }| dkD  r|j                  d|       }t        |       D ]_  }t        j                         t        |      z
  j                  d      }|j                  t        |             |j                  |d       a n;|j                  t        t        j                         j                  d                   t        j                  |  d {   }|D ]#  }|j                  |j                  dg              % 	 d d d        |S 7 7# 1 sw Y   |S xY ww)N   z[green]Fetching usage data...)total)days%Y-%m-%d)advancedata)r   add_taskranger   nowr   strftimeappendr   updateasynciogatherextendr   )	r   tasksall_dataprogresstaskir   fetched_datar&   s	            r   get_usage_for_past_n_daysr6      s    -/E%'H	 2xA:$$%DF$SD6] 1 )::DDZP[./a01
 LLX\\^%<%<Z%HIJ$^^U33  	2DOODHHVR01	22 O 42 Os/   D/CD"(D ),D"
D/ D""D,'D/gpt-4ogh㈵>ghUMu>)prompt
completionzgpt-4o-2024-05-13gpt-4-turbogh㈵>ghUMu>zgpt-4-turbo-2024-04-09zgpt-4-0125-previewgpt-4-turbo-previewzgpt-4-1106-previewzgpt-4-vision-previewgpt-4ghUMu?z
gpt-4-0314z
gpt-4-0613	gpt-4-32kghUMu?zgpt-4-32k-0314zgpt-4-32k-0613gpt-3.5-turbogƠ>gTqs*>gpt-3.5-turbo-16kgTqs*>g>zgpt-3.5-turbo-0301g>gư>g:0yU>gqr>gIz>)zgpt-3.5-turbo-0613zgpt-3.5-turbo-1106zgpt-3.5-turbo-0125zgpt-3.5-turbo-16k-0613zgpt-3.5-turbo-instructztext-embedding-3-smallztext-embedding-3-largeztext-embedding-ada-002modelc                 z   | t         v r	t         |    S | j                  d      r	t         d   S | j                  d      r	t         d   S | j                  d      r	t         d   S | j                  d      r	t         d   S | j                  d      r	t         d   S | j                  d      r	t         d   S t        d|  d	      )
z'Get the cost details for a given model.r?   r>   r:   r;   r=   r7   r<   zCost for model z
 not found)MODEL_COSTS
startswith
ValueError)r@   s    r   get_model_costrE   P   s     5!!+,.//			/	*?++			-	(011			+	&;''			(	#8$$			'	"7##?5'<==    snapshot_idn_context_tokensn_generated_tokensc                 ~    t        |       }t        |t        t        f      r|||z   z  S |d   |z  }|d   |z  }||z   S )zACalculate the cost based on the snapshot ID and number of tokens.r8   r9   )rE   
isinstancefloatint)rG   rH   rI   costprompt_costcompletion_costs         r   calculate_costrQ   g   sX     +&D$%'*<<==x.#33K<(+==O((rF   
usage_datac                    t        d       }| D ]  }|d   }t        j                  |d         j                  d      }||   |   dxx   |d   z  cc<   ||   |   dxx   |d   z  cc<   t	        ||d	   |d         }||   |   d
xx   |z  cc<    t        d      }|j                  dd       |j                  dd       |j                  dd       |j                  dd       t        |j                         d      }|D ]a  }t        ||   j                         d      }|D ]<  }||   |   }	|j                  ||t        |	d         dj                  |	d
                > c |S )zCGroup and sum the usage data by date and snapshot, including costs.c                      t        d       S )Nc                      ddddS )Nr   g        )total_requeststotal_tokens
total_cost rY   rF   r   <lambda>zFgroup_and_sum_by_date_and_snapshot.<locals>.<lambda>.<locals>.<lambda>|   s    1asS rF   r	   rY   rF   r   rZ   z4group_and_sum_by_date_and_snapshot.<locals>.<lambda>{   s    KS rF   rG   aggregation_timestampr$   rV   
n_requestsrW   n_generated_tokens_totaln_context_tokens_totalrX   z)Usage Summary by Date, Snapshot, and Cost)titleDatedim)styleModelzTotal Requestsright)justifyzTotal Cost ($)T)reversez{:.2f})r
   r   fromtimestampr*   rQ   r   
add_columnsortedkeysadd_rowstrformat)
rR   summaryusagerG   r   rN   tablesorted_datessorted_snapshotsr&   s
             r   "group_and_sum_by_date_and_snapshotrs   w   s    		
   9M*%%e,C&DENN
 	k"#34l8KK4k">2e<V6WW2 *+,-

 	k"<0D809  CDE	V5)	WE*	%w7	%w7 ',,.$7L 	!'$-"4"4"6E+ 	K4=-DMMD)*+\ 23			 LrF   z3Displays OpenAI API usage data for the past N days.)helpzNumber of days.nc                     t        j                  t        |             }t        |      }t        j                  |       y )N)r-   runr6   rs   consoleprint)ru   r1   rp   s      r   r   r      s.     {{4Q78H.x8EMM%rF   __main__)+typingr   r   collections.abcr   r   r   typerosr   r-   builtinsr   Listcollectionsr
   rich.consoler   
rich.tabler   rich.progressr   instructor._types._aliasr   Typerapprx   environr   r   rl   dictr   rM   r6   rB   rL   rE   rQ   rs   commandOption__name__rY   rF   r   <module>r      s    % (  	   ! #    " / ekkm
)
**..)
*%C %DcN %C Dc3h4H (\BLM kE KP	
 [L kM [L {+N ;? [D [D K{C KH KH ]K  MO!" ]-P#$ &3-P%2-P%2-P)6mT)6mT,,,3:>>
4U
U"#>.))) ) 	) -4S#X3G -E -` GHU\\!"34
	 I zE rF   