Ë
    tPêj4  ã                   ó@   — d Z ddlmZ ddlmZmZ ddlZ G d„ d«      Zy)z4Database connection and data extraction for LiteLLM.é    )Údatetime)ÚAnyÚFinalNc            	       ó\   — e Zd ZdZd„ Z	 	 	 d	dedz  dedz  dedz  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_clientz�Database 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     úl/home/oem/CyberBrain26-unified/.venv/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              ƒ   ór  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|› �«      ‚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   )	r   r   r   r   ÚclientÚqueryÚparamsÚdb_responseÚes	            r   Úget_usage_datazLiteLLMDatabase.get_usage_data(   sÛ   è ø€ ð ×2Ñ2Ó4ˆðˆðB Øð$
ˆð
 Ðð=Ø—‘œc %›jÔ)ð �[Ñ ˆEð	AØ': v§y¡y×':Ñ':¸5Ð'JÀ6Ò'J×!JˆKô —<‘< ÀÔFÐFøô œzÐ*ò =Ü Ð!;Ó<Ð<ð=úð
 "Kùô ò 	AÜÐ;¸A¸3Ð?Ó@Ð@ûð	AüsP   ‚B7œA8 ¶B7¼ B ÁBÁB Á7B7Á8BÂB7ÂB Â	B4Â!B/Â/B4Â4B7)NNN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r#   © r   r   r   r      sU   „ ÙEòð !Ø*.Ø(,ñ	=Aà�T‰zð=Að ! 4™ð=Að  ‘oð	=Að
 
�‰ô=Ar   r   )r'   r   Útypingr   r   Úpolarsr   r   r(   r   r   ú<module>r+      s!   ðñ& ;å ß ã ÷JAò JAr   