Ë
    tPêjd  ã                  ó  — U d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZ d dlZd dlmZmZmZ d dlmZ d dlmZ d d	lmZmZmZmZ d d
l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*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 erd dl:m;Z< d dl=m>Z> dZ?de@d<   dZAde@d<   dZBde@d<   dZCde@d<   dZDde@d<    eEh d£«      ZFde@d<    eEh d £«      ZGde@d!<    eEd"d#h«      ZHde@d$<   eIeJeKeLfZMde@d%<    eeNeIeOf   «      ZPde@d&<    ed'd'¬(«       G d)„ d*«      «       ZQdAd+„ZRdBd,„ZSdCd-„ZTdDd.„ZUdEd/„ZVdFd0„ZWdGd1„ZXdHd2„ZYdId3„ZZdJd4„Z[dKd5„Z\dLd6„Z]dMd7„Z^dNd8„Z_dOd9„Z`dPd:„ZadQd;„ZbdRd<„ZcdSd=„ZddHd>„Ze G d?„ d@e«      Zfy)Té    )ÚannotationsN)Ú	dataclass)ÚTYPE_CHECKINGÚAnyÚFinalÚLiteralÚNoReturn)Úurlsplit)Ú	BaseModelÚTypeAdapterÚValidationError)Úverbose_proxy_logger)Úversion)ÚBadRequestErrorÚGuardrailRaisedExceptionÚModifyResponseExceptionÚTimeout)ÚCustomGuardrailÚ get_session_id_from_request_dataÚlog_guardrail_information)Úget_llm_provider)Úresolve_structured_messages)Úget_async_httpx_clientÚhttpxSpecialProvider)ÚGuardrailEventHooksÚMode)ÚSTRAIKER_WEBHOOK_SCHEMA_VERSIONÚStraikerGuardrailConfigModelÚStraikerWebhookApplicationÚStraikerWebhookContentÚStraikerWebhookContextÚStraikerWebhookEventÚStraikerWebhookIdentityÚStraikerWebhookRequestÚStraikerWebhookResponseÚStraikerWebhookStreamÚStraikerWebhookUsage)ÚGenericGuardrailAPIInputs)ÚLogging)ÚGuardrailConfigModelÚstraikerr   ÚGUARDRAIL_NAMEzContent violates policyÚDEFAULT_BLOCK_MESSAGEzhttps://api.prod.straiker.aiÚDEFAULT_API_BASEi   ÚDEFAULT_MAX_PAYLOAD_BYTESz/api/v1/detect/webhookÚWEBHOOK_PATH>   é˜  é­  éô  éö  é÷  éø  ÚRETRY_STATUS>   r4   r5   r6   ÚUNREACHABLE_STATUSÚagent_idÚapp_nameÚ_APPLICATION_METADATA_KEYSÚ_OPAQUE_METADATA_SCALAR_TYPESÚ_JSON_DICT_ADAPTERT)ÚfrozenÚslotsc                  ó"   — e Zd ZU ded<   ded<   y)Ú_WebhookFailureÚstrÚmessageÚboolÚis_unreachableN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    ú/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/guardrails/guardrail_hooks/straiker/straiker.pyrA   rA   @   s   … àƒLØÔrK   rA   c                ó*   — t        | t        «      r| S i S ©N)Ú
isinstanceÚdict©Úvalues    rL   Ú_as_dictrS   F   s   € Ü˜u¤dÔ+ˆ5Ð3°Ð3rK   c                ón   — i t        | j                  d«      «      ¥t        | j                  d«      «      ¥S )NÚmetadataÚlitellm_metadata)rS   Úget)Úrequest_datas    rL   Ú_merged_metadatarY   J   s=   € ðÜ
�<×#Ñ# JÓ/Ó
0ðä
�<×#Ñ#Ð$6Ó7Ó
8ðð rK   c                ó.   — t        | t        «      r| r| S d S rN   )rO   rB   rQ   s    rL   Ú_as_optional_strr[   Q   s   € Ü˜u¤cÔ*©uˆ5Ð>¸$Ð>rK   c                ó   — i }t        | j                  d«      «      j                  «       D ];  \  }}|t        v s|j	                  d«      rŒ |dk(  rŒ&t        |t        «      sŒ7|||<   Œ= |j                  |«       |xs d S )NrU   Úuser_apiÚ
session_id)rS   rW   Úitemsr;   Ú
startswithrO   r<   Úupdate)rX   Údefault_metadataÚoutÚkeyrR   s        rL   Ú_build_webhook_metadatare   U   s‚   € Ø$&€CÜ˜|×/Ñ/°
Ó;Ó<×BÑBÓDò ‰
ˆˆUØÔ,Ñ,°·±¸zÔ0JØØ�,ÒØÜ�eÔ:Õ;ØˆC�ŠHðð ‡J�JÐÔ ØŠ;�$ÐrK   c                ó  — t        | «      }t        t        |j                  d«      «      xs6 t        |j                  d«      «      xs t        |j                  d«      «      t        |j                  d«      «      xs t        |j                  d«      «      t        |j                  d«      «      t        |j                  d«      «      t        |j                  d«      «      t        |j                  d	«      «      ¬
«      S )NÚuser_api_key_aliasÚuser_api_key_hashÚuser_api_key_tokenÚuser_api_key_team_aliasÚuser_api_key_team_idÚuser_api_key_user_idÚuser_api_key_user_emailÚuser_api_key_org_idÚuser_api_key_end_user_id)Úlitellm_keyÚlitellm_teamÚlitellm_user_idÚlitellm_user_emailÚlitellm_org_idÚend_user_id)rY   r#   r[   rW   )rX   Úmetas     rL   Ú_extract_identityrw   b   sÊ   € Ü" <Ó0€DÜ"Ü$ T§X¡XÐ.BÓ%CÓDò <Ü˜DŸH™HÐ%8Ó9Ó:ò<ä˜DŸH™HÐ%9Ó:Ó;Ü% d§h¡hÐ/HÓ&IÓJò >Ü˜DŸH™HÐ%;Ó<Ó=Ü(¨¯©Ð2HÓ)IÓJÜ+¨D¯H©HÐ5NÓ,OÓPÜ'¨¯©Ð1FÓ(GÓHÜ$ T§X¡XÐ.HÓ%IÓJô
ð 
rK   c                óf  — t        | j                  d«      «      }| j                  d«      xs |j                  d«      }|r|S |sy 	 t        || j                  d«      xs |j                  d«      | j                  d«      xs |j                  d«      ¬«      \  }}}}|xs d S # t        $ r Y y w xY w)NÚlitellm_paramsÚcustom_llm_providerÚapi_baseÚapi_key)Úmodelr{   r|   )rS   rW   r   r   )rX   r}   ry   rz   Ú_Úproviders         rL   Ú_resolve_providerr€   q   sÂ   € Ü$ \×%5Ñ%5Ð6FÓ%GÓH€NØ!-×!1Ñ!1Ð2GÓ!HÒ!uÈN×L^ÑL^Ð_tÓLuÐÙØ"Ð"ÙØðÜ,ØØ!×%Ñ% jÓ1ÒS°^×5GÑ5GÈ
Ó5SØ ×$Ñ$ YÓ/ÒP°>×3EÑ3EÀiÓ3Pô
Ñˆˆ8�Q˜ð Ò�tÐøô ò Ùðús   ÁAB$ Â$	B0Â/B0c                óê   — t        | j                  d«      «      }| j                  d«      xs |j                  d«      }t        |t        «      sy 	 t	        |«      j
                  S # t        $ r Y y w xY w)Nry   r{   )rS   rW   rO   rB   r
   ÚhostnameÚ
ValueError)rX   ry   r{   s      rL   Ú_resolve_destinationr„   ƒ   sm   € Ü$ \×%5Ñ%5Ð6FÓ%GÓH€NØ"×&Ñ& zÓ2ÒT°n×6HÑ6HÈÓ6T€HÜ�h¤Ô$ØðÜ˜Ó!×*Ñ*Ð*øÜò Ùðús   ÁA& Á&	A2Á1A2c                óÞ   ‡— ddl m} ddlm} t	        | j                  d«      «      j                  d«      }t        |t        «      r|sy |«       Št        ˆfd„ ||«      xs dD «       «      S )	Nr   )Úget_call_types_for_route)Ú#load_guardrail_translation_mappingsrV   Úuser_api_key_request_routeFc              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wrN   rJ   )Ú.0Ú	call_typeÚmappingss     €rL   ú	<genexpr>z)_route_has_translation.<locals>.<genexpr>–   s   øè ø€ Ò\¨ˆy˜HÔ$Ñ\ùs   ƒrJ   )	Ú2litellm.litellm_core_utils.api_route_to_call_typesr†   Úlitellm.llmsr‡   rS   rW   rO   rB   Úany)rX   r†   r‡   ÚrouterŒ   s       @rL   Ú_route_has_translationr’   Ž   s_   ø€ Ý[Ý@ä˜L×,Ñ,Ð-?Ó@ÓA×EÑEÐFbÓc€EÜ�eœSÔ!©ØÙ9Ó;€HÜÓ\Ñ6NÈuÓ6UÒ6[ÐY[Ô\Ó\Ð\rK   c                ó‚   — | j                  d«      }|rt        |t        «      r|S d S t        | «      sy t	        d | ¬«      S )NÚmessages)r”   Úrequest_kwargs)rW   rO   Úlistr’   r   )rX   r”   s     rL   Ú_request_structured_messagesr—   ™   sA   € Ø"×&Ñ& zÓ2€HÙÜ% h´Ô5ˆxÐ?¸4Ð?Ü! ,Ô/ØÜ&°À\ÔRÐRrK   c                óP   — t        | t        «      r| j                  S t        | «      S rN   )rO   r   rR   rB   rQ   s    rL   Ú
_hook_namer™   ¢   s   € Ü$ UÔ,?Ô@ˆ5�;‰;ÐPÄcÈ%ÃjÐPrK   c                óN  — t        | t        «      r| D �cg c]  }t        |«      ‘Œ }}nËt        | t        t        f«      rt        | «      g}n¨t        | t
        «      r—t        | j                  t        «      r| j                  n| j                  g}| j                  j                  «       D ��cg c]  }t        |t        «      r|n|gD ]  }|‘Œ Œ  }}}g |¢|¢­D �cg c]  }|€Œt        |«      ‘Œ }}ny t        t        j                  |«      «      xs d S c c}w c c}}w c c}w rN   )rO   r–   r™   rB   r   r   ÚdefaultÚtagsÚvaluesrP   Úfromkeys)Ú
event_hookÚvÚnamesr›   rR   rœ   s         rL   Ú_configured_modesr¢   ¦   sý   € Ü�*œdÔ#Ø(2Ö3 1”˜A•Ð3ˆÑ3Ü	�J¤Ô&9Ð :Ô	;Ü˜JÓ'Ð(‰Ü	�J¤Ô	%Ü/9¸*×:LÑ:LÌdÔ/S˜×+Ò+ÐZd×ZlÑZlÐYmˆØ&0§o¡o×&<Ñ&<Ó&>×x˜UÔR\Ð]bÔdhÔRiÉÐpuÐovÒxÀ1’qÐx�qÐxˆÑxØ(9¨'Ð(9°DÑ(9ÖK 1¸Q¹]”˜A•ÐKˆÑKàÜ”—‘˜eÓ$Ó%Ò-¨Ð-ùò 4ùó
 yùÚKs   •DÂ-#DÃD"Ã$D"c                óœ   — | �t        | dd «      nd xs$ |j                  d«      xs |j                  d«      }t        |t        «      r|r|S dS )Nr‹   Úlitellm_call_typeÚunknown)ÚgetattrrW   rO   rB   )Úlogging_objrX   r‹   s      rL   Ú_resolve_call_surfacer¨   ´   sZ   € à4?Ð4KŒ�˜k¨4Ô	0ÐQUò 	1Ø×Ñ˜KÓ(ò	1à×ÑÐ/Ó0ð ô
 # 9¬cÔ2±yˆ9ÐOÀiÐOrK   c                óº   — t        | t        «      r&t        j                  | j	                  dd¬«      «      S t        | t
        «      rt        j                  | «      S y )NÚjsonT©ÚmodeÚexclude_none)rO   r   r=   Úvalidate_pythonÚ
model_dumprP   rQ   s    rL   Ú_jsonable_dictr°   ½   sL   € Ü�%œÔ#Ü!×1Ñ1°%×2BÑ2BÈÐ]aÐ2BÓ2bÓcÐcÜ�%œÔÜ!×1Ñ1°%Ó8Ð8ØrK   c                ól   ‡— t        | t        «      sy t        ˆfd„| D «       «      }|rt        |«      S d S )Nc              3  ó>   •K  — | ]  }t        |«      xŠ€Œ‰–— Œ y ­wrN   )r°   )rŠ   ÚitemÚplains     €rL   r�   z$_opaque_dict_list.<locals>.<genexpr>È   s    øè ø€ Ò` 4¼nÈTÓ>RÐ5R°UÑ4_œÑ`ùs   ƒ–)rO   r–   Útuple)rR   r_   r´   s     @rL   Ú_opaque_dict_listr¶   Å   s1   ø€ Ü�eœTÔ"ØÜÓ`¨5Ô`Ó`€EÙŒ4�‹;Ð) TÐ)rK   c                óê   — t        | t        «      r6t        | j                  d«      «      xs t        | j                  d«      «      S t        t	        | dd «      «      xs t        t	        | dd «      «      S )NÚfinish_reasonÚstop_reason)rO   rP   r[   rW   r¦   )Úchoices    rL   Ú_choice_terminal_reasonr»   Ì   sh   € Ü�&œ$ÔÜ §
¡
¨?Ó ;Ó<ÒkÔ@PÐQW×Q[ÑQ[Ð\iÓQjÓ@kÐkÜœG F¨O¸TÓBÓCò ÔGWÜ�˜ tÓ,óHð rK   c                óä  — | €y t        | t        «      rut        | j                  d«      «      xs t        | j                  d«      «      }|r|S | j                  d«      }t        |t        «      sy |D ]  }t        |«      }|sŒ|c S  y t        t        | dd «      «      xs t        t        | dd «      «      }|r|S t        | dd «      }t        |t        «      sy |D ]  }t        |«      }|sŒ|c S  y )Nr¸   r¹   Úchoices)rO   rP   r[   rW   r–   r»   r¦   )ÚresponseÚtopr½   rº   Úreasons        rL   Ú_response_finish_reasonrÁ   Ô   s  € ØÐØÜ�(œDÔ!Ü˜xŸ|™|¨OÓ<Ó=ÒnÔAQÐRZ×R^ÑR^Ð_lÓRmÓAnˆÙØˆJØ—,‘,˜yÓ)ˆÜ˜'¤4Ô(ØØò 	ˆFÜ,¨VÓ4ˆFÚØ’ð	ð ä
œ7 8¨_¸dÓCÓ
Dò ÔHXÜ�˜-¨Ó.óI€Cñ Øˆ
Ü�h 	¨4Ó0€GÜ�gœtÔ$ØØò ˆÜ(¨Ó0ˆÚØŠMðð rK   c                óJ   — t        | t        «      rt        | t        «      s| S d S rN   )rO   ÚintrD   rQ   s    rL   Ú_as_optional_intrÄ   ó   s    € Ü˜u¤cÔ*´:¸eÄTÔ3Jˆ5ÐTÐPTÐTrK   c                ó’   ‡ — t        ‰ t        «      r‰ j                  nˆ fd„}t         ||«      «      }|�|S t         ||«      «      S )Nc                ó   •— t        ‰| d «      S rN   )r¦   )rd   Úusages    €rL   ú<lambda>z$_usage_token_count.<locals>.<lambda>ø   s   ø€ ÄwÈuÐVYÐ[_ÓG`€ rK   )rO   rP   rW   rÄ   )rÇ   Ú
openai_keyÚanthropic_keyrW   Úopenai_counts   `    rL   Ú_usage_token_countrÌ   ÷   sA   ø€ Ü(¨´Ô5�—’Ó;`€CÜ*©3¨z«?Ó;€LØ'Ð3ˆ<Ð]Ô9IÉ#ÈmÓJ\Ó9]Ð]rK   c                ó¼   — t        | t        «      r| j                  d«      nt        | dd «      }|€y t	        |dd«      }t	        |dd«      }|€|€y t        ||¬«      S )NrÇ   Úprompt_tokensÚinput_tokensÚcompletion_tokensÚoutput_tokens)rÏ   rÑ   )rO   rP   rW   r¦   rÌ   r'   )r¾   rÇ   rÏ   rÑ   s       rL   Ú_build_usagerÒ   ý   sg   € Ü,6°xÄÔ,F�8—<‘< Ô(ÌGÐT\Ð^eÐgkÓLl€EØ€}ØÜ,¨U°OÀ^ÓT€LÜ-¨eÐ5HÈ/ÓZ€MØÐ Ð 5ØÜ¨\ÈÔWÐWrK   c                ó´   — | j                  d«      du ryt        t        | j                  d«      «      j                  d«      «      }|j                  d«      du S )NÚstreamTÚproxy_server_requestÚbody)rW   rS   )rX   rÖ   s     rL   Ú_is_streamed_requestr×     sS   € Ø×Ñ˜Ó! TÑ)ØÜœ8 L×$4Ñ$4Ð5KÓ$LÓM×QÑQÐRXÓYÓZ€DØ�8‰8�HÓ Ð%Ð%rK   c                  ó�  ‡ — e Zd Zedd„«       Zedd„«       Zeddddddd	ed
d
dd
f	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Z	dd„Z
dd„Zdd„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 d d„Zd!d„Z	 	 	 	 	 	 	 	 d"d„Z	 	 	 	 	 	 	 	 	 	 	 	 d#d„Zddœ	 	 	 	 	 	 	 	 	 d$d„Ze	 	 	 	 	 	 d%d„«       Ze	 d&	 	 	 	 	 	 	 	 	 d'd„«       Zˆ xZS )(ÚStraikerGuardrailc                 ó   — t         S rN   )r   rJ   rK   rL   Úget_config_modelz"StraikerGuardrail.get_config_model  s   € ä+Ð+rK   c                óB   — t         j                  t         j                  gS rN   )r   Úpre_callÚ	post_call)Úclss    rL   Úget_supported_event_hooksz+StraikerGuardrail.get_supported_event_hooks  s    € ô  ×(Ñ(Ü×)Ñ)ð
ð 	
rK   zLiteLLM Gatewayg      @é   gš™™™™™¹?g       @Úfail_closedTNFc                ó  •— |st        d«      ‚|dvrt        d|›�«      ‚|| _        |j                  d«      | _        || _        t        |«      | _        t        dt        |«      «      | _	        t        dt        |«      «      | _
        t        | j                  t        |«      «      | _        || _        |	| _        t        |
«      | _        |rt        |«      ni | _        |rt        |«      ni | _        t%        |«      | _        d| _        d| _        |xs t-        t.        j0                  ¬«      | _        |j5                  d	t7        | j9                  «       «      «       t;        ‰| �x  d
i |¤Ž t?        | j@                  «      | _!        y )Nzapi_key must be non-empty)Ú	fail_openrâ   z?unreachable_fallback must be 'fail_open' or 'fail_closed'; got ú/r   g        T)Úllm_providerÚsupported_event_hooksrJ   )"rƒ   r|   Úrstripr{   ÚsourceÚfloatÚtimeoutÚmaxrÃ   Úmax_retriesÚinitial_backoffÚmax_backoffÚunreachable_fallbackÚfail_on_errorÚmax_payload_bytesrP   Úcustom_headersrb   rD   ÚverboseÚstreaming_end_of_stream_onlyÚ streaming_buffer_until_moderatedr   r   ÚGuardrailCallbackÚasync_handlerÚ
setdefaultr–   rà   ÚsuperÚ__init__r¢   rŸ   Úconfigured_modes)Úselfr|   r{   ré   rë   rí   rî   rï   rð   rñ   rò   ró   rU   rô   rø   ÚkwargsÚ	__class__s                   €rL   rû   zStraikerGuardrail.__init__  sW  ø€ ñ$ ÜÐ8Ó9Ð9ØÐ'CÑCÜÐ^Ð_sÐ^vÐwÓxÐxàˆŒØ Ÿ™¨Ó,ˆŒØˆŒÜ˜W“~ˆŒÜ˜q¤# kÓ"2Ó3ˆÔÜ" 3¬¨oÓ(>Ó?ˆÔÜ˜t×3Ñ3´U¸;Ó5GÓHˆÔØ$8ˆÔ!Ø*ˆÔÜ!$Ð%6Ó!7ˆÔÙ6Dœd >Ô2È"ˆÔÙ2:¤ X¤ÀˆÔÜ˜G“}ˆŒà,0ˆÔ)Ø04ˆÔ-à*ò 
Ô.DÜ-×?Ñ?ô/
ˆÔð 	×ÑÐ1´4¸×8VÑ8VÓ8XÓ3YÔZÜ‰ÑÑ"˜6Ò"ä 1°$·/±/Ó BˆÕrK   c                ó*   — | j                   › t        › �S rN   )r{   r0   )rý   s    rL   Ú_webhook_urlzStraikerGuardrail._webhook_urlL  s   € Ø—-‘-�¤ Ð/Ð/rK   c                óÀ   — h d£}| j                   j                  «       D ��ci c]  \  }}|j                  «       |vsŒ||“Œ }}}d| j                  › �dddœ|¥S c c}}w )N>   úcontent-typeúx-straiker-webhook-formatÚauthorizationzBearer zapplication/jsonÚlitellm)ÚAuthorizationzContent-TypezX-Straiker-Webhook-Format)ró   r_   Úlowerr|   )rý   ÚreservedÚkr    Úextras        rL   Ú_headerszStraikerGuardrail._headersO  sm   € ÚXˆØ)-×)<Ñ)<×)BÑ)BÓ)D×b¡  AÈÏÉË	ÐYaÒHa˜˜1™ÐbˆÑbà& t§|¡| nÐ5Ø.Ø)2ñ
ð ð	
ð 	
ùó cs
   ¢A½Ac                ó²   — t        |«      }t        |j                  d«      «      }t        |xs | j                  t        |j                  d«      «      ¬«      S )Nr9   r:   )ré   Úname)rY   r[   rW   r   ré   )rý   rX   rv   r9   s       rL   Ú_build_applicationz$StraikerGuardrail._build_applicationY  sI   € Ü& |Ó4ˆÜ*¨4¯8©8°JÓ+?Ó@ˆÜ)ØÒ*˜tŸ{™{Ü! $§(¡(¨:Ó"6Ó7ô
ð 	
rK   c                óâ   — t        t        ||«      | j                  |t        ||«      t	        |«      t        |«      |rt        |dd «      nd |rt        |dd «      t        ¬«	      S d t        ¬«	      S )NÚlitellm_call_idÚlitellm_trace_id)	Úcall_surfacer¬   r}   Úmodel_providerÚdestinationr^   r  r  Úlitellm_version)r!   r¨   rü   r€   r„   r   r¦   r  )rý   rX   r}   r§   s       rL   Ú_build_contextz StraikerGuardrail._build_contexta  sy   € ô &Ü.¨{¸LÓIØ×&Ñ&ØÜ,¨\¸5ÓAÜ,¨\Ó:Ü7¸ÓEÙMXœG KÐ1BÀDÔIÐ^bÙOZœW [Ð2DÀdÓKÜ+ô

ð 
	
ð aeÜ+ô

ð 
	
rK   c               óà  — |j                  d«      xs |j                  d«      }|rt        |dd «      nd }|xs d› d|› �}t        t        |j                  d«      xs g «      t        |j                  d«      xs g «      t	        |j                  d«      «      t	        |j                  d«      «      t	        |j                  d	«      «      ¬
«      }|dk(  r[t        d|¬«      }	t        |	|| j                  |||«      t        |«      | j                  |«      t        || j                  «      ¬«      S |j                  d«      }
t        |
«      |_        t        t	        t        |«      «      ¬«      }t        |«      rdnd}t        d|t!        |¬«      ¬«      }	t        |	||| j                  |||«      t        |«      | j                  |«      t#        |
«      t        || j                  «      ¬«      S )Nr}   r  r  ú:ÚtextsÚimagesÚstructured_messagesÚtoolsÚ
tool_calls)r  r  r  r  r  ÚrequestrÝ   )ÚtypeÚid)Úeventr  ÚcontextÚidentityÚapplicationrU   r¾   )r  Ú	assembledÚnonerÞ   )Úphase)r   r!  rÔ   )r"  r  r¾   r#  r$  r%  rÇ   rU   )rW   r¦   r    r–   r¶   r"   r$   r  rw   r  re   rb   rÁ   r¸   r—   r×   r&   rÒ   )rý   ÚinputsrX   Ú
input_typer§   r}   Úcall_idÚevent_idÚcontentr"  Úresponse_objÚrequest_contentr(  s                rL   Ú_build_envelopez!StraikerGuardrail._build_envelopes  sÍ  € ð —z‘z 'Ó*ÒG¨l×.>Ñ.>¸wÓ.GˆÙJUœ Ð.?ÀÔFÐ[_ˆØ$Ò1¨	Ð2°!°J°<Ð@ˆä/Ü�v—z‘z 'Ó*Ò0¨bÓ1Ü˜Ÿ
™
 8Ó,Ò2°Ó3Ü 1°&·*±*Ð=RÓ2SÓ TÜ# F§J¡J¨wÓ$7Ó8Ü(¨¯©°LÓ)AÓBô
ˆð ˜Ò"Ü(¨j¸XÔFˆEÜ)ØØØ×+Ñ+¨L¸%ÀÓMÜ*¨<Ó8Ø ×3Ñ3°LÓAÜ0°¸t×?TÑ?TÓUôð ð +×.Ñ.¨zÓ:ˆÜ 7¸Ó EˆÔÜ!7Ü 1Ô2NÈ|Ó2\Ó ]ô"
ˆô EYÐYeÔDf±[ÐlrˆÜ$¨+¸(ÔK`ÐglÔKmÔnˆÜ%ØØ#ØØ×'Ñ'¨°e¸[ÓIÜ& |Ó4Ø×/Ñ/°Ó=Ü˜|Ó,Ü,¨\¸4×;PÑ;PÓQô	
ð 		
rK   c           	   ƒ  óü  K  — 	 t        j                  |«      j                  d«      }t        |«      }|| j                  kD  rd t        d|› d| j                  › �d¬«      fS | j                  «       }| j                  «       }| j                  dz   }d }| j                  r3t        j                  t        j                  d|||d	œt        ¬
«      «       t!        |«      D �]l  }		 | j"                  j%                  |||| j&                  ¬«      ƒ d {  –—† }
|
j(                  dk(  rt	 |
j                  «       }t+        j,                  |«      }| j                  r<t        j                  t        j                  d|
j(                  |dœt        ¬
«      «       |d fc S t        d|
j(                  › d|
j2                  d d › �|
j(                  t4        v ¬«      }|
j(                  t6        vrd |fc S 	 |	|dz
  k  s�ŒtG        | jH                  d|	z  z  | jJ                  «      }t=        jL                  tO        jP                  d|«      «      ƒ d {  –—†  �Œo d |xs t        dd¬«      fS # t        t        t
        f$ r}d t        d|› �d¬«      fcY d }~S d }~ww xY w7 �Œ…# t.        t         j0                  f$ r}d t        d|› �d¬«      fcY d }~c S d }~ww xY w# t8        j:                  t<        j>                  t@        f$ r0}t        tC        |«      jD                  › d|› �d¬«      }Y d }~�Œ:d }~wt         j0                  t        t        f$ r3}d t        tC        |«      jD                  › d|› �d¬«      fcY d }~c S d }~ww xY w7 �Œ5­w)Nzutf-8zrequest serialization failed: F)rE   zpayload zB exceeds max_payload_bytes é   zstraiker.webhook_request)r"  ÚurlÚbytesÚpayload©r›   )r-  Úheadersrë   éÈ   zinvalid response schema: zstraiker.webhook_response)r"  Ústatus_coderÖ   zHTTP z: Trá   r   zunknown error))rª   ÚdumpsÚencodeÚ	TypeErrorrƒ   ÚOverflowErrorrA   Úlenrò   r  r  rí   rô   r   ÚinforB   Úrangerø   Úpostrë   r9  r%   Úmodel_validater   ÚJSONDecodeErrorÚtextr8   r7   ÚhttpxÚRequestErrorÚasyncioÚTimeoutErrorr   r   rF   Úminrî   rï   ÚsleepÚrandomÚuniform)rý   r5  rÖ   ÚerrorÚ
body_bytesr3  r7  ÚattemptsÚlast_failureÚattemptÚrespÚparsedÚveÚeÚbackoffs                  rL   Ú_post_webhookzStraikerGuardrail._post_webhook¤  s]  è ø€ ð	iÜ—:‘:˜gÓ&×-Ñ-¨gÓ6ˆDô   ›Iˆ
Ø˜×.Ñ.Ò.ØœØ˜:˜,Ð&BÀ4×CYÑCYÐBZÐ[Ø$ôð ð ð
 ×&Ñ&Ó(ˆØŸ™›ˆØ×*Ñ*¨QÑ.ˆØ/3ˆà�<Š<Ü ×%Ñ%Ü—
‘
à!;Ø"Ø!+Ø#*ñ	ô  ôô
ô ˜X“ó "	@ˆGð_Ø!×/Ñ/×4Ñ4°SÀ$ÐPWÐae×amÑamÐ4Ón×n�Ø×#Ñ# sÒ*ðmØ#Ÿy™y›{˜Ü!8×!GÑ!GÈÓ!M˜ð —|’|Ü,×1Ñ1Ü ŸJ™Jà-HØ37×3CÑ3CØ,0ñ!"ô
 ),ôô	ð " 4˜<Ò'Ü.Ø˜D×,Ñ,Ð-¨R°·	±	¸$¸3°Ð/@ÐAØ#'×#3Ñ#3Ô7IÐ#Iô �ð ×#Ñ#¬<Ñ7Ø Ð-Ò-ð 8ð ˜ A™Ô%Ü˜d×2Ñ2°a¸±jÑAÀ4×CSÑCSÓT�Ü—m‘m¤F§N¡N°1°gÓ$>Ó?×?Ò?ðE"	@ðH �\ÒZ¤_°_ÐUYÔ%ZÐZÐZøô œ:¤}Ð5ò 	iØœÐ+IÈ%ÈÐ)QÐbgÔhÐhÕhûð	iúð: oúô
 ,¬T×-AÑ-AÐBò mØ#¤_Ð7PÐQSÐPTÐ5UÐfkÔ%lÐl×lûðmûô( ×&Ñ&¬×(<Ñ(<¼gÐFò `Ü.´$°q³'×2BÑ2BÐ1CÀ2ÀaÀSÐ/IÐZ^Ô_–ûÜ×(Ñ(¬)´ZÐ@ò _Øœ_´°Q³×0@Ñ0@Ð/AÀÀAÀ3Ð-GÐX]Ô^Ð^×^ûð_úð
 @ûsß   ‚M<„$I ¨B8M<Ã!,KÄJÄKÄ"%JÅAKÆM<ÆAKÇ$M<Ç2AM<ÉM9ÉM<ÉJÉ3J
ÊJÊM<Ê
JÊM<ÊKÊKÊ.KÊ?KË KËM<ËKËKË(M6Ë7%L"ÌM<Ì"!M6Í&M1Í)M6Í*M<Í1M6Í6M<c               ó  — | j                   sy |j                  d«      }t        |dd «      }t        |t        «      rL|j                  di «      }t        |t        «      r)|j                  |j                  |j                  dœ«       y y y )Nr¾   Ú_hidden_paramsr+   )ÚactionÚturn_id)	rô   rW   r¦   rO   rP   rù   ra   rZ  r[  )rý   rX   r§   rS  r.  ÚhiddenÚstraiker_hiddens          rL   Ú_recordzStraikerGuardrail._recordè  sx   € ð �|Š|ØØ*×.Ñ.¨zÓ:ˆÜ Ð.>ÀÓEˆÜ�fœdÔ#Ø%+×%6Ñ%6°zÀ2Ó%FˆOÜ˜/¬4Ô0Ø×&Ñ&°&·-±-ÈFÏNÉNÑ'[Õ\ð 1ð $rK   c          	     óä   — |xr | j                   dk(  xs | j                   }t        j                  t	        j
                  d|||dœt        ¬«      «       |r|S | j                  ||d|› �¬«       y )Nrä   zstraiker.error)r"  r*  rM  rä   r6  z Straiker detection unavailable: )rX   r*  rC   )rð   rñ   r   rM  rª   r:  rB   Ú_block)rý   r)  rX   r*  rM  rE   rä   s          rL   Ú_failzStraikerGuardrail._failø  sƒ   € ð +ÒW¨t×/HÑ/HÈKÑ/WÒrÐ`d×`rÑ`rÐ\rˆ	Ü×"Ñ"Ü�J‰Jà-Ø",Ø"Ø!*ñ	ô ôô
	
ñ ØˆMØ�‰Ø%Ø!Ø6°u°gÐ>ð 	õ 	
rK   )Úblocked_contentc          	     óØ   — |dk(  r!t        | j                  xs t        |d|¬«      ‚t        ||j	                  dd«      xs d|| j                  xs t        |j	                  d«      ¬«      ‚)Nr  F)Úguardrail_namerC   Ú should_wrap_with_default_messagerb  r}   r¥   r¾   )rC   r}   rX   rd  Úoriginal_response)r   rd  r,   r   rW   )rý   rX   r*  rC   rb  s        rL   r`  zStraikerGuardrail._block  sv   € ð ˜Ò"Ü*Ø#×2Ñ2ÒD´nØØ16Ø /ô	ð ô &ØØ×"Ñ" 7¨IÓ6ÒC¸)Ø%Ø×.Ñ.Ò@´.Ø*×.Ñ.¨zÓ:ô
ð 	
rK   c                ób   — i }|j                  | «       |j                  �|j                  |d<   |S )Nr  )ra   r  )r)  rS  Úreturn_inputss      rL   Ú_intervened_inputsz$StraikerGuardrail._intervened_inputs,  s5   € ð
 ;=ˆØ×Ñ˜VÔ$Ø�<‰<Ð#Ø%+§\¡\ˆM˜'Ñ"ØÐrK   c           	   ƒ  ó¼  K  — 	 | j                  ||||¬«      }|j                  dd¬«      }| j                  |«      ƒ d {  –—† \  }}	|	�*| j                  ||||	j                  |	j                  ¬«      S |€| j                  |||dd¬«      S | j                  |||¬«       |j                  �M|j                  t        k7  r:t        j                  t        j                   d	t        |j                  d
œ«      «       |j"                  dk(  r'| j%                  |||j&                  xs t(        d¬«       |j"                  dk(  rY|dk(  xr t+        |«      }
|j,                  �|
r'| j%                  |||j&                  xs t(        d¬«       | j/                  ||«      S |S # t        t        t        f$ r)}| j                  |||t        |«      d¬«      cY d }~S d }~ww xY w7 �Œ™­w)N)r)  rX   r*  r§   rª   Tr«   F)r)  rX   r*  rM  rE   zempty response from Straiker)rX   r§   rS  zstraiker.schema_drift)r"  ÚexpectedÚreceivedÚBLOCKED)rX   r*  rC   rb  ÚGUARDRAIL_INTERVENEDr¾   )r0  r¯   r   r<  rƒ   ra  rB   rW  rC   rE   r^  Úschema_versionr   r   Úwarningrª   r:  rZ  r`  Úblocked_reasonr-   r×   r  ri  )rý   r)  rX   r*  r§   Úenveloper5  rM  rS  ÚfailureÚis_streamed_responses              rL   Úapply_guardrailz!StraikerGuardrail.apply_guardrail7  s  è ø€ ð	Ø"×2Ñ2ØØ)Ø%Ø'ð	 3ó ˆHð &×0Ñ0°fÈ4Ð0ÓPˆGð !%× 2Ñ 2°7Ó ;×;‰ˆ�ØÐØ—:‘:ØØ)Ø%Ø—o‘oØ&×5Ñ5ð ó ð ð ˆ>Ø—:‘:ØØ)Ø%Ø4Ø$ð ó ð ð 	�‰ ,¸KÐPVˆÔWà× Ñ Ð,°×1FÑ1FÔJiÒ1iÜ ×(Ñ(Ü—
‘
à!8Ü$CØ$*×$9Ñ$9ñóôð �=‰=˜IÒ%Ø�K‰KØ)Ø%Ø×-Ñ-ÒFÔ1FØ $ð	 ô ð �=‰=Ð2Ò2Ø*4¸
Ñ*BÒ*iÔG[Ð\hÓGiÐ Ø�|‰|Ð#Ñ';Ø—‘Ø!-Ø)Ø"×1Ñ1ÒJÔ5JØ$(ð	 ô ð ×*Ñ*¨6°6Ó:Ð:Øˆøôs  ¤¬JÐ7ò 	Ø—:‘:ØØ)Ø%Ü˜%“jØ$ð ó õ ûð	úð <ûs@   ‚G„(F ¬GÁ GÁEGÆGÆ-GÇGÇGÇGÇG)Úreturnztype[GuardrailConfigModel])rv  zlist[GuardrailEventHooks]) r|   rB   r{   rB   ré   rB   rë   rê   rí   rÃ   rî   rê   rï   rê   rð   z#Literal['fail_open', 'fail_closed']rñ   rD   rò   rÃ   ró   údict[str, str] | NonerU   rw  rô   rD   rø   zhttpx.AsyncClient | Nonerþ   Úobjectrv  ÚNone)rv  rB   )rv  údict[str, str])rX   rP   rv  r   )rX   rP   r}   ú
str | Noner§   úLiteLLMLoggingObj | Nonerv  r!   )
r)  r(   rX   rP   r*  úLiteral['request', 'response']r§   r|  rv  r$   )r5  rP   rv  z=tuple[StraikerWebhookResponse | None, _WebhookFailure | None])rX   rP   r§   r|  rS  r%   rv  ry  )r)  r(   rX   rP   r*  r}  rM  rB   rE   rD   rv  r(   )
rX   rP   r*  r}  rC   rB   rb  rD   rv  r	   )r)  r(   rS  r%   rv  r(   rN   )
r)  r(   rX   rP   r*  r}  r§   r|  rv  r(   )rF   rG   rH   ÚstaticmethodrÛ   Úclassmethodrà   r.   r/   rû   r  r  r  r  r0  rW  r^  ra  r`  ri  r   ru  Ú__classcell__)rÿ   s   @rL   rÙ   rÙ     s°  ø„ Øò,ó ð,ð ò
ó ð
ð )Ø'ØØØ!$Ø ØDQØ"Ø!:Ø04Ø*.ØØ26ð/Càð/Cð ð/Cð ð	/Cð
 ð/Cð ð/Cð ð/Cð ð/Cð Bð/Cð ð/Cð ð/Cð .ð/Cð (ð/Cð ð/Cð 0ð/Cð  ð!/Cð" 
õ#/Cób0ó
ó
ð
àð
ð ð
ð .ð	
ð
 
 ó
ð$/
ð *ð/
ð ð	/
ð
 3ð/
ð .ð/
ð 
 ó/
óbB[ðH]ð ð]ð .ð	]ð
 (ð]ð 
ó]ð 
ð *ð
ð ð	
ð
 3ð
ð ð
ð ð
ð 
#ó
ðF !&ñ
ð ð
ð 3ð	
ð
 ð
ð ð
ð 
ó
ð. ðØ)ðà'ðð 
#òó ðð ð 15ðHà)ðHð ðHð 3ð	Hð
 .ðHð 
#òHó ôHrK   rÙ   )rR   rx  rv  rP   )rX   rP   rv  rP   )rR   rx  rv  r{  )rX   rP   rb   rz  rv  údict[str, object] | None)rX   rP   rv  r#   )rX   rP   r}   r{  rv  r{  )rX   rP   rv  r{  )rX   rP   rv  rD   )rX   rP   rv  zlist[dict[str, Any]] | None)rR   rx  rv  rB   )rŸ   rx  rv  zlist[str] | None)r§   r|  rX   rP   rv  rB   )rR   rx  rv  r�  )rR   rx  rv  zlist[dict[str, object]] | None)rº   rx  rv  r{  )r¾   r   rv  r{  )rR   rx  rv  ú
int | None)rÇ   rx  rÉ   rB   rÊ   rB   rv  r‚  )r¾   rx  rv  zStraikerWebhookUsage | None)gÚ
__future__r   rG  rª   rK  Údataclassesr   Útypingr   r   r   r   r	   Úurllib.parser
   rE  Úpydanticr   r   r   Úlitellm._loggingr   Úlitellm._versionr   r  Úlitellm.exceptionsr   r   r   r   Ú%litellm.integrations.custom_guardrailr   r   r   Ú1litellm.litellm_core_utils.get_llm_provider_logicr   Ú3litellm.litellm_core_utils.prompt_templates.factoryr   Ú&litellm.llms.custom_httpx.http_handlerr   r   Úlitellm.types.guardrailsr   r   Ú7litellm.types.proxy.guardrails.guardrail_hooks.straikerr   r   r   r    r!   r"   r#   r$   r%   r&   r'   Úlitellm.types.utilsr(   Ú*litellm.litellm_core_utils.litellm_loggingr)   ÚLiteLLMLoggingObjÚ3litellm.types.proxy.guardrails.guardrail_hooks.baser*   r,   rI   r-   r.   r/   r0   Ú	frozensetr7   r8   r;   rB   rÃ   rê   rD   r<   rP   rx  r=   rA   rS   rY   r[   re   rw   r€   r„   r’   r—   r™   r¢   r¨   r°   r¶   r»   rÁ   rÄ   rÌ   rÒ   r×   rÙ   rJ   rK   rL   ú<module>r–     s¥  ðÞ "ã Û Û Ý !ß ?Õ ?Ý !ã ß <Ñ <å 1Ý 7÷ó ÷ñ õ
 OÝ [÷÷ ?÷÷ ÷ ñ õ :áÝWÝXà"€�Ó "Ø8Ð �uÓ 8Ø8Ð �%Ó 8Ø#)Ð ˜5Ó )Ø.€ˆeÓ .ÙÒ >Ó?€ˆeÓ ?Ù%¢oÓ6Ð �EÓ 6Ù$-¨z¸:Ð.FÓ$GÐ ˜EÓ GØ(+¨S°%¸Ð'>Ð ˜uÓ >Ù'¨¨S°&¨[Ñ(9Ó:Ð �EÓ :ñ �$˜dÔ#÷ð ó $ðó
4óó?ó
óóó$ó]óSóQó.óPóó*óóó>Uó^óXó&ôq˜õ qrK   