Ë
    tPêj|X  ã                  ót  — U 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
mZmZ d dlmZ d dl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 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#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. erd dl/m0Z0 d dl1m2Z2 dZ3de4d<    G d„ ded¬«      Z5 G d„ ded¬«      Z6 G d„ de«      Z7 G d „ d!e«      Z8 G d"„ d#ed¬«      Z9 G d$„ d%ed¬«      Z: G d&„ d'ed¬«      Z; G d(„ d)ed¬«      Z< G d*„ d+ed¬«      Z= G d,„ d-ed¬«      Z> G d.„ d/ed¬«      Z? G d0„ d1ed¬«      Z@ G d2„ d3ed¬«      ZA G d4„ d5e«      ZBeeCeDf   eEe(   z  eEe-   z  ZF G d6„ d7e«      ZG G d8„ d9e«      ZH G d:„ d;e«      ZIdHd<„ZJdId=„ZKdJd>„ZLdKd?„ZMdLd@„ZNdMdA„ZOdNdB„ZPe3fdOdC„ZQ G dD„ dEe«      ZR G dF„ dGe«      ZSy)Pé    )ÚannotationsN)ÚMappingÚSequence)ÚTYPE_CHECKINGÚAnyÚFinalÚLiteralÚProtocolÚ	TypedDict)Úurlparse)Úuuid4)ÚHTTPException)ÚHTTPStatusError)ÚHTTPBasicAuth)ÚReadOnly)Úverbose_proxy_logger)ÚCustomGuardrailÚlog_guardrail_information)ÚLogging)Úget_async_httpx_clientÚhttpxSpecialProvider)ÚGuardrailEventHooks)ÚChatCompletionToolCallChunk)ÚHiddenlayerActionÚHiddenlayerMessages)ÚChatCompletionMessageToolCallÚGenericGuardrailAPIInputs)Ú	BaseModel)ÚGuardrailConfigModelg      >@zFinal[float]Ú_AUTH_TIMEOUT_SECONDSc                  ó"   — e Zd ZU ded<   ded<   y)Ú_HiddenlayerEvaluationÚstrÚactionÚthreat_levelN©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    ú…/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/guardrails/guardrail_hooks/hiddenlayer/hiddenlayer.pyr"   r"   +   s   … ØƒKØÔr,   r"   F)Útotalc                  ó"   — e Zd ZU ded<   ded<   y)Ú_HiddenlayerAnalysisEntryr#   ÚnameÚboolÚdetectedNr&   r+   r,   r-   r0   r0   0   s   … Ø
ƒIØ„Nr,   r0   c                  ó   — e Zd ZU ded<   y)Ú_HiddenlayerModifiedMessageú'ReadOnly[str | list[Mapping[str, str]]]ÚcontentNr&   r+   r,   r-   r5   r5   5   ó   … Ø4Ô4r,   r5   c                  ó   — e Zd ZU ded<   y)Ú_HiddenlayerModifiedSidez+ReadOnly[list[_HiddenlayerModifiedMessage]]ÚmessagesNr&   r+   r,   r-   r:   r:   9   s   … Ø9Ô9r,   r:   c                  ó,   — e Zd ZU ded<   ded<   ded<   y)Ú_HiddenlayerResponser"   Ú
evaluationz#Sequence[_HiddenlayerAnalysisEntry]Úanalysisz&Mapping[str, _HiddenlayerModifiedSide]Úmodified_dataNr&   r+   r,   r-   r=   r=   =   s   … Ø&Ó&Ø1Ó1Ø9Ô9r,   r=   c                  ó   — e Zd ZU ded<   y)Ú_ProxyServerRequestúReadOnly[dict[str, str]]ÚheadersNr&   r+   r,   r-   rB   rB   C   ó   … Ø%Ô%r,   rB   c                  ó   — e Zd ZU ded<   y)Ú_HiddenlayerRequestDatazReadOnly[_ProxyServerRequest]Úproxy_server_requestNr&   r+   r,   r-   rG   rG   G   s   … Ø7Ô7r,   rG   c                  ó   — e Zd ZU ded<   y)Ú_LoggedCallMetadatarC   rD   Nr&   r+   r,   r-   rJ   rJ   K   rE   r,   rJ   c                  ó   — e Zd ZU ded<   y)Ú_LoggedCallLitellmParamszReadOnly[_LoggedCallMetadata]ÚmetadataNr&   r+   r,   r-   rL   rL   O   s   … Ø+Ô+r,   rL   c                  ó   — e Zd ZU ded<   y)Ú_HiddenlayerOutputMessager6   r7   Nr&   r+   r,   r-   rO   rO   S   r8   r,   rO   c                  ó   — e Zd ZU ded<   y)Ú_HiddenlayerChoiceMessagezReadOnly[str]r7   Nr&   r+   r,   r-   rQ   rQ   W   s   … ØÔr,   rQ   c                  ó   — e Zd ZU ded<   y)Ú_HiddenlayerChoicez#ReadOnly[_HiddenlayerChoiceMessage]ÚmessageNr&   r+   r,   r-   rS   rS   [   s   … Ø0Ô0r,   rS   c                  ó"   — e Zd ZU ded<   ded<   y)Ú_HiddenlayerV2Outputz-ReadOnly[Sequence[_HiddenlayerOutputMessage]]r;   z&ReadOnly[Sequence[_HiddenlayerChoice]]ÚchoicesNr&   r+   r,   r-   rV   rV   _   s   … Ø;Ó;Ø3Ô3r,   rV   c                  ó   — e Zd ZU dZded<   y)Ú_HiddenlayerV2OutputViewzTTyped read of the untyped JSON body returned by the HiddenLayer detection endpoints.zReadOnly[_HiddenlayerV2Output]r>   N)r'   r(   r)   Ú__doc__r*   r+   r,   r-   rY   rY   d   s   … Ù^à.Ô.r,   rY   c                  ó"   — e Zd ZdZedd„«       Zy)Ú_LoggedCallDetailsz^Logging object view that exposes its untyped call details with the shape this guardrail reads.c                 ó   — y ©Nr+   ©Úselfs    r-   Úmodel_call_detailsz%_LoggedCallDetails.model_call_detailsp   s   € ØLOr,   N)Úreturnz&Mapping[str, _LoggedCallLitellmParams])r'   r(   r)   rZ   Úpropertyra   r+   r,   r-   r\   r\   m   s   „ ÙhàÚOó ÙOr,   r\   c                  ó   — e Zd ZdZdd„Zy)Ú_TokenPayloadSourcezPResponse view that decodes the HiddenLayer OAuth token body as a string mapping.c                 ó   — y r^   r+   r_   s    r-   Újsonz_TokenPayloadSource.jsonw   ó   � r,   N)rb   úMapping[str, str]©r'   r(   r)   rZ   rg   r+   r,   r-   re   re   t   s   „ ÙZä,r,   re   c                  ó   — e Zd ZdZdd„Zy)Ú_InteractionPayloadSourcezcResponse view that decodes the HiddenLayer v1 interaction body with the shape this guardrail reads.c                 ó   — y r^   r+   r_   s    r-   rg   z_InteractionPayloadSource.json}   rh   r,   N)rb   r=   rj   r+   r,   r-   rl   rl   z   s   „ Ùmä/r,   rl   c                ó"   — | j                  «       S r^   ©rg   ©Úresponses    r-   Ú_interaction_bodyrr   €   ó   € Ø�=‰=‹?Ðr,   c                ó$   — | j                  d«      S )NrH   ©Úget©Úrequest_datas    r-   Ú_proxy_server_requestry   „   s   € Ø×ÑÐ2Ó3Ð3r,   c                óF   — | j                  di «      j                  di «      S )NrH   rD   ru   rw   s    r-   Ú_proxy_request_headersr{   ˆ   s#   € Ø×ÑÐ2°BÓ7×;Ñ;¸IÀrÓJÐJr,   c                óz   — | j                   j                  di «      j                  di «      j                  di «      S )NÚlitellm_paramsrM   rD   )ra   rv   )Úlogging_objs    r-   Ú_logged_request_headersr   Œ   s9   € Ø×)Ñ)×-Ñ-Ð.>ÀÓC×GÑGÈ
ÐTVÓW×[Ñ[Ð\eÐgiÓjÐjr,   c                ó"   — | j                  «       S r^   ro   rp   s    r-   Ú_token_payloadr�   �   rs   r,   c                ó&   — | j                  ||«      S r^   ru   )rD   ÚkeyÚdefaults      r-   Ú_header_valuer…   ”   s   € Ø�;‰;�s˜GÓ$Ð$r,   c                ój   — t        | «      }|j                  r|j                  j                  d«      ryy)z5Checks whether the connection is to the SaaS platformzhiddenlayer.aiTF)r   ÚhostnameÚendswith)ÚhostÚos     r-   Úis_saasr‹   ˜   s,   € ô ˜‹~€Aà‡z‚z�a—j‘j×)Ñ)Ð*:Ô;Øàr,   c                ó*  — | › d�}t        j                  |t        ||«      |¬«      }|j                  s%t	        d|j
                  › d|j                  › �«      ‚d|j                  «       vrt	        d|j                  «       › �«      ‚t        |«      d   S )Nz+/oauth2/token?grant_type=client_credentials)ÚauthÚtimeoutzBUnable to get authentication credentials for the HiddenLayer API: z: Úaccess_tokenzUUnable to get authentication credentials for the HiddenLayer API - invalid response: )	ÚrequestsÚpostr   ÚokÚRuntimeErrorÚstatus_codeÚtextrg   r�   )Úauth_urlÚapi_idÚapi_keyrŽ   Ú	token_urlÚresps         r-   Ú_get_jwtr›   £   s¢   € Ø"˜Ð#NÐO€Iä—-‘- 	´¸fÀgÓ0NÐX_Ô`€Dà�7Š7ÜØPÐQU×QaÑQaÐPbÐbdÐei×enÑenÐdoÐpó
ð 	
ð ˜TŸY™Y›[Ñ(ÜØcÐdh×dmÑdmÓdoÐcpÐqó
ð 	
ô ˜$Ó Ñ/Ð/r,   c                  ó¬   ‡ — e Zd ZdZedd„«       Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d	ˆ fd„Ze	 d
	 	 	 	 	 	 	 	 	 dd„«       Z	 	 	 	 	 	 	 	 	 	 dd„Z	e
dd„«       Zˆ xZS )ÚHiddenlayerGuardrailú9Custom guardrail wrapper for HiddenLayer's safety checks.c                óB   — t         j                  t         j                  gS r^   )r   Úpre_callÚ	post_call)Úclss    r-   Úget_supported_event_hooksz.HiddenlayerGuardrail.get_supported_event_hooks¸   s    € ô  ×(Ñ(Ü×)Ñ)ð
ð 	
r,   c                ó¦  •‡ ‡— |j                  dt        ‰ j                  «       «      «       |xs t        j                  d«      ‰ _        |xs t        j                  d«      ‰ _        |xs t        j                  d«      xs d‰ _        d ‰ _        ‰xs t        j                  d«      xs dŠt        ‰ j                  «      r`‰ j
                  st        d«      ‚‰ j                  st        d	«      ‚t        ‰‰ j
                  ‰ j                  ¬
«      ‰ _        ˆˆ fd„‰ _        t        t        j                  ¬«      ‰ _        t#        ‰‰ �H  di |¤Ž y )NÚsupported_event_hooksÚHIDDENLAYER_CLIENT_IDÚHIDDENLAYER_CLIENT_SECRETÚHIDDENLAYER_API_BASEúhttps://api.hiddenlayer.aiÚHIDDENLAYER_AUTH_URLúhttps://auth.hiddenlayer.aiúC`api_id` cannot be None when using the SaaS version of HiddenLayer.úD`api_key` cannot be None when using the SaaS version of HiddenLayer.©r–   r—   r˜   c                 óH   •— t        ‰ ‰j                  ‰j                  ¬«      S ©Nr®   ©r›   Úhiddenlayer_client_idÚhiddenlayer_client_secret©r–   r`   s   €€r-   ú<lambda>z/HiddenlayerGuardrail.__init__.<locals>.<lambda>Û   ó!   ø€ ¬HØ!Ø×1Ñ1Ø×6Ñ6ô-€ r,   ©Úllm_providerr+   )Ú
setdefaultÚlistr£   ÚosÚgetenvr²   r³   Úapi_baseÚ	jwt_tokenr‹   r“   r›   Úrefresh_jwt_funcr   r   ÚGuardrailCallbackÚ_http_clientÚsuperÚ__init__©r`   r—   r˜   r½   r–   ÚkwargsÚ	__class__s   `   ` €r-   rÃ   zHiddenlayerGuardrail.__init__¿   s  ú€ ð 	×ÑÐ1´4¸×8VÑ8VÓ8XÓ3YÔZØ%+Ò%Q¬r¯y©yÐ9PÓ/QˆÔ"Ø)0Ò)Z´B·I±IÐ>YÓ4ZˆÔ&Ø Òe¤B§I¡IÐ.DÓ$EÒeÐIeˆŒØˆŒàÒaœrŸy™yÐ)?Ó@ÒaÐDaˆä�4—=‘=Ô!Ø×-Ò-Ü"Ð#hÓiÐià×1Ò1Ü"Ð#iÓjÐjä%Ø!Ø×1Ñ1Ø×6Ñ6ôˆDŒNô
%ˆDÔ!ô 3Ô@T×@fÑ@fÔgˆÔÜ‰ÑÑ"˜6Ó"r,   c              ƒ  óf  K  — |r|j                   r|j                   nd}d|i}t        |«      }|s|r|j                  rt        |«      }|j	                  d«      xs d|d<   |j	                  d«      }|j	                  d«      x}	rQ|	d   }
| j                  ||d	|
j	                  d
d«      t        |
j	                  dd«      «      dœgi|«      ƒ d{  –—† }n;|j	                  d«      x}r&| j                  ||d	d|d   dœgi|«      ƒ d{  –—† }ni }|j	                  di «      j	                  d«      t        j                  k(  rŒ|j	                  dg «      D �cg c]&  }|j	                  d«      sŒ|j	                  dd«      ‘Œ( }}|j	                  di «      j	                  d«      }t        ddt        j                  j                  ||dœ¬«      ‚|j	                  di «      j	                  d«      t        j                  k(  �r|j	                  di «      }|j	                  d«      rw|dk(  rr|d   d	   d   d   }t        |t        «      rC|D �cg c]-  }t        |t         «      sŒ|j	                  d«      dk(  sŒ)|d   ‘Œ/ }}|r|ndg|d<   n|g|d<   |d   d	   |d<   |j	                  d «      rm|d!k(  rh|d    d	   d   d   }t        |t        «      rD|D �cg c]-  }t        |t         «      sŒ|j	                  d«      dk(  sŒ)|d   ‘Œ/ }}|r|ndg|d<   |S |g|d<   |S 7 �ŒL7 �Œc c}w c c}w c c}w ­w)"úMValidate (and optionally redact) text via HiddenLayer before/after LLM calls.ÚunknownÚmodelúhl-requester-idÚLiteLLMÚrequester_idzhl-project-idÚstructured_messageséÿÿÿÿr;   ÚroleÚuserr7   Ú ©rÐ   r7   NÚtextsr>   r$   r?   r3   r1   r%   é�  úViolated guardrail policy)ÚerrorÚhiddenlayer_guardrail_responseÚblock_reasonsr%   ©r”   Údetailr@   ÚinputÚrequestÚtyper•   Úoutputrq   )rÊ   r{   ra   r   rv   Ú_call_hiddenlayerr#   r   ÚBLOCKr   r   ÚBLOCK_MESSAGEÚvalueÚREDACTÚ
isinstancerº   Údict)r`   Úinputsrx   Ú
input_typer~   Ú
model_nameÚhl_request_metadatarD   Ú
project_idÚscan_paramsÚlast_msgÚresultr•   ÚentryÚdetected_reasonsr%   r@   Úlast_contentÚitemrÔ   s                       r-   Úapply_guardrailz$HiddenlayerGuardrail.apply_guardrailä   s~  è ø€ ñ 2=À×ARÒAR˜K×-Ò-ÐXaˆ
Ø&-¨zÐ%:Ðô )¨Ó6ˆÙ™;¨;×+IÒ+IÜ-¨kÓ:ˆGà.5¯k©kÐ:KÓ.LÒ.YÐPYÐ˜NÑ+Ø#ŸK™K¨Ó8ˆ
à Ÿ*™*Ð%:Ó;Ð;ˆ;Ð;Ø)¨"™oˆHØ15×1GÑ1GØØ#àà$,§L¡L°¸Ó$@Ü'*¨8¯<©<¸	À2Ó+FÓ'Gñð!ðð ó2÷ ,‰Fð —Z‘Z Ó(Ð(ˆTÐ(Ø×1Ñ1ØØ#Ø v¸$¸r¹(ÑCÐDÐEØó	÷ ‰Fð ˆFà�:‰:�l BÓ'×+Ñ+¨HÓ5Ô9J×9PÑ9PÒPà:@¿*¹*ÀZÐQSÓ:Tö'Ø16ÐX]×XaÑXaÐblÕXm�—	‘	˜& )Õ,ð'Ðð 'ð #)§*¡*¨\¸2Ó">×"BÑ"BÀ>Ó"RˆLÜØà8Ü6I×6WÑ6W×6]Ñ6]Ø%5Ø$0ñ	ôð ð �:‰:�l BÓ'×+Ñ+¨HÓ5Ô9J×9QÑ9QÓQØ#)§:¡:¨o¸rÓ#BˆMØ× Ñ  Ô)¨j¸IÒ.EØ,¨WÑ5°jÑAÀ"ÑEÀiÑP�Ü˜l¬DÔ1à1=öØ)-ÄÈDÔRVÕAWÐ\`×\dÑ\dÐekÓ\lÐpvÓ\v˜˜V›ð�Eð ñ 05¡e¸2¸$�F˜7’Oà'3 n�F˜7‘OØ0=¸gÑ0FÀzÑ0R�Ð,Ñ-à× Ñ  Ô*¨z¸ZÒ/GØ,¨XÑ6°zÑBÀ2ÑFÀyÑQ�Ü˜l¬DÔ1à1=öØ)-ÄÈDÔRVÕAWÐ\`×\dÑ\dÐekÓ\lÐpvÓ\v˜˜V›ð�Eð ñ 05¡e¸2¸$�F˜7‘Oð ˆð (4 n�F˜7‘Oàˆð{,ùðûò'ùò&ùòùso   ‚CL1ÃLÃ8L1Ä	LÄ
AL1ÅL"Å.L"ÆC
L1ÉL'É"L'É7L'É>AL1ËL,Ë*L,Ë?L,ÌL1ÌL1Ì"L1c              ƒ  ó  K  — d|i}|dk(  r||d<   n||d<   ddddœ}|r||d	<   | j                   rd
| j                   › �|d<   	 | j                  j                  | j                  › d�||¬«      ƒ d {  –—† }|j	                  «        t        |«      }t        j                  d|«       |S 7 Œ7# t        $ rÕ}	|	j                  j                  dk(  r}| j                   �qt        j                  d«       | j                  «       | _         d
| j                   › �|d<   | j                  j                  | j                  › d�||¬«      ƒ d {  –—†7  }n|	‚|j	                  «        t        |«      }t        j                  d|«       |cY d }	~	S d }	~	ww xY w­w)NrM   rÝ   rÜ   rß   úapplication/jsonÚlitellmÚ1©zContent-Typezhl-runtime-edge-providerz hl-runtime-edge-provider-versionzHL-Project-IdúBearer ÚAuthorizationz/detection/v1/interactions©rg   rD   úHiddenlayer reponse: %sé‘  údUnable to authenticate to Hiddenlayer, JWT token is invalid or expired, trying to refresh the token.)r¾   rÁ   r‘   r½   Úraise_for_statusrr   r   Údebugr   rq   r”   r¿   )
r`   rë   rM   Úpayloadrè   ÚdatarD   rq   rî   Úes
             r-   rà   z&HiddenlayerGuardrail._call_hiddenlayerB  s«  è ø€ ð +5°hÐ)?ˆà˜Ò"Ø#ˆD�ŠMà$ˆD�‰Nð /Ø(1Ø03ñ
ˆñ Ø'1ˆG�OÑ$à�>Š>Ø)0°·±Ð0@Ð'AˆG�OÑ$ð"	Ø!×.Ñ.×3Ñ3Ø—=‘=�/Ð!;Ð<ØØð 4ó ÷ ˆHð
 ×%Ñ%Ô'Ü+<¸XÓ+FˆFä ×&Ñ&Ð'@À&ÔIàˆMðùô ò 	ð �z‰z×%Ñ%¨Ò,°·±Ð1KÜ$×*Ñ*Øzôð "&×!6Ñ!6Ó!8�”Ø-4°T·^±^Ð4DÐ+E�˜Ñ(Ø!%×!2Ñ!2×!7Ñ!7Ø—}‘}�oÐ%?Ð@ØØ#ð "8ó "÷ ð ‘ð �à×%Ñ%Ô'Ü& xÓ0ˆFä ×&Ñ&Ð'@À&ÔIØ�Mûð-	üsU   ‚A FÁ.B+ Á1B)Á26B+ Â(FÂ)B+ Â+	F	Â4BFÅEÅ:FÅ>F	Å?FÆF	Æ	Fc                 ó   — ddl m}  | S ©Nr   ©ÚHiddenlayerGuardrailConfigModel©Ú:litellm.types.proxy.guardrails.guardrail_hooks.hiddenlayerr  r  s    r-   Úget_config_modelz%HiddenlayerGuardrail.get_config_model€  ó   € õ	
ð /Ð.r,   )rb   zlist[GuardrailEventHooks]©NNNN©r—   ú
str | Noner˜   r  r½   r  r–   r  rÅ   r   rb   ÚNoner^   ©
rç   r   rx   ræ   rè   úLiteral['request', 'response']r~   zLiteLLMLoggingObj | Nonerb   r   )
rë   r  rM   ri   r  z)Mapping[str, Sequence[Mapping[str, str]]]rè   r  rb   r=   ©rb   z,type[GuardrailConfigModel[BaseModel]] | None)r'   r(   r)   rZ   Úclassmethodr£   rÃ   r   ró   rà   Ústaticmethodr
  Ú__classcell__©rÆ   s   @r-   r�   r�   µ   s  ø„ ÙCàò
ó ð
ð "Ø"Ø#Ø#ð##àð##ð ð##ð ð	##ð
 ð##ð ð##ð 
õ##ðJ ð 15ð[à)ð[ð ð[ð 3ð	[ð
 .ð[ð 
#ò[ó ð[ðz<àð<ð $ð<ð ;ð	<ð
 3ð<ð 
ó<ð| ò/ó ô/r,   r�   c                  ó–   ‡ — e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Ze	 d	 	 	 	 	 	 	 	 	 d	d„«       Z	 	 	 	 	 	 	 	 d
d„Zedd„«       Z	ˆ xZ
S )ÚHiddenlayerGuardrailV2rž   c                óT  •‡ ‡— |xs t        j                  d«      ‰ _        |xs t        j                  d«      ‰ _        |xs t        j                  d«      xs d‰ _        d ‰ _        ‰xs t        j                  d«      xs dŠt        ‰ j                  «      r`‰ j                  st        d«      ‚‰ j                  st        d«      ‚t        ‰‰ j                  ‰ j                  ¬	«      ‰ _        ˆˆ fd
„‰ _	        t        t        j                  ¬«      ‰ _        t        ‰‰ �<  di |¤Ž y )Nr¦   r§   r¨   r©   rª   r«   r¬   r­   r®   c                 óH   •— t        ‰ ‰j                  ‰j                  ¬«      S r°   r±   r´   s   €€r-   rµ   z1HiddenlayerGuardrailV2.__init__.<locals>.<lambda>§  r¶   r,   r·   r+   )r»   r¼   r²   r³   r½   r¾   r‹   r“   r›   r¿   r   r   rÀ   rÁ   rÂ   rÃ   rÄ   s   `   ` €r-   rÃ   zHiddenlayerGuardrailV2.__init__Œ  s÷   ú€ ð &,Ò%Q¬r¯y©yÐ9PÓ/QˆÔ"Ø)0Ò)Z´B·I±IÐ>YÓ4ZˆÔ&Ø Òe¤B§I¡IÐ.DÓ$EÒeÐIeˆŒØˆŒàÒaœrŸy™yÐ)?Ó@ÒaÐDaˆä�4—=‘=Ô!Ø×-Ò-Ü"Ð#hÓiÐià×1Ò1Ü"Ð#iÓjÐjä%Ø!Ø×1Ñ1Ø×6Ñ6ôˆDŒNô
%ˆDÔ!ô 3Ô@T×@fÑ@fÔgˆÔÜ‰ÑÑ"˜6Ó"r,   c              ƒ  ó  K  — t        |«      }|s|r|j                  rt        |«      }d|vr5t        |«      }|�(d|v r$t	        t        «       «      |d   d<   |d   d   |d<   |j                  «       D ��ci c]6  \  }}|j                  «       j                  d«      sŒ&|j                  «       |“Œ8 }	}}d|	vrd|	d<   |dk(  r4|j                  d«      |j                  d	«      |j                  d
«      dœ}
nO|j                  d«      r&ddd|j                  d«      r|d   d   nddœddœgi}
n|j                  d«      x}r|}
ni }
| j                  |
||	«      ƒ d{  –—† }|j                  «       }d|i}|d   }t        |j                  dd«      j                  «       dk(  r(t        ddt        j                   j"                  dœ¬«      ‚g }|dk(  r·||d<   |j                  dg «      }|D ]”  }|j                  dd«      }t%        |t&        «      r\|D �cg c]-  }t%        |t(        «      sŒ|j                  d«      dk(  sŒ)|d   ‘Œ/ }}|sŒ`|j+                  d j-                  |«      «       Œ�|sŒ„|j+                  |«       Œ– ||d<   |S |d!k(  rO|j                  d«      r>|j                  di g«      }|d"   j                  d#i «      j                  dd«      g|d<   |S |d!k(  r|j                  d«      r||d<   |S c c}}w 7 �Œ£c c}w ­w)$rÈ   zhl-roundtrip-idNrD   zhl-rË   rÌ   rÝ   rÎ   rÊ   Útools)r;   rÊ   r  rÔ   rW   r   Ú	assistantrÒ   rÓ   Ústop)ÚindexrT   Úfinish_reasonÚ
tool_callsr>   zhl-runtime-actionÚblockrÕ   rÖ   )r×   rØ   rÚ   r;   r7   rÞ   r•   ú rq   rÏ   rT   )r{   ra   r   ry   r#   r   ÚitemsÚlowerÚ
startswithrv   rà   rg   r…   rD   r   r   râ   rã   rå   rº   ræ   ÚappendÚjoin)r`   rç   rx   rè   r~   rD   Ú	proxy_reqÚhÚvÚ
hl_headersr  r!  rq   rß   Úoutput_viewÚevaluated_outputÚ	new_textsÚmodified_messagesrT   r7   rò   Ú
text_partsÚredacted_choicess                          r-   ró   z&HiddenlayerGuardrailV2.apply_guardrail°  sN  è ø€ ô )¨Ó6ˆÙ™;¨;×+IÒ+IÜ-¨kÓ:ˆGð  GÑ+Ü4°\ÓBˆIØÐ$¨°iÑ)?Ü:=¼e»g»,�	˜)Ñ$Ð%6Ñ7Ø-6°yÑ-AÐBSÑ-T�Ð)Ñ*à6=·m±m³o×e©d¨a°ÈÏÉË×I]ÑI]Ð^cÕId˜QŸW™W›Y¨™\Ðeˆ
Ñeà JÑ.Ø,5ˆJÐ(Ñ)ð ˜Ò"à"ŸJ™JÐ'<Ó=ØŸ™ GÓ,ØŸ™ GÓ,ñ‰Gð �z‰z˜'Ô"àà%&à(3ØBHÇ*Á*ÈWÔBU¨F°7©O¸AÒ,>Ð[]ñ(ð .4ñð	 ð‘ð  &Ÿz™z¨,Ó7Ð7�Ð7Ø$‘à�à $× 6Ñ 6°wÀ
ÈJÓ W×WˆØ Ÿ™›ˆØ8DÀfÐ7MˆØ"-¨lÑ";Ðä˜×)Ñ)Ð+>ÀÓC×IÑIÓKÈwÒVÜØà8Ü6I×6WÑ6W×6]Ñ6]ñôð ð ')ˆ	Ø˜Ò"Ø,2ˆFÐ(Ñ)àL\×L`ÑL`ÐakÐmoÓLpÐØ,ò 	.�Ø!Ÿ+™+ i°Ó4�Ü˜g¤tÔ,à18ö"Ø)-¼JÀtÌTÕ<RÐW[×W_ÑW_Ð`fÓWgÐkqÓWq˜˜V›ð"�Jð "ò "Ø!×(Ñ(¨¯©°*Ó)=Õ>ÚØ×$Ñ$ WÕ-ð	.ð (ˆF�7‰Oð ˆð ˜:Ò%¨&¯*©*°WÔ*=ØDT×DXÑDXÐYbÐegÐdhÓDiÐØ/°Ñ3×7Ñ7¸	À2ÓF×JÑJÈ9ÐVXÓYÐZˆF�7‰Oð ˆð ˜:Ò%¨&¯*©*°\Ô*BØ#)ˆF�<Ñ àˆùóK fð> Xûò,"ùsQ   ‚A3LÁ5'K7ÂK7Â0B*LÅK=ÅB6LÈL È'L È<L ÉLÉ#LÉ,BLÌ Lc              ƒ  óø  K  — |dk(  rd}nd}ddddœ}| j                   rd| j                   › �|d	<   |j                  |«       	 | j                  j                  | j                  › d
|› �||¬«      ƒ d {  –—† }|j                  «        t        j                  d|«       |S 7 Œ,# t        $ rÌ}|j                  j                  dk(  r| j                   �st        j                  d«       | j                  «       | _         d| j                   › �|d	<   | j                  j                  | j                  › d
|› �||¬«      ƒ d {  –—†7  }n|‚|j                  «        t        j                  d|«       |cY d }~S d }~ww xY w­w)NrÝ   z detection/v2/request-evaluationsz!detection/v2/response-evaluationsrõ   rö   Ú2rø   rù   rú   ú/rû   rü   rý   rþ   )r¾   ÚupdaterÁ   r‘   r½   rÿ   r   r   r   rq   r”   r¿   )r`   r  rè   r,  ÚpathrD   rq   r  s           r-   rà   z(HiddenlayerGuardrailV2._call_hiddenlayer  sŠ  è ø€ ð ˜Ò"Ø5‰Dà6ˆDð /Ø(1Ø03ñ
ˆð
 �>Š>Ø)0°·±Ð0@Ð'AˆG�OÑ$à�‰�zÔ"ð 	Ø!×.Ñ.×3Ñ3Ø—=‘=�/  4 &Ð)ØØð 4ó ÷ ˆHð
 ×%Ñ%Ô'ä ×&Ñ&Ð'@À(ÔKàˆOðùô ò 	ð �z‰z×%Ñ%¨Ò,°·±Ð1KÜ$×*Ñ*Øzôð "&×!6Ñ!6Ó!8�”Ø-4°T·^±^Ð4DÐ+E�˜Ñ(Ø!%×!2Ñ!2×!7Ñ!7Ø—}‘}�o Q t fÐ-Ø Ø#ð "8ó "÷ ð ‘ð �à×%Ñ%Ô'ä ×&Ñ&Ð'@À(ÔKØ�Oûð+	üsU   ‚A E:Á0B" Á3B Á4+B" ÂE:Â B" Â"	E7Â+BE2Ä<D?Ä=/E2Å,E7Å-E:Å2E7Å7E:c                 ó   — ddl m}  | S r  r  r  s    r-   r
  z'HiddenlayerGuardrailV2.get_config_modelH  r  r,   r  r  r^   r  )r  Ú_HiddenlayerV2Payloadrè   r  r,  údict[str, str]rb   zhttpx.Responser  )r'   r(   r)   rZ   rÃ   r   ró   rà   r  r
  r  r  s   @r-   r  r  ‰  så   ø„ ÙCð "Ø"Ø#Ø#ð"#àð"#ð ð"#ð ð	"#ð
 ð"#ð ð"#ð 
õ"#ðH ð 15ð^à)ð^ð ð^ð 3ð	^ð
 .ð^ð 
#ò^ó ð^ð@5à&ð5ð 3ð5ð #ð	5ð
 
ó5ðn ò/ó ô/r,   r  )rq   rl   rb   r=   )rx   rG   rb   z_ProxyServerRequest | None)rx   rG   rb   r:  )r~   r\   rb   r:  )rq   re   rb   ri   )rD   ri   rƒ   r#   r„   r#   rb   r#   )r‰   r#   rb   r2   )rŽ   Úfloatrb   r#   )TÚ
__future__r   r»   Úcollections.abcr   r   Útypingr   r   r   r	   r
   r   Úurllib.parser   Úuuidr   Úhttpxr�   Úfastapir   r   Úrequests.authr   Útyping_extensionsr   Úlitellm._loggingr   Ú%litellm.integrations.custom_guardrailr   r   Ú*litellm.litellm_core_utils.litellm_loggingr   ÚLiteLLMLoggingObjÚ&litellm.llms.custom_httpx.http_handlerr   r   Úlitellm.types.guardrailsr   Úlitellm.types.llms.openair   r	  r   r   Úlitellm.types.utilsr   r   Úpydanticr   Ú3litellm.types.proxy.guardrails.guardrail_hooks.baser   r    r*   r"   r0   r5   r:   r=   rB   rG   rJ   rL   rO   rQ   rS   rV   rY   r#   Úobjectrº   r9  r\   re   rl   rr   ry   r{   r   r�   r…   r‹   r›   r�   r  r+   r,   r-   ú<module>rP     sÁ  ðÞ "ã 	ß -ß J× JÝ !Ý ã Û Ý !Ý !Ý 'Ý &å 1÷õ T÷õ 9Ý A÷÷ YáÝ"åXð '+Ð �|Ó *ô˜Y¨eõ ô
 	°õ ô
5 )ô 5ô:˜yô :ô:˜9¨Eõ :ô&˜)¨5õ &ô8˜i¨uõ 8ô&˜)¨5õ &ô,˜y°õ ,ô5 	°õ 5ô 	°õ ô1˜¨%õ 1ô4˜9¨Eõ 4ô
/˜yô /ð    V Ñ,¨tÐ4OÑ/PÑPÐSWÐXuÑSvÑvÐ ôP˜ô Pô-˜(ô -ô0 ô 0óó4óKókóó%óð :Oô 0ô$Q/˜?ô Q/ôhE/˜_õ E/r,   