
    AHj6                     D    d Z ddlmZ ddlmZmZmZ ddlZ G d d      Zy)z4Database connection and data extraction for LiteLLM.    )datetime)AnyOptionalListNc            	       \    e Zd ZdZd Z	 	 	 d	dee   dee   dee   dej                  fdZ
y)
LiteLLMDatabasez;Handle LiteLLM PostgreSQL database connections and queries.c                 .    ddl m} 	 |t        d      |S )Nr   )prisma_clientzDatabase not connected. Connect a database to your proxy - https://docs.litellm.ai/docs/simple_proxy#managing-auth---virtual-keys)litellm.proxy.proxy_serverr
   	Exception)selfr
   s     _/root/tools/cai/cai_env/lib/python3.12/site-packages/litellm/integrations/cloudzero/database.py_ensure_prisma_clientz%LiteLLMDatabase._ensure_prisma_client   s)    <0  T      Nlimitstart_time_utcend_time_utcreturnc                   K   | j                         }d}||g}| 	 |j                  t        |             |dz  }	  |j
                  j                  |g|  d{   }t        j                  |d      S # t        t        f$ r t	        d      w xY w7 9# t        $ r}t        dt        |             d}~ww xY ww)z8Retrieve usage data from LiteLLM daily user spend table.aj  
        SELECT
            dus.id,
            dus.date,
            dus.user_id,
            dus.api_key,
            dus.model,
            dus.model_group,
            dus.custom_llm_provider,
            dus.prompt_tokens,
            dus.completion_tokens,
            dus.spend,
            dus.api_requests,
            dus.successful_requests,
            dus.failed_requests,
            dus.cache_creation_input_tokens,
            dus.cache_read_input_tokens,
            dus.created_at,
            dus.updated_at,
            vt.team_id,
            vt.key_alias as api_key_alias,
            tt.team_alias,
            ut.user_email as user_email
        FROM "LiteLLM_DailyUserSpend" dus
        LEFT JOIN "LiteLLM_VerificationToken" vt ON dus.api_key = vt.token
        LEFT JOIN "LiteLLM_TeamTable" tt ON vt.team_id = tt.team_id
        LEFT JOIN "LiteLLM_UserTable" ut ON dus.user_id = ut.user_id
        WHERE ($1::timestamptz IS NULL OR dus.updated_at >= $1::timestamptz)
          AND ($2::timestamptz IS NULL OR dus.updated_at <= $2::timestamptz)
        ORDER BY dus.date DESC, dus.created_at DESC
        Nzlimit must be an integerz	 LIMIT $3)infer_schema_lengthzError retrieving usage data: )r   appendint	TypeError
ValueErrordb	query_rawpl	DataFramer   str)	r   r   r   r   clientqueryparamsdb_responsees	            r   get_usage_datazLiteLLMDatabase.get_usage_data(   s      ++-B 

 =c%j) [ E	F 3		 3 3E CF CCK <<FF z* = !;<<=
 D  	F;CF8DEE	FsP   C A8 C  B BB 7C 8BC B 	B=!B88B==C )NNN)__name__
__module____qualname____doc__r   r   r   r   r   r   r%    r   r   r   r      sW    E  $-1+/	=F}=F !*=F x(	=F
 
=Fr   r   )	r)   r   typingr   r   r   polarsr   r   r*   r   r   <module>r-      s$   & ;  & & JF JFr   