Ë
    tPêj8  ã                  ó"  — U 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	 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j@                  dejB                  «      Z"de#d<    G d„ dee«      Z$y)zdSQS Logging Integration

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

é    )ÚannotationsN)ÚFinal)Ú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)ÚIntegrationHealthCheckStatus)ÚStandardLoggingPayloadé   )ÚCustomBatchLoggerzOdata:(?:application|image|audio|video)/[a-zA-Z0-9.+-]+;base64,[A-Za-z0-9+/=\s]+r   Ú_BASE64_INLINE_PATTERNc                  ó6  — 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	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zd„ Z	dd	„Z
dd
„Zdd„Zy)Ú	SQSLoggerzXBatching logger that writes logs to an AWS SQS queue, optionally encrypting the payload.NTFc                óˆ  — 	 t        j                  dt        j                  «       t	        t
        j                  ¬«      | _         | j                  di d|“d|“d|“d|“d|“d|“d	|“d
|“d|	“d|
“d|“d|“d|“d|“d|“d|“d|“d|“d|“|¤Ž t        j                  | j                  «       «       t        j                  «       | _        t        j                  d||«       t        j                  | | j                  ||¬«       g | _        t#        j                  | «       y # t$        $ r}t'        d|› �«       |‚d }~ww xY w)Nz+in init sqs logger - sqs_callback_params %s)Úllm_providerÚsqs_queue_urlÚsqs_region_nameÚsqs_api_versionÚsqs_use_sslÚ
sqs_verifyÚ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_strip_base64_filesÚ(sqs_aws_use_application_level_encryptionÚsqs_app_encryption_key_b64Úsqs_app_encryption_aadÚ
sqs_configz*sqs flush interval: %s, sqs batch size: %s)Ú
flush_lockÚflush_intervalÚ
batch_sizez!Got exception on init sqs client © )r   ÚdebugÚlitellmÚaws_sqs_callback_paramsr   r   ÚLoggingCallbackÚasync_httpx_clientÚ_init_sqs_paramsÚasyncioÚcreate_taskÚperiodic_flushÚLockr+   r   Ú__init__Ú	log_queuer   Ú	Exceptionr   )Úselfr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   Úsqs_flush_intervalÚsqs_batch_sizer*   r&   r'   r(   r)   ÚkwargsÚes                           ú]/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/sqs.pyr9   zSQSLogger.__init__,   s�  € ð6/	Ü× Ñ Ð!NÔPW×PoÑPoÔpä&<Ü1×AÑAô'ˆDÔ#ð "ˆD×!Ñ!ò Ù+ðá /ðñ !0ðñ (ð	ñ
 &ðñ "2ðñ '<ðñ +Dðñ '<ðñ &:ðñ &:ðñ #4ðñ ,Fðñ &:ðñ (>ðñ  :bð!ñ" ,Fð#ñ$ (>ð%ñ& &Øò)ô. ×Ñ × 3Ñ 3Ó 5Ô6Ü%Ÿl™l›nˆDŒOä× Ñ Ð!MÐOaÐcqÔrä×&Ñ&ØØŸ?™?Ø1Ø)õ	ð <>ˆDŒNÜ×Ñ Õ%øäò 	ÜÐ=¸a¸SÐAÔBØˆGûð	ús   ‚D D# Ä#	EÄ,D<Ä<Ec                óô  — t         j                  xs i t         _        t         j                  j                  «       D ]N  \  }}t        |t        «      sŒ|j                  d«      sŒ)t        j                  |«      t         j                  |<   ŒP t         j                  j                  d«      xs || _        t         j                  j                  d«      xs || _	        t         j                  j                  d«      xs || _
        t         j                  j                  dd«      xs || _        t         j                  j                  d«      xs || _        t         j                  j                  d«      xs || _        t         j                  j                  d	«      xs || _        t         j                  j                  d
«      xs || _        t         j                  j                  d«      xs |	| _        t         j                  j                  d«      xs |
| _        t         j                  j                  d«      xs || _        t         j                  j                  d«      xs || _        t         j                  j                  d«      xs || _        t         j                  j                  d«      xs || _        t         j                  j                  dd«      xs || _        t         j                  j                  dd«      xs || _        t         j                  j                  d«      xs || _        t         j                  j                  d«      xs || _        d | _        | j.                  r^ddlm} | j0                  st;        d«      ‚t=        j>                  | j0                  «      } ||«      | _        tA        jB                  d«       t         j                  j                  d«      xs || _"        y )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*   )#r0   r1   ÚitemsÚ
isinstanceÚstrÚ
startswithÚ
get_secretÚgetr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   Ú
app_cryptoÚ%litellm.litellm_core_utils.app_cryptorC   Ú
ValueErrorÚbase64Ú	b64decoder   r/   r*   )r<   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   ÚkeyÚvaluerC   s                          rA   r4   zSQSLogger._init_sqs_paramsx   sT  € ô, +2×*IÑ*IÒ*OÈRŒÔ'ô "×9Ñ9×?Ñ?ÓAò 	Q‰JˆC�Ü˜%¤Õ%¨%×*:Ñ*:¸=Õ*IÜ7>×7IÑ7IÈ%Ó7P”×/Ñ/°Ò4ð	Qô %×<Ñ<×@Ñ@ÀÓQÒbÐUbˆÔÜ&×>Ñ>×BÑBÐCTÓUÒhÐYhˆÔÜ&×>Ñ>×BÑBÐCTÓUÒhÐYhˆÔÜ"×:Ñ:×>Ñ>¸}ÈdÓSÒbÐWbˆÔÜ!×9Ñ9×=Ñ=¸lÓKÒYÈzˆŒÜ '× ?Ñ ?× CÑ CÐDVÓ WÒ kÐ[kˆÔä×+Ñ+×/Ñ/Ð0GÓHÒaÐLað 	Ô"ô
 ×+Ñ+×/Ñ/Ð0KÓLÒiÐPið 	Ô&ô
 ×+Ñ+×/Ñ/Ð0GÓHÒaÐLað 	Ô"ô %,×$CÑ$C×$GÑ$GÐH^Ó$_Ò$wÐcwˆÔ!ä$+×$CÑ$C×$GÑ$GÐH^Ó$_Ò$wÐcwˆÔ!ä!(×!@Ñ!@×!DÑ!DÐEXÓ!YÒ!nÐ]nˆÔô ×+Ñ+×/Ñ/Ð0LÓMÒkÐQkð 	Ô'ô %,×$CÑ$C×$GÑ$GÐH^Ó$_Ò$wÐcwˆÔ!ä×+Ñ+×/Ñ/Ð0HÈ%ÓPÒjÐTjð 	Ô#ô
 ×+Ñ+×/Ñ/Ð0ZÐ\aÓbò 8Ø7ð 	Ô5ô
 ×+Ñ+×/Ñ/Ð0LÓMÒkÐQkð 	Ô'ô ×+Ñ+×/Ñ/Ð0HÓIÒcÐMcð 	Ô#ð -1ˆŒØ×8Ò8ÝGà×2Ò2Ü Ð!eÓfÐfÜ×"Ñ" 4×#BÑ#BÓCˆCÙ'¨›nˆDŒOÜ× Ñ Ð!SÔTÜ!×9Ñ9×=Ñ=¸lÓKÒYÈzˆ�ó    c              ƒ  óº  K  — 	 t        j                  d|«       |j                  d«      }| j                  r| j	                  |«      ƒ d {  –—† }|€t        d«      ‚| j                  j                  |«       t        j                  dt        | j                  «      | j                  «       y 7 Œa# t        $ r }t        j                  d|«       Y d }~y d }~ww xY 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 - %s)r   r/   rI   r&   Ú_strip_base64_from_messagesrL   r:   ÚappendÚlenr-   r;   Ú	exception©r<   r?   Úresponse_objÚ
start_timeÚend_timeÚstandard_logging_payloadr@   s          rA   Úasync_log_success_eventz!SQSLogger.async_log_success_eventË   sÂ   è ø€ ð	@Ü× Ñ Ð!UÐW]Ô^Ø'-§z¡zÐ2KÓ'LÐ$Ø×*Ò*Ø15×1QÑ1QÐRjÓ1k×+kÐ(Ø'Ð/Ü Ð!CÓDÐDà�N‰N×!Ñ!Ð":Ô;Ü× Ñ Ø=Ü�D—N‘NÓ#Ø—‘õð ,lùô ò 	@Ü×$Ñ$Ð%;¸Q×?Ñ?ûð	@üsB   ‚C„AB/ ÁB-ÁA B/ Â,CÂ-B/ Â/	CÂ8CÃCÃCÃCc              ƒ  ó´  K  — 	 |j                  d«      }|€t        d«      ‚| j                  r| j                  |«      ƒ d {  –—† }| j                  j                  |«       t        j                  dt        | j                  «      | j                  «       y 7 ŒT# t        $ r3}t        j                  d|t        j                  «       «       Y d }~y d }~ww xY w­w)NrS   rT   rU   zDatadog Layer Error - %s
%s)rI   rL   r&   rV   r:   rW   r   r/   rX   r-   r;   rY   Ú	tracebackÚ
format_excrZ   s          rA   Úasync_log_failure_eventz!SQSLogger.async_log_failure_eventÝ   s»   è ø€ ð	`Ø'-§z¡zÐ2KÓ'LÐ$Ø'Ð/Ü Ð!CÓDÐDØ×*Ò*Ø15×1QÑ1QÐRjÓ1k×+kÐ(à�N‰N×!Ñ!Ð":Ô;Ü× Ñ Ø=Ü�D—N‘NÓ#Ø—‘õð ,lùô ò 	`Ü×$Ñ$Ð%CÀQÌ	×H\ÑH\ÓH^×_Ñ_ûð	`üsA   ‚C„>B ÁBÁAB ÂCÂB Â	CÂ")CÃCÃCÃCc              ƒ  óâ   K  — t        j                  dt        | j                  «      «       | j                  sy | j                  D ]&  }t	        j
                  | j                  |«      «       Œ( y ­w)Nz sqs logger - sending batch of %s)r   r/   rX   r:   r5   r6   Úasync_send_message)r<   Úpayloads     rA   Úasync_send_batchzSQSLogger.async_send_batchï   sX   è ø€ Ü×ÑÐ?ÄÀTÇ^Á^ÓATÔUØ�~Š~Øà—~‘~ò 	BˆGÜ×Ñ × 7Ñ 7¸Ó @ÕAñ	Bùs   ‚A-A/c              ƒ  ó  K  — 	 d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 {  –—† }| j&                  €t)        d«      ‚t+        j,                  t/        |«      «      }	| j0                  r_| j2                  r| j2                  j5                  d«      nd }
| j0                  j7                  |	|
¬	«      }t+        j8                  d
|dœ«      }nt/        |«      }dt:        › dt<        › d� ||d¬«      z   }ddi}|j?                  d| j&                  ||¬«      }|jA                  «       } ||jB                  |jD                  |jF                  |jH                  ¬«      } ||d| j                  «      jK                  |«       tM        |jH                  jO                  «       «      }| jP                  jS                  | j&                  ||¬«      ƒ d {  –—† }|jU                  «        y 7 �Œº7 Œ# tV        $ r }tY        jZ                  d|«       Y d }~y d }~ww xY w­w)Nr   )Úquote)Ú	SigV4Auth)Ú
AWSRequest)Úasyncify)	Úaws_access_key_idÚaws_secret_access_keyÚaws_session_tokenÚaws_region_nameÚaws_session_nameÚaws_profile_nameÚaws_role_nameÚaws_web_identity_tokenÚaws_sts_endpointzsqs_queue_url not setzutf-8)ÚaadT)Ú__encrypted__rf   zAction=z	&Version=z&MessageBody=Ú )ÚsafezContent-Typez!application/x-www-form-urlencodedÚPOST)ÚdataÚheaders)ÚmethodÚurlr{   r|   ÚsqszError sending to SQS: %s).Úurllib.parseri   ÚrequestsÚbotocore.authrj   Úbotocore.awsrequestrk   Ú#litellm.litellm_core_utils.asyncifyrl   Úget_credentialsr   r   r    r   r!   r"   r#   r$   r%   r   rL   ÚjsonÚloadsr   rJ   r)   ÚencodeÚencrypt_jsonÚdumpsr
   r	   ÚRequestÚpreparer}   r~   Úbodyr|   Úadd_authÚdictrD   r3   ÚpostÚraise_for_statusr;   r   rY   )r<   rf   ri   r�   rj   rk   rl   Úasyncified_get_credentialsÚcredentialsÚ	json_dataÚ	aad_bytesÚ	encryptedÚjson_stringr�   r|   ÚreqÚpreppedÚaws_requestÚsigned_headersÚresponser@   s                        rA   re   zSQSLogger.async_send_message÷   sN  è ø€ ð=	DÝ*ãÝ/Ý6åDá08¸×9MÑ9MÓ0NÐ&Ù'AØ"&×"<Ñ"<Ø&*×&DÑ&DØ"&×"<Ñ"<Ø $× 4Ñ 4Ø!%×!:Ñ!:Ø!%×!:Ñ!:Ø"×4Ñ4Ø'+×'FÑ'FØ!%×!:Ñ!:ô
(÷ 
"ˆKð ×!Ñ!Ð)Ü Ð!8Ó9Ð9ä#Ÿz™z¬*°WÓ*=Ó>ˆIØ�ŠØRV×RmÒRm 4×#>Ñ#>×#EÑ#EÀgÔ#NÐsw�	Ø#'§?¡?×#?Ñ#?À	ÈyÐ#?Ó#Y�	Ü"Ÿj™j¸4ÈIÑ)VÓW‘ä(¨Ó1�à#Ô$;Ð#<¸IÄoÐEVÐVcÐdÑglØ "ôhñ ˆDð
 Ð CðˆGð "×)Ñ)¨&°$×2DÑ2DÈ4ÐY`Ð)ÓaˆCØ Ÿ[™[›]ˆGá!+Ø—~‘~Ø—K‘KØ—\‘\ØŸ™ô	"ˆKñ �k 5¨$×*>Ñ*>Ó?×HÑHÈÔUä$(¨×)<Ñ)<×)BÑ)BÓ)DÓ$EˆNà$(×$;Ñ$;×$@Ñ$@Ø×"Ñ"ØØ&ð %Aó %÷ ˆHð
 ×%Ñ%Õ'ðc
"ùðXùô ò 	DÜ×$Ñ$Ð%?À×CÑCûð	DüsT   ‚J„BI Â IÂ!F#I ÉIÉI ÉJÉI ÉI É	JÉ(JÉ>JÊJÊJc              ƒ  óÎ   K  — 	 ddl m}  |«       }| j                  |«      ƒ d{  –—†  t        dd¬«      S 7 Œ# t        $ r }t        dt        |«      ¬«      cY d}~S d}~ww xY w­w)z_
        Health check for SQS by sending a small test message to the configured queue.
        r   )Ú%create_dummy_standard_logging_payloadNÚhealthy)ÚstatusÚerror_messageÚ	unhealthy)Ú*litellm.litellm_core_utils.litellm_loggingrž   re   r   r;   rF   )r<   rž   rS   r@   s       rA   Úasync_health_checkzSQSLogger.async_health_check7  sl   è ø€ ð	Zõñ
 FkÓElÐ#à×)Ñ)Ð*AÓB×BÐBÜ/°yÐPTÔUÐUð Cùäò 	ZÜ/°{ÔRUÐVWÓRXÔYÕYûð	Züs=   ‚A%„!9 ¥7¦9 ¶A%·9 ¹	A"ÁAÁA"ÁA%ÁA"Á"A%)*r   ú
str | Noner   r¥   r   r¥   r   Úboolr   úbool | Noner   r¥   r   r¥   r   r¥   r    r¥   r!   r¥   r"   r¥   r#   r¥   r$   r¥   r%   r¥   r=   ú
int | Noner>   r¨   r&   r¦   r'   r¦   r(   r¥   r)   r¥   ÚreturnÚNone)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ª   )rf   r   r©   rª   )r©   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r9   r4   r_   rc   rg   re   r¤   r.   rQ   rA   r   r   )   sx  „ Ùbð
 %)Ø&*Ø&*Ø Ø"&Ø'+Ø,0Ø04Ø,0Ø+/Ø+/Ø(,Ø15Ø+/Ø)KØ%;ØØ',à9>Ø15Ø-1ð1Jð "ðJð $ð	Jð
 $ðJð ðJð  ðJð %ðJð  *ðJð $.ðJð  *ðJð )ðJð )ðJð &ðJð %/ðJð  )ð!Jð" 'ð#Jð$ #ð%Jð( !%ð)Jð, 37ð-Jð. %/ð/Jð0 !+ð1Jð4 
ó5Jð\ %)Ø&*Ø&*Ø Ø"&Ø'+Ø,0Ø04Ø,0Ø+/Ø+/Ø(,Ø15Ø+/Ø',Ø9>Ø15Ø-1Øð)QZà!ðQZð $ðQZð $ð	QZð
 ðQZð  ðQZð %ðQZð  *ðQZð $.ðQZð  *ðQZð )ðQZð )ðQZð &ðQZð %/ðQZð )ðQZð  !%ð!QZð" 37ð#QZð$ %/ð%QZð& !+ð'QZð* 
ó+QZóf@ò$`ó$Bó>Dô@ZrQ   r   )%r®   Ú
__future__r   r5   rM   r†   Úrera   Útypingr   r0   Úlitellm._loggingr   r   Úlitellm.constantsr   r   r	   r
   Ú*litellm.litellm_core_utils.safe_json_dumpsr   Ú!litellm.llms.bedrock.base_aws_llmr   Ú&litellm.llms.custom_httpx.http_handlerr   r   Ú,litellm.types.integrations.base_health_checkr   Úlitellm.types.utilsr   Úcustom_batch_loggerr   ÚcompileÚ	MULTILINEr   Ú__annotations__r   r.   rQ   rA   ú<module>r½      s€   ðòõ #ã Û Û Û 	Û Ý ã ß :÷ó õ BÝ 8÷õ VÝ 6å 2à * §
¡
ØVØ‡L�Ló!Ð ˜ó ô]ZÐ! :õ ]ZrQ   