o
    ưi#                     @   sV   d Z ddlmZ ddlmZmZ ddlZddlmZ ddl	m
Z
mZ G d	d
 d
ZdS )z7Transform LiteLLM data to CloudZero AnyCost CBF format.    )datetime)AnyOptionalN   )	CBFRecord   )CZEntityTypeCZRNGeneratorc                   @   sZ   e Zd ZdZdd ZdejdejfddZdee	e
f defd	d
Zdee fddZdS )CBFTransformerz?Transform LiteLLM usage data to CloudZero Billing Format (CBF).c                 C   s   t  | _dS )z+Initialize transformer with CZRN generator.N)r	   czrn_generator)self r   _/home/app/Keep/.python/lib/python3.10/site-packages/litellm/integrations/cloudzero/transform.py__init__!   s   zCBFTransformer.__init__datareturnc              	   C   s(  |  rt S t|}d|jv r"|tddk}|t| }n|}d}g }d}t|}|jddD ]}z| |}	|	|	 W q4 t
yO   |d7 }Y q4w ddlm}
 |
 }|dkrk|d|dd	|dd
 |dkr}|d|dd	|dd t|dkr|dt|dd t|S )zfTransform LiteLLM data to CBF format, dropping records with zero successful_requests or invalid CZRNs.successful_requestsr   T)namedr   )Consoleu   [yellow]⚠️  Dropped ,z of z/ records with zero successful_requests[/yellow]z/ filtered records due to invalid CZRNs[/yellow]u$   [green]✓ Successfully transformed z records[/green])Zis_emptypl	DataFramelencolumnsfiltercolZ	iter_rows_create_cbf_recordappend	ExceptionZrich.consoler   print)r   r   Zoriginal_countZfiltered_dataZzero_requests_droppedZcbf_dataZczrn_dropped_countZfiltered_countrow
cbf_recordr   consoler   r   r   	transform%   s8   


zCBFTransformer.transformr    c                 C   s  |  |d}t|dd}t|dd}|| }| j|}t|dd}t|dddd	 }|d
}	|d}
|d}|
rKt|
n|	rQt|	nd}|d}|d}|d}|d}i dtjjd|d|
rwt|
ndd|dt|dddt|ddd|dt|ddd|rt|nddt|dddt|dddt|dddt|dddt|ddd|rt|ndd|rt|ndd|rt|nd}| j	|}|\}}}}}}|r| d| n|}|r|
 ndt|d d!||d"t|dd||t|dd|	r/t|	ndd#d$}||d%< ||d&< | D ]\}}|rZ|d'krZ|dkrZt||d(| < q@|dkrgt||d)< |dkrrt||d*< t|S )+z8Create a single CBF record from LiteLLM daily spend row.dateprompt_tokensr   completion_tokensmodel Zapi_keyN   team_id
team_alias
user_emailunknownapi_key_aliasorganization_aliasproject_alias
user_aliasZentity_type	entity_idZmodel_groupproviderZcustom_llm_providerZapi_key_prefixZapi_requestsr   Zfailed_requestsZcache_creation_tokensZcache_creation_input_tokensZcache_read_tokensZcache_read_input_tokens|Zspendg        tokensUsage)ztime/usage_startz	cost/costzresource/idzusage/amountzusage/unitszresource/servicezresource/accountzresource/regionzresource/usage_familyzaction/operationzlineitem/typezresource/tag:providerzresource/tag:modelzN/Azresource/tag:zresource/tag:prompt_tokenszresource/tag:completion_tokens)_parse_dategetintr   Zcreate_from_litellm_datastrr   ZTEAMvalueZextract_components	isoformatfloatitemsr   )r   r    Z
usage_dater%   r&   Ztotal_tokensZresource_idr'   Zapi_key_hashr*   r+   r,   r2   r.   r/   r0   r1   
dimensionsZczrn_componentsZservice_typer3   regionZowner_account_idZresource_typeZcloud_local_idZresource_accountr!   keyr;   r   r   r   r   P   s   






	


z!CBFTransformer._create_cbf_recordc                 C   s   |du rdS t |tr|S t |trAzt|gjd W S  ty@   zt|gj  W  Y S  ty?   Y Y dS w w dS )z?Parse date string from daily spend tables (e.g., '2025-04-19').Nz%Y-%m-%d)
isinstancer   r:   r   ZSeriesto_datetimeitemr   )r   Zdate_strr   r   r   r7      s   

zCBFTransformer._parse_dateN)__name__
__module____qualname____doc__r   r   r   r#   dictr:   r   r   r   r   r   r7   r   r   r   r   r
      s    +dr
   )rH   r   typingr   r   Zpolarsr   Ztypes.integrations.cloudzeror   Zcz_resource_namesr   r	   r
   r   r   r   r   <module>   s   