
    gH                         d dl Z d dlZd dlZd dlmZmZ d dlZd dlZd dlm	Z	 d dl
mZ d dlmZmZmZ d Z G d de      Zy)	    N)LiteralOptional)verbose_logger)CustomLogger)HTTPHandlerget_async_httpx_clienthttpxSpecialProviderc                      dd l } ddl m } t        | d      r|j                  | j                        S |j	                         S )Nr   )datetimeUTC)r   hasattrnowr   utcnow)dtr   s     N/var/www/openai/venv/lib/python3.12/site-packages/litellm/integrations/lago.pyget_utc_datetimer      s2    !r5||BFF##      c                   B     e Zd Zd fdZd ZdedefdZd Zd Z xZ	S )	
LagoLoggerreturnc                     t         |           | j                          t        t        j
                        | _        t               | _        y )N)llm_provider)	super__init__validate_environmentr   r	   LoggingCallbackasync_http_handlerr   sync_http_handler)self	__class__s    r   r   zLagoLogger.__init__    s<    !!#"8-==#
 "-r   c                 B   g }t        j                  dd      |j                  d       t        j                  dd      |j                  d       t        j                  dd      |j                  d       t        |      dkD  rt	        dj                  |            y)z
        Expects
        LAGO_API_BASE,
        LAGO_API_KEY,
        LAGO_API_EVENT_CODE,

        Optional:
        LAGO_API_CHARGE_BY

        in the environment
        LAGO_API_KEYNLAGO_API_BASELAGO_API_EVENT_CODEr   zMissing keys={} in environment.)osgetenvappendlen	Exceptionformat)r   missing_keyss     r   r   zLagoLogger.validate_environment(   s     99^T*2/99_d+3099*D19 56|q =DD\RSS !r   kwargsc                    |j                  d|j                  d             t               j                          |j                  dd       }|j                  d      }i }t        |t        j
                        st        |t        j                        rJt        |d      r>|d   j                  dd      |d   j                  dd      |d   j                  d	      d
}|j                  di       xs i }|j                  d      xs i }|j                  di       j                  dd       }|d   j                  dd       }	|d   j                  dd       }
|d   j                  dd        d}d }t        j                  dd       Ut        t        j                  d   t              r4t        j                  d   dv rt        j                  d   }nt        d      |dk(  r|}n|dk(  r|
}n|dk(  r|	}|t        dj                  ||	||
            dt        t        j                               |t        j                  d      ||d|di}t!        j"                  dj                  |             |S )Nidlitellm_call_idresponse_costmodelusageprompt_tokensr   completion_tokenstotal_tokens)r3   r4   r5   litellm_paramsproxy_server_requestbodyusermetadatauser_api_key_user_iduser_api_key_team_iduser_api_key_org_idend_user_idLAGO_API_CHARGE_BY)r>   user_idteam_idzinvalid LAGO_API_CHARGE_BY setrA   r@   zUExternal Customer ID is not set. Charge_by={}. User_id={}. End_user_id={}. Team_id={}eventr$   )r1   r0   )transaction_idexternal_subscription_idcode
propertiesz [91mLogged Lago Object:
{}[0m
)getr   	isoformat
isinstancelitellmModelResponseEmbeddingResponser   r%   r&   environstrr)   r*   uuiduuid4r   debug)r   r,   response_objcostr1   r2   r6   r7   r>   r@   rA   	charge_byexternal_customer_idreturned_vals                 r   _common_logiczLagoLogger._common_logicA   st   vzz*;<=$$&zz/40

7# |W%:%:;,(A(ABlG,!-g!6!:!:?A!N%1'%:%>%>?RTU%V ,W 5 9 9. IE  $4b9?R-112HIOR*..vr:>>vtL ,001GN ,001GNz"&&'<dCBO	.299)40<JJ+,cB
 zz./ 4 
 JJ';<	 @AA%#. )##* )##* 'gnnwW  "%djjl"3,@		"78(-NN	
 	6==lK	
 r   c                 R   t        j                  d      }|t        |t              sJ dj	                  |             |j                  d      r|dz  }n|dz  }t        j                  d      }| j                  ||      }dd	j	                  |      d
}	 | j                  j                  |t        j                  |      |      }	|	j                          y # t        $ rD}
t        |
dd       }|.t        |d      r"t        j                   d|j"                          |
d }
~
ww xY w)Nr#   <LAGO_API_BASE missing or not set correctly. LAGO_API_BASE={}/api/v1/events/api/v1/eventsr"   r,   rR   application/json	Bearer {}zContent-TypeAuthorizationurldataheadersresponsetext
Error Message: )r%   r&   rI   rN   r*   endswithrW   r   postjsondumpsraise_for_statusr)   getattrr   r   rQ   rg   )r   r,   rR   
start_timeend_time_urlapi_key_data_headersrf   eerror_responses               r   log_success_eventzLagoLogger.log_success_event   s/   yy)J#%
 	WIPPQUV	W 
 ==O#D$$D))N+""&|"L.(//8

	--22ZZ&  3 H %%' 	$Q
D9N)gnf.M$$'89L9L8M%NOG		s   AC 	D&"?D!!D&c                   K   	 t        j                  d       t        j                  d      }|t	        |t
              sJ dj                  |             |j                  d      r|dz  }n|dz  }t        j                  d      }| j                  ||      }d	d
j                  |      d}d }
	 | j                  j                  |t        j                  |      |       d {   }
|
j                          t        j                  d|
j                          y # t        $ r}	|	d }	~	ww xY w7 J# t        $ r7}	|
.t!        |
d      r"t        j                  d|
j                          |	d }	~	ww xY ww)NzENTERS LAGO CALLBACKr#   rY   rZ   r[   r\   r"   r]   r^   r_   r`   rb   zLogged Lago Object: rg   rh   )r   rQ   r%   r&   rI   rN   r*   ri   rW   r)   r   rj   rk   rl   rm   rg   r   )r   r,   rR   ro   rp   rq   rr   rs   rt   ru   rf   s              r   async_log_success_eventz"LagoLogger.async_log_success_event   sy    	  !7899_-D#
c) MTT 
 }}S!'((ii/G&&f<&PE 2!,!3!3G!<H .2	!4499ZZ&  :  H %%'  #7!GH  	G	
  	#&(A$$'8%HIG	s_   E5B*D .E514D2 %D0&6D2 E5	D-&D((D--E50D2 2	E2;2E--E22E5)r   N)
__name__
__module____qualname__r   r   dictrW   rw   ry   __classcell__)r    s   @r   r   r      s0    /T2AD A4 AF@&r   r   )rk   r%   rO   typingr   r   httpxrJ   litellm._loggingr   "litellm.integrations.custom_loggerr   &litellm.llms.custom_httpx.http_handlerr   r   r	   r   r    r   r   <module>r      s<     	  $   + ; !k kr   