o
    ưi;                     @  s   d Z ddlmZ ddlZddlZ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mZmZ ddlmZmZmZmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ ddlm Z  e!dej"Z#G dd deeZ$dS )zdSQS Logging Integration

This logger sends ``StandardLoggingPayload`` entries to an AWS SQS queue.

    )annotationsN)ListOptional)print_verboseverbose_logger)DEFAULT_SQS_BATCH_SIZE"DEFAULT_SQS_FLUSH_INTERVAL_SECONDSSQS_API_VERSIONSQS_SEND_MESSAGE_ACTION)
safe_dumps)
BaseAWSLLM)get_async_httpx_clienthttpxSpecialProvider)StandardLoggingPayload   )CustomBatchLogger)IntegrationHealthCheckStatuszOdata:(?:application|image|audio|video)/[a-zA-Z0-9.+-]+;base64,[A-Za-z0-9+/=\s]+c                   @  s   e Zd ZdZddddddddddddddeedddddfd0dd Z																			d1d2d!d"Zd3d#d$Zd%d& Z	d3d'd(Z
d4d+d,Zd5d.d/ZdS )6	SQSLoggerzXBatching logger that writes logs to an AWS SQS queue, optionally encrypting the payload.NTFsqs_queue_urlOptional[str]sqs_region_namesqs_api_versionsqs_use_sslbool
sqs_verifyOptional[bool]sqs_endpoint_urlsqs_aws_access_key_idsqs_aws_secret_access_keysqs_aws_session_tokensqs_aws_session_namesqs_aws_profile_namesqs_aws_role_namesqs_aws_web_identity_tokensqs_aws_sts_endpointsqs_flush_intervalOptional[int]sqs_batch_sizesqs_strip_base64_files(sqs_aws_use_application_level_encryptionsqs_app_encryption_key_b64sqs_app_encryption_aadreturnNonec              
   K  s*  z}t dtj  ttjd| _| jdi d|d|d|d|d|d|d	|d
|d|	d|
d|d|d|d|d|d|d|d|d|| t	
|   t	 | _t d| d|  tj| | j||d g | _t|  W d S  ty } ztdt|  |d }~ww )Nz)in init sqs logger - sqs_callback_params )Zllm_providerr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r(   r)   r*   r+   
sqs_configzsqs flush interval: z, sqs batch size: )
flush_lockZflush_interval
batch_sizez!Got exception on init sqs client  )r   debuglitellmaws_sqs_callback_paramsr   r   ZLoggingCallbackasync_httpx_client_init_sqs_paramsasynciocreate_taskZperiodic_flushLockr/   r   __init__	log_queuer   	Exceptionr   str)selfr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r'   r.   r(   r)   r*   r+   kwargser1   r1   O/home/app/Keep/.python/lib/python3.10/site-packages/litellm/integrations/sqs.pyr:   ,   s   

	

zSQSLogger.__init__c                 C  s  t jpi t _t j D ]\}}t|tr!|dr!t |t j|< qt jdp)|| _t jdp2|| _	t jdp;|| _
t jddpE|| _t jdpN|| _t jdpW|| _t jd	p`|| _t jd
pi|| _t jdpr|	| _t jdp{|
| _t jdp|| _t jdp|| _t jdp|| _t jdp|| _t jddp|| _t jddp|| _t jdp|| _t jdp|| _d | _| jrddlm} | jstdt| j}||| _t !d t jdp|| _"d S )Nzos.environ/r   r   r   r   Tr   r   r   r   r   r    r!   r"   r#   r$   r(   Fr)   r*   r+   r   )	AppCryptozBsqs_app_encryption_key_b64 is required when encryption is enabled.z0SQSLogger: Application-level encryption enabled.r.   )#r3   r4   items
isinstancer=   
startswithZ
get_secretgetr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r(   r)   r*   r+   
app_cryptoZ%litellm.litellm_core_utils.app_cryptorB   
ValueErrorbase64	b64decoder   r2   r.   )r>   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r(   r)   r*   r+   r.   keyvaluerB   r1   r1   rA   r6   |   sv   
zSQSLogger._init_sqs_paramsc              
     s   z2t d| |d}| jr| |I d H }|d u r td| j| t dt| j| j	 W d S  t
yP } zt dt|  W Y d }~d S d }~ww )Nz2SQS Logging - Enters logging function for model %sstandard_logging_object standard_logging_payload is None+sqs logging: queue length %s, batch size %szsqs Layer Error - )r   r2   rF   r(   _strip_base64_from_messagesrH   r;   appendlenr0   r<   	exceptionr=   r>   r?   Zresponse_obj
start_timeend_timeZstandard_logging_payloadr@   r1   r1   rA   async_log_success_event   s(   

"z!SQSLogger.async_log_success_eventc              
     s   z,| d}|d u rtd| jr| |I d H }| j| tdt| j| j	 W d S  t
yO } ztdt| dt   W Y d }~d S d }~ww )NrM   rN   rO   zDatadog Layer Error - 
)rF   rH   r(   rP   r;   rQ   r   r2   rR   r0   r<   rS   r=   	traceback
format_excrT   r1   r1   rA   async_log_failure_event   s(   

z!SQSLogger.async_log_failure_eventc                   sB   t dt| j  | jsd S | jD ]
}t| | qd S )Nzsqs logger - sending batch of )r   r2   rR   r;   r7   r8   async_send_message)r>   payloadr1   r1   rA   async_send_batch  s   
zSQSLogger.async_send_batchr]   r   c                   s  zddl m} dd l}ddlm} ddlm} ddlm} || j	}|| j
| j| j| j| j| j| j| j| jd	I d H }| jd u rEtdtt|}	| jrk| jrX| jdnd }
| jj|	|
d	}td
|d}nt|}dt dt d||dd }ddi}|jd| j||d}|  }||j!|j"|j#|j$d}||d| j%| t&|j$' }| j(j)| j||dI d H }|*  W d S  t+y } zt,-dt.|  W Y d }~d S d }~ww )Nr   )quote)	SigV4Auth)
AWSRequest)asyncify)	Zaws_access_key_idZaws_secret_access_keyZaws_session_tokenZaws_region_nameZaws_session_nameZaws_profile_nameZaws_role_nameZaws_web_identity_tokenZaws_sts_endpointzsqs_queue_url not setzutf-8)ZaadT)Z__encrypted__r]   zAction=z	&Version=z&MessageBody= )safezContent-Typez!application/x-www-form-urlencodedPOST)dataheaders)methodurlrf   rg   ZsqszError sending to SQS: )/urllib.parser_   requestsZbotocore.authr`   Zbotocore.awsrequestra   Z#litellm.litellm_core_utils.asyncifyrb   Zget_credentialsr   r   r   r   r    r!   r"   r#   r$   r   rH   jsonloadsr   rG   r+   encodeZencrypt_jsondumpsr
   r	   Requestpreparerh   ri   bodyrg   Zadd_authdictrC   r5   postraise_for_statusr<   r   rS   r=   )r>   r]   r_   rk   r`   ra   rb   Zasyncified_get_credentialscredentialsZ	json_dataZ	aad_bytesZ	encryptedZjson_stringrr   rg   reqZpreppedZaws_requestZsigned_headersresponser@   r1   r1   rA   r\     sx   



"zSQSLogger.async_send_messager   c              
     sh   zddl m} | }| |I dH  tdddW S  ty3 } ztdt|dW  Y d}~S d}~ww )z_
        Health check for SQS by sending a small test message to the configured queue.
        r   )%create_dummy_standard_logging_payloadNZhealthy)statuserror_messageZ	unhealthy)Z*litellm.litellm_core_utils.litellm_loggingry   r\   r   r<   r=   )r>   ry   rM   r@   r1   r1   rA   async_health_checkg  s   zSQSLogger.async_health_check)*r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r!   r   r"   r   r#   r   r$   r   r%   r&   r'   r&   r(   r   r)   r   r*   r   r+   r   r,   r-   )NNNTNNNNNNNNNNFFNNN)&r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r!   r   r"   r   r#   r   r$   r   r(   r   r)   r   r*   r   r+   r   r,   r-   )r,   r-   )r]   r   r,   r-   )r,   r   )__name__
__module____qualname____doc__r   r   r:   r6   rW   r[   r^   r\   r|   r1   r1   r1   rA   r   )   sb    R
m


Ir   )%r   
__future__r   r7   rI   rl   rerY   typingr   r   r3   Zlitellm._loggingr   r   Zlitellm.constantsr   r   r	   r
   Z*litellm.litellm_core_utils.safe_json_dumpsr   Z!litellm.llms.bedrock.base_aws_llmr   Z&litellm.llms.custom_httpx.http_handlerr   r   Zlitellm.types.utilsr   Zcustom_batch_loggerr   Z,litellm.types.integrations.base_health_checkr   compile	MULTILINEZ_BASE64_INLINE_PATTERNr   r1   r1   r1   rA   <module>   s,    