Ë
    tPêj™  ã                   ób  — U d dl Z d dl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 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mZmZ d dl m!Z!m"Z" d dl#m$Z$m%Z%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. dZ/e	e0d<   de1dee2e1f   dz  fd„Z3de1dee1   dz  fd„Z4 G d„ de«      Z5y)é    N)ÚAsyncGeneratorÚAsyncIterableÚMappingÚSequence)ÚAnyÚFinalÚLiteral)ÚHTTPException)ÚChatCompletionToolParam)Úverbose_proxy_logger)Ú	DualCache)ÚGuardrailRaisedException)ÚCustomGuardrailÚlog_guardrail_information)ÚUserAPIKeyAuth©Ú*add_guardrail_to_applied_guardrails_header)Ú"anthropic_sse_chunks_from_responseÚassemble_anthropic_sse_streamÚis_raw_sse_stream)ÚGuardrailEventHooksÚLitellmParams)ÚPermissionErrorÚToolPermissionRuleÚ
ToolResult)ÚCallTypesLiteralÚChatCompletionMessageToolCallÚChoicesÚFunctionÚLLMResponseTypesÚModelResponseÚModelResponseStreamÚtool_permissionÚGUARDRAIL_NAMEÚvalueÚreturnc                 ó*   — t        | t        «      r| S dS )z8Return ``value`` as an opaque mapping when it is a dict.N)Ú
isinstanceÚdict©r%   s    ú}/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/guardrails/guardrail_hooks/tool_permission.pyÚ_object_mappingr,   ,   ó   € ä˜u¤dÔ+ˆ5Ð5°Ð5ó    c                 ó*   — t        | t        «      r| S dS )z9Return ``value`` as an opaque sequence when it is a list.N)r(   Úlistr*   s    r+   Ú_object_listr1   1   r-   r.   c                   óÆ  ‡ — e Zd Z	 	 	 dIdee   dz  ded   ded   fˆ fd„Zdee   dz  d	dfd
„Zde	ez  d	dfˆ fd„Z
ed„ «       Zed	ee   fd„«       Zdej"                  dz  dedz  d	efd„Zddœdededz  dedz  d	eeef   fd„Z	 dJdedz  dedz  d	eeedz  edz  f   fd„Zded	eeeef   dz  edz  f   fd„Z	 dKdededeeee   f   ded	df
d„Zdeeef   dededz  d	eeedz  f   fd„Zded	eeedz  edz  f   fd „Z ed!ed"ed	efd#„«       Z!ed$ed	efd%„«       Z"d&ed$ed	edz  fd'„Z#d(e$d	ee   fd)„Z%eded	edz  fd*„«       Z&ed(ed	eed+f   dz  fd,„«       Z'd-eed+f   d	eed+f   fd.„Z(d/e)e   d	eeee*f   d+f   fd0„Z+d(ed-eed+f   d1eeee*f   d+f   d	dfd2„Z,d3ed	eedz  edz  f   fd4„Z-d5ed	edz  fd6„Z.d7ed	edz  fd8„Z/d7ed	edz  fd9„Z0d7ed	eeeedz  f      fd:„Z1d7ed;ee   fd<„Z2ded=e*d	e3fd>„Z4d(e$d1e)eee*f      d	dfd?„Z5e6d@e7dAe8d7edBe9d	e:ez  ez  dz  f
dC„«       Z;e6d7ed@e7d(e<fdD„«       Z=d@e7d(e>e?   dEed	e@e?df   fdF„ZAdGe$d	eeee*f   d+f   fdH„ZBˆ xZCS )LÚToolPermissionGuardrailNÚblockÚrulesÚdefault_action)ÚdenyÚallowÚon_disallowed_action)r4   Úrewritec                 óœ  •— |j                  dt        | j                  «       «      «       t        ‰| �  di |¤Ž | j                  |«       t        |t        «      r|j                  «       n|| _	        t        |t        «      r|j                  «       n|| _
        t        j                  dt        | j                  «      | j                  «       y)a0  
        Initialize the Tool Permission Guardrail

        Args:
            rules: List of permission rules
            default_action: Default action when no rule matches ("allow" or "deny")
            on_disallowed_action:
            **kwargs: Additional arguments passed to CustomGuardrail
        Úsupported_event_hookszGTool Permission Guardrail initialized with %d rules, default_action: %sN© )Ú
setdefaultr0   Úget_supported_event_hooksÚsuperÚ__init__Ú_load_rulesr(   ÚstrÚlowerr6   r9   r   ÚdebugÚlenr5   )Úselfr5   r6   r9   ÚkwargsÚ	__class__s        €r+   rA   z ToolPermissionGuardrail.__init__7   s¬   ø€ ð" 	×ÑÐ1´4¸×8VÑ8VÓ8XÓ3YÔZä‰ÑÑ"˜6Ò"à×Ñ˜Ôô 9CÀ>ÔSVÔ8W˜n×2Ñ2Ô4Ð]kˆÔä,6Ð7KÌSÔ,QÐ ×&Ñ&Ô(ÐWkð 	Ô!ô 	×"Ñ"ØUÜ�—
‘
‹OØ×Ñõ	
r.   r&   c           	      ó€  — g }i }i }|xs g D ]õ  }t        |t        «      r|n
t        d	i |¤Ž}dddœ}|j                  �#	 t        j                  |j                  «      |d<   |j                  �#	 t        j                  |j                  «      |d<   i }	|j                  xs i j                  «       D ]  \  }
}	 t        j                  |«      |	|
<   Œ  |j                  |«       |||j                  <   |	sŒç|	||j                  <   Œ÷ || _        || _        || _        y# t        j
                  $ r!}t        d|j                  › d|› �«      |‚d}~ww xY w# t        j
                  $ r!}t        d|j                  › d|› �«      |‚d}~ww xY w# t        j
                  $ r!}t        d|j                  › d|› �«      |‚d}~ww xY w)
aë  Parse ``rules`` and (re)build the compiled target/pattern lookups.

        ``self.rules`` plus ``_compiled_rule_targets`` / ``_compiled_rule_patterns``
        are the state every matching path reads. Centralizing the build here lets
        both ``__init__`` and ``update_in_memory_litellm_params`` recompile from a
        single source of truth, so an in-place update (PUT /guardrails, immediate
        sync) reflects rule changes instead of keeping the construction-time maps.
        N©Ú	tool_nameÚ	tool_typerL   z%Invalid regex for tool_name in rule 'z': rM   z%Invalid regex for tool_type in rule 'z2Invalid regex in allowed_param_patterns for rule 'r=   )r(   r   rL   ÚreÚcompileÚerrorÚ
ValueErrorÚidrM   Úallowed_param_patternsÚitemsÚappendr5   Ú_compiled_rule_targetsÚ_compiled_rule_patterns)rG   r5   Úparsed_rulesÚcompiled_targetsÚcompiled_patternsÚ	rule_itemÚruleÚtarget_patternsÚexcÚrule_patternsÚpathÚpatterns               r+   rB   z#ToolPermissionGuardrail._load_rulesZ   së  € ð 9;ˆØKMÐØEGÐàš "ò 	;ˆIÜ *¨9Ô6HÔ I‘9ÔOaÑOnÐdmÑOnˆDð "Ø!ñ=ˆOð �~‰~Ð)ðiÜ35·:±:¸d¿n¹nÓ3M�O KÑ0ð �~‰~Ð)ðiÜ35·:±:¸d¿n¹nÓ3M�O KÑ0ð 46ˆMØ"&×"=Ñ"=Ò"CÀ×!JÑ!JÓ!Lò v‘��gðvÜ*,¯*©*°WÓ*=�M $Ò'ðvð ×Ñ Ô%Ø(7Ð˜TŸW™WÑ%ÚØ-:Ð! $§'¡'Ò*ð9	;ðB "ˆŒ
Ø&6ˆÔ#Ø'8ˆÕ$øô3 —x‘xò iÜ$Ð'LÈTÏWÉWÈIÐUXÐY\ÐX]Ð%^Ó_ÐehÐhûðiûô
 —x‘xò iÜ$Ð'LÈTÏWÉWÈIÐUXÐY\ÐX]Ð%^Ó_ÐehÐhûðiûô —x‘xò vÜ$Ð'YÐZ^×ZaÑZaÐYbÐbeÐfiÐejÐ%kÓlÐruÐuûðvúsG   ¿"DÁ."EÂ7F	ÄEÄ.E
Å
EÅFÅ%FÆFÆ	F=ÆF8Æ8F=Úlitellm_paramsc                 ó   •— | j                   }t        |t        «      r(|}|j                  «       D ]  \  }}t	        | ||«       Œ nt
        ‰	| �  |«       t        |«      }|j                  d«      }|�	 | j                  |«       n|| _         |j                  d«      }t        |t        «      r|j                  «       | _        |j                  d«      }t        |t        «      r|j                  «       | _        yy# t        $ r	 || _         ‚ w xY w)aû  Apply updated params in place, rebuilding the compiled rule state.

        The base implementation only ``setattr``s raw fields, which would leave
        ``_compiled_rule_targets`` / ``_compiled_rule_patterns`` (built in
        ``__init__``) stale, so a guardrail updated without reinitialization would
        keep enforcing the old ruleset. Recompile here so PUT /guardrails and the
        immediate in-memory sync take effect, mirroring the PresidioGuardrail
        override of this method.
        r5   Nr6   r9   )r5   r(   r)   rT   Úsetattrr@   Úupdate_in_memory_litellm_paramsÚvarsÚgetrB   Ú	ExceptionrC   rD   r6   r9   )
rG   rb   Úprevious_rulesÚparamsÚkeyr%   r5   r6   r9   rI   s
            €r+   re   z7ToolPermissionGuardrail.update_in_memory_litellm_paramsŒ   s  ø€ ð !%§
¡
ˆÜ�n¤dÔ+Ø#ˆFØ$Ÿl™l›nò *‘
��UÜ˜˜c 5Õ)ñ*ô ‰GÑ3°NÔCÜ˜.Ó)ˆFð —z‘z 'Ó*ˆØÐðØ× Ñ  Õ'ð (ˆDŒJØ &§
¡
Ð+;Ó <ˆÜ�n¤cÔ*Ø"0×"6Ñ"6Ó"8ˆDÔØ&,§j¡jÐ1GÓ&HÐÜÐ*¬CÔ0Ø(<×(BÑ(BÓ(DˆDÕ%ð 1øô ò ð
 ,�”
Øðús   Á4C; Ã;Dc                  ó   — ddl m}  | S )Nr   ©Ú"ToolPermissionGuardrailConfigModel)Ú>litellm.types.proxy.guardrails.guardrail_hooks.tool_permissionrn   rm   s    r+   Úget_config_modelz(ToolPermissionGuardrail.get_config_model»   s   € õ	
ð 2Ð1r.   c                 óB   — t         j                  t         j                  gS ©N)r   Úpre_callÚ	post_call)Úclss    r+   r?   z1ToolPermissionGuardrail.get_supported_event_hooksÃ   s    € ô  ×(Ñ(Ü×)Ñ)ð
ð 	
r.   ra   r%   c                 óB   — |€y|€yt        |j                  |«      «      S )NTF)ÚboolÚ	fullmatch)rG   ra   r%   s      r+   Ú_matches_regexz&ToolPermissionGuardrail._matches_regexÊ   s(   € Øˆ?ØØˆ=ØÜ�G×%Ñ% eÓ,Ó-Ð-r.   )rM   r\   rL   rM   c                óB  — | j                   j                  |j                  i «      }|j                  d«      }|j                  d«      }|j                  d u}|j                  d u}|r| j                  ||«      nd}	|r| j                  ||«      nd}
|	xr |
}|xr |	}||fS )NrL   rM   T)rV   rg   rR   rL   rM   ry   )rG   r\   rL   rM   r]   Úname_patternÚtype_patternÚname_requiredÚtype_requiredÚname_matchedÚtype_matchedÚoverall_matchÚshould_check_paramss                r+   Ú_rule_matches_toolz*ToolPermissionGuardrail._rule_matches_toolÑ   s«   € ð "&×!<Ñ!<×!@Ñ!@ÀÇÁÈ"Ó!MˆØ-×1Ñ1°+Ó>ˆØ-×1Ñ1°+Ó>ˆà#Ÿ~™~°TÐ9ˆØ#Ÿ~™~°TÐ9ˆáN[˜d×1Ñ1°,À	ÔJÐaeˆÙN[˜d×1Ñ1°,À	ÔJÐaeˆà+Ò<°ˆØ%2Ò%C°|ÐàÐ1Ð1Ð1r.   c                 ó8  — t        j                  d|xs |«       | j                  D ]˜  }| j                  |||¬«      \  }}|sŒ|j                  dk(  }|xs |xs d}d|› d|rdnd› d	|j
                  › d
�}| j                  ||xs ||j
                  dœ¬«      }	t        j                  |	«       ||j
                  |	fc S  | j                  dk(  }|xs |xs d}d|› d|rdnd› d�}| j                  ||xs |ddœ¬«      }	t        j                  |	«       |d|	fS )a  
        Check if a tool is allowed based on the configured rules

        Args:
            tool_name: Name of the tool to check
            tool_type: Type of the tool to check

        Returns:
            Tuple of (is_allowed, rule_id, message)
        z Checking permission for tool: %srK   r8   Úunknown_toolúTool 'ú' ÚallowedÚdeniedú
 by rule 'ú'©rL   Úrule_id©ÚdefaultÚcontextú by default actionN)r   rE   r5   rƒ   ÚdecisionrR   Úrender_violation_messager6   )
rG   rL   rM   r\   ÚmatchesÚ_Ú
is_allowedÚtool_identifierÚdefault_messageÚmessages
             r+   Ú_check_tool_permissionz.ToolPermissionGuardrail._check_tool_permissionç   sr  € ô 	×"Ñ"Ð#EÀyÒG]ÐT]Ô^ð —J‘Jò 	4ˆDØ×0Ñ0ØØ#Ø#ð 1ó ‰JˆG�Qò
 Ø!Ÿ]™]¨gÑ5�
Ø"+Ò"J¨yÒ"J¸N�à˜_Ð-¨R¹Z±	ÈXÐ/VÐV`Ðae×ahÑahÐ`iÐijÐkð  ð ×7Ñ7Ø+à%.Ò%A°/Ø#'§7¡7ñð 8ó �ô %×*Ñ*¨7Ô3Ø! 4§7¡7¨GÐ3Ò3ð)	4ð. ×(Ñ(¨GÑ3ˆ
Ø#ÒB yÒB°NˆØ" ?Ð"3°2Á:±iÐS[Ð5\Ð\nÐoˆØ×/Ñ/Ø#à&Ò9¨/Øñð 0ó 
ˆô 	×"Ñ" 7Ô+Ø˜4 Ð(Ð(r.   Ú	tool_callc                 óÐ  — t        |j                  dd «      }|syi }	 t        |t        «      rt	        j
                  |«      }nt        |t        «      r|}nyt        |t        «      r|d fS t        j                  d|j                  j                  «       y# t        j                  t        f$ r5}t        j                  d|j                  j                  |«       Y d }~yd }~ww xY w)NÚ	arguments)Nzmissing arguments)Nzarguments must be a JSON objectzETool Permission Guardrail: Failed to decode arguments for tool %s: %s)Nzarguments could not be parsedzCTool Permission Guardrail: Rejecting non-dict arguments for tool %s)ÚgetattrÚfunctionr(   rC   ÚjsonÚloadsr)   ÚJSONDecodeErrorÚ	TypeErrorr   ÚwarningÚnamerE   )rG   r›   r�   Úparsed_argumentsr^   s        r+   Ú_parse_tool_call_argumentsz2ToolPermissionGuardrail._parse_tool_call_arguments  s×   € ô # 9×#5Ñ#5°{ÀDÓIˆ	ÙØ,à#%Ðð	9Ü˜)¤SÔ)Ü#'§:¡:¨iÓ#8Ñ Ü˜I¤tÔ,Ø#,Ñ à>ô Ð&¬Ô-Ø# TÐ)Ð)ä×"Ñ"ØQØ×Ñ×#Ñ#ô	
ð 7øô ×$Ñ$¤iÐ0ò 	9Ü ×(Ñ(ØWØ×"Ñ"×'Ñ'Øôô
 9ûð	9ús   ž9B ÂC%Â0+C Ã C%Úcurrent_pathÚ	collectedÚdepthc                 ó^  — ddl m} ||kD  ry t        |«      }t        |«      }|�;|j	                  «       D ]'  \  }}	|r|› d|› �n|}
| j                  |	|
||dz   «       Œ) y |�(|r|› d�nd}|D ]  }| j                  ||||dz   «       Œ y |sy |j                  |g «      j                  |«       y )Nr   )ÚDEFAULT_MAX_RECURSE_DEPTHú.é   z[])Úlitellm.constantsr¬   r,   r1   rT   Ú_collect_argument_pathsr>   rU   )rG   r%   r¨   r©   rª   r¬   Úmapping_valueÚ
list_valuerk   Ú	sub_valueÚ	next_pathÚ	list_pathÚitems                r+   r°   z/ToolPermissionGuardrail._collect_argument_paths=  sÞ   € õ 	@àÐ,Ò,Øä.¨uÓ5ˆÜ(¨Ó/ˆ
ØÐ$Ø"/×"5Ñ"5Ó"7ò Y‘��YÙ7C˜|˜n¨A¨c¨UÑ3È�	Ø×,Ñ,¨Y¸	À9ÈeÐVWÉiÕXñYð Ð#Ù6B , ¨rÑ2ÈˆIØ"ò T�Ø×,Ñ,¨T°9¸iÈÐQRÉÕSñTñ  ØØ× Ñ  ¨rÓ2×9Ñ9¸%Õ@r.   r�   c                óŠ  — | j                   j                  |j                  «      }|syi }| j                  |d|«       |j	                  «       D ]s  \  }}|j                  |«      }|sdd|› d|j                  › d�fc S |D ]?  }	|j                  t        |	«      «      rŒdd|	› d|› d	|j                  › d
|xs d› d�	fc c S  Œu y)N)TNÚ FzMissing value for path 'z' required by rule 'r‹   zValue 'z' for path 'z"' does not match allowed pattern 'z' for tool 'r…   )rW   rg   rR   r°   rT   rx   rC   ra   )
rG   r�   r\   rL   rZ   Úpath_value_mapr`   Úcompiled_patternÚvaluesÚ	raw_values
             r+   Ú_patterns_match_for_rulez0ToolPermissionGuardrail._patterns_match_for_ruleX  sû   € ð $(×#?Ñ#?×#CÑ#CÀDÇGÁGÓ#LÐÙ Øà9;ˆØ×$Ñ$ Y°°NÔCà&7×&=Ñ&=Ó&?ò 	Ñ"ˆDÐ"Ø#×'Ñ'¨Ó-ˆFÙàØ.¨t¨fÐ4HÈÏÉÈ	ÐQRÐSðò ð $ò �	Ø'×1Ñ1´#°i³.ÕAàØ! ) ¨L¸¸ð ?Ø-×5Ñ5Ð6°lÀ9ÒC^ÐP^ÐB_Ð_`ðbðô ñð	ð r.   c                 óÆ  — |j                   r|j                   j                  nd }t        |dd «      }|s|s| j                  dk(  d d fS |xs |xs d}d }| j                  D �]B  }| j                  |||¬«      \  }}|sŒ|j                  rÁ|r¿| j                  |«      \  }	}
|
rGd|› d|
› d|j                  › d�}| j                  |||j                  d	œ¬
«      }d|j                  |fc S |	sDd|› d|j                  › d�}| j                  |||j                  d	œ¬
«      }d|j                  |fc S | j                  |	||¬«      \  }}|s|}Œë|j                  dk(  }d|› d|rdnd› d|j                  › d�}| j                  |||j                  d	œ¬
«      }||j                  |fc S  | j                  dk(  }|r|s|nd|› d|rdnd› d�}| j                  ||d d	œ¬
«      }|d |fS )NÚtyper8   r…   rK   r†   r‡   z required by rule 'r‹   rŒ   rŽ   Fz)' is missing arguments required by rule ')r�   r\   rL   rˆ   r‰   rŠ   r‘   )rŸ   r¥   rž   r6   r5   rƒ   rS   r§   rR   r“   r½   r’   )rG   r›   rL   rM   r—   Úlast_pattern_failure_msgr\   r”   r‚   r�   Úparse_errorr˜   r™   Úpatterns_matchÚfailure_messager–   s                   r+   Ú_get_permission_for_tool_callz5ToolPermissionGuardrail._get_permission_for_tool_callw  sŠ  € ð 7@×6HÒ6H˜9×-Ñ-×2Ò2Èdˆ	Ü" 9¨f°dÓ;ˆ	Ù¡Ø×&Ñ&¨'Ñ1°4¸Ð=Ð=à!*Ò!I¨iÒ!I¸>ˆà/3Ð à—J‘Jó )	0ˆDØ+/×+BÑ+BØØ#Ø#ð ,Có ,Ñ(ˆGÐ(ñ
 Øà×*Ò*Ñ/BØ)-×)HÑ)HÈÓ)SÑ&�	˜;ÙØ(.¨Ð.?¸rÀ+ÀÐNaÐbf×biÑbiÐajÐjkÐ&l�OØ"×;Ñ;Ø /Ø.=È$Ï'É'Ñ Rð <ó �Gð ! $§'¡'¨7Ð2Ò2Ù Ø(.¨Ð.?Ð?hÐim×ipÑipÐhqÐqrÐ&s�OØ"×;Ñ;Ø /Ø.=È$Ï'É'Ñ Rð <ó �Gð ! $§'¡'¨7Ð2Ò2à26×2OÑ2OØ'ØØ'ð 3Pó 3Ñ/� ñ
 &Ø/>Ð,ØàŸ™¨'Ñ1ˆJØ & Ð&7°rÁz¹)ÐW_Ð9`Ð`jÐko×krÑkrÐjsÐstÐuˆOØ×3Ñ3Ø'Ø&5À$Ç'Á'ÑJð 4ó ˆGð ˜tŸw™w¨Ð/Ò/ðS)	0ðV ×(Ñ(¨GÑ3ˆ
ñ )±ñ %à˜/Ð*¨"¹*©YÈ(Ð,SÐSeÐfð 	ð
 ×/Ñ/Ø#Ø"1¸dÑCð 0ó 
ˆð ˜4 Ð(Ð(r.   r¶   rk   c                 ó^   — t        | t        «      r| j                  |«      S t        | |d «      S rr   )r(   r)   rg   rž   )r¶   rk   s     r+   Ú_get_mapping_valuez*ToolPermissionGuardrail._get_mapping_valueº  s)   € ä�dœDÔ!Ø—8‘8˜C“=Ð Ü�t˜S $Ó'Ð'r.   Úchoice_indexc                 ó   — d| › �S )NÚlegacy_function_call_r=   )rÇ   s    r+   Ú_legacy_function_call_idz0ToolPermissionGuardrail._legacy_function_call_idÀ  s   € à& | nÐ5Ð5r.   Úfunction_callc                 óž   — |€y | j                  |d«      }| j                  |d«      xs d}|sy t        | j                  |«      d||dœ¬«      S )Nr¥   r�   r¸   rŸ   ©r¥   r�   )rR   r¿   rŸ   )rÆ   r   rÊ   )rG   rË   rÇ   Úfunction_namer�   s        r+   Ú"_legacy_function_call_to_tool_callz:ToolPermissionGuardrail._legacy_function_call_to_tool_callÄ  sc   € ð Ð Øà#×6Ñ6°}ÀfÓMˆØ×2Ñ2°=À+ÓNÒTÐRTˆ	ÙØä,Ø×,Ñ,¨\Ó:ØØ+¸)ÑDô
ð 	
r.   Úresponsec                 ó<  — g }t        |j                  «      D ]�  \  }}t        |t        «      sŒ|j                  j
                  xs g D ]  }|j                  |«       Œ | j                  t        |j                  dd«      |«      }|€Œq|j                  |«       Œƒ |S )zÛ
        Extract tool_calls from all choices in a model response.

        Args:
            response: The model response to analyze

        Returns:
            List of tool_calls blocks found in the response
        rË   N)	Ú	enumerateÚchoicesr(   r   r™   Ú
tool_callsrU   rÏ   rž   )rG   rÐ   rÔ   rÇ   ÚchoiceÚtoolÚlegacy_tool_calls          r+   Ú!_extract_tool_calls_from_responsez9ToolPermissionGuardrail._extract_tool_calls_from_responseÕ  s    € ð ˆ
ä$-¨h×.>Ñ.>Ó$?ò 	8Ñ ˆL˜&Ü˜&¤'Õ*Ø"ŸN™N×5Ñ5Ò;¸ò ,�DØ×%Ñ% dÕ+ð,à#'×#JÑ#JÜ˜FŸN™N¨O¸TÓBÀLó$Ð ð $Ñ/Ø×%Ñ%Ð&6Õ7ð	8ð Ðr.   c           
      ój  — t        | t        «      r| j                  d«      dk7  ry | j                  d«      }t        |t        «      r|sy | j                  d«      }t	        t        | j                  d«      xs d«      t        |t        |t        «      rt        j                  |«      nd¬«      d	¬
«      S )Nr¿   Útool_user¥   ÚinputrR   r¸   z{}rÍ   rŸ   )rR   rŸ   r¿   )r(   r)   rg   rC   r   r   r    Údumps)r4   r¥   Ú
tool_inputs      r+   Ú _anthropic_tool_use_to_tool_callz8ToolPermissionGuardrail._anthropic_tool_use_to_tool_callí  s�   € ä˜%¤Ô&¨%¯)©)°FÓ*;¸zÒ*IØØ—i‘i Ó'ˆÜ˜$¤Ô$©DØØ$)§I¡I¨gÓ$6ˆ
Ü,Ü�5—9‘9˜T“?Ò( bÓ)Ü 4ÌZÐXbÔdhÔMi´4·:±:¸jÔ3IÐosÔtØô
ð 	
r.   .c                 ó€   — t        | t        «      sy | j                  d«      }t        |t        «      rt	        |«      S d S )NÚcontent)r(   r)   rg   r0   Útuple)rÐ   rà   s     r+   Ú_get_anthropic_content_blocksz5ToolPermissionGuardrail._get_anthropic_content_blocksû  s5   € ä˜(¤DÔ)ØØ!)§¡¨iÓ!8ˆÜ!+¨G´TÔ!:Œu�W‹~ÐDÀÐDr.   rà   c                 ó0   ‡ ‡— t        ˆ ˆfd„|D «       «      S )Nc              3   óJ   •K  — | ]  }‰j                  |«      xŠ€Œ‰–— Œ y ­wrr   )rÞ   )Ú.0r4   rG   r›   s     €€r+   ú	<genexpr>zUToolPermissionGuardrail._extract_tool_calls_from_anthropic_content.<locals>.<genexpr>  s,   øè ø€ ò 
Ø¸D×<aÑ<aÐbgÓ<hÐ/h¨yÑ.uŒIñ
ùs   ƒ#œ#)rá   )rG   rà   r›   s   ` @r+   Ú*_extract_tool_calls_from_anthropic_contentzBToolPermissionGuardrail._extract_tool_calls_from_anthropic_content  s   ù€ ô ô 
Ø#*ô
ó 
ð 	
r.   rÔ   c                 óî   ‡ — t        ˆ fd„|D «       «      }|D ]J  \  }}}}|rŒ|€Œt        j                  d|«       ‰ j                  dk(  sŒ4t	        ‰ j
                  |d¬«      ‚ t        d„ |D «       «      S )Nc              3   óH   •K  — | ]  }|g‰j                  |«      ¢­–— Œ y ­wrr   )rÄ   )rå   r›   rG   s     €r+   ræ   z?ToolPermissionGuardrail._evaluate_tool_calls.<locals>.<genexpr>  s%   øè ø€ ÒwÐ_h 	ÐZ¨D×,NÑ,NÈyÓ,YÕZÑwùs   ƒ"úTool Permission Guardrail: %sr4   T)Úguardrail_namer™   Úblocked_contentc              3   ó¾   K  — | ]U  \  }}}}|sL|�J|t        |j                  r,|j                  j                  r|j                  j                  nd||¬«      f–— ŒW y ­w)Nr…   )rL   r�   r™   )r   rŸ   r¥   )rå   r›   r–   r�   r™   s        r+   ræ   z?ToolPermissionGuardrail._evaluate_tool_calls.<locals>.<genexpr>  se   è ø€ ò 
ñ 8�	˜: w°Ù 'Ð"5ð Üà3<×3EÒ3EÈ)×J\ÑJ\×JaÒJa˜	×*Ñ*×/Ò/Ðguà#Ø#ôô	ñ
ùs   ‚AA)rá   r   r¤   r9   r   rë   )rG   rÔ   ÚcheckedÚ
_tool_callr–   Ú_rule_idr™   s   `      r+   Ú_evaluate_tool_callsz,ToolPermissionGuardrail._evaluate_tool_calls	  s�   ø€ ô ÓwÐlvÔwÓwˆà9@ò 	Ñ5ˆJ˜
 H¨gÚ 'Ñ"5Ü$×,Ñ,Ð-LÈgÔVØ×,Ñ,°Ó7Ü2Ø'+×':Ñ':ÀGÐ]aôð ð		ô ñ 
ð <Cô
ó 
ð 	
r.   Údenied_toolsc           	      óä  ‡	‡
‡— |rt        |t        «      sy t        j                  dt	        |«      «       |D ��ci c],  \  }}|j
                  | j                  ||«      j                  “Œ. c}}Št        ‰«      Š
dt        dt        fˆ
fd„Š	t        ˆ	ˆfd„|D «       «      }t        ˆ	fd„|D «       «      }g |¢ddj                  |«      d	œ‘}||d
<   t        d„ |D «       «      sd|d<   y y c c}}w )Nú"Blocking %s unauthorized tool usesr4   r&   c                 óz   •— t        | t        «      xr) | j                  d«      dk(  xr | j                  d«      ‰v S )Nr¿   rÚ   rR   ©r(   r)   rg   )r4   Údenied_block_idss    €r+   Ú
_is_deniedz\ToolPermissionGuardrail._modify_anthropic_content_with_permission_errors.<locals>._is_denied6  s;   ø€ Ü˜e¤TÓ*Òv¨u¯y©y¸Ó/@ÀJÑ/NÒvÐSX×S\ÑS\Ð]aÓSbÐfvÐSvÐvr.   c              3   ó@   •K  — | ]  } ‰|«      sŒ‰|d       –— Œ y­w)rR   Nr=   )rå   r4   rø   Úerror_by_tool_use_ids     €€r+   ræ   z[ToolPermissionGuardrail._modify_anthropic_content_with_permission_errors.<locals>.<genexpr>9  s$   øè ø€ Ò%rÈEÑ`jÐkpÕ`qÐ&:¸5À¹;Õ&GÑ%rùs   ƒ‘c              3   ó4   •K  — | ]  } ‰|«      rŒ|–— Œ y ­wrr   r=   )rå   r4   rø   s     €r+   ræ   z[ToolPermissionGuardrail._modify_anthropic_content_with_permission_errors.<locals>.<genexpr>:  s   øè ø€ Ò"W¨UÁZÐPUÕEV¤5Ñ"Wùs   ƒ‘Útextú
)r¿   rü   rà   c              3   óh   K  — | ]*  }t        |t        «      xr |j                  d «      dk(  –— Œ, y­w)r¿   rÚ   Nrö   )rå   r4   s     r+   ræ   z[ToolPermissionGuardrail._modify_anthropic_content_with_permission_errors.<locals>.<genexpr>A  s.   è ø€ ÒhÐSX”:˜e¤TÓ*ÒN¨u¯y©y¸Ó/@ÀJÑ/NÓNÑhùs   ‚02Úend_turnÚstop_reason)r(   r)   r   ÚinforF   rR   Ú_create_permission_error_resultrà   Ú	frozensetÚobjectrw   rá   ÚjoinÚany)rG   rÐ   rà   rò   r›   rP   Úerror_messagesÚkept_blocksÚnew_contentrø   r÷   rú   s            @@@r+   Ú0_modify_anthropic_content_with_permission_errorszHToolPermissionGuardrail._modify_anthropic_content_with_permission_errors%  s  ú€ ñ ¤:¨h¼Ô#=Øä×!Ñ!Ð"FÌÈLÓHYÔZð %1÷'
á �	˜5ð �L‰L˜$×>Ñ>¸yÈ%ÓP×XÑXÑXó'
Ðô #,Ð,@Ó"AÐð	wœfð 	w¬õ 	wô !&Ô%rÐU\Ô%rÓ rˆÜ"Ó"W°gÔ"WÓWˆð
Øð
à T§Y¡Y¨~Ó%>Ñ?ð
ˆð
 *ˆ�ÑÜÑhÐ\gÔhÔhØ&0ˆH�]Ò#ð iùó#'
s   »1C,rÖ   c                 óˆ   — | j                  |d«      }|dk7  rd |fS | j                  |d«      }| j                  |d«      }||fS )Nr¿   rŸ   r¥   ©rÆ   )rG   rÖ   rM   rŸ   rL   s        r+   Ú_get_request_tool_namez.ToolPermissionGuardrail._get_request_tool_nameD  sU   € Ø×2Ñ2°4¸Ó@ˆ	Ø˜
Ò"Ø˜�?Ð"à×1Ñ1°$¸
ÓCˆØ×2Ñ2°8¸VÓDˆ	Ø˜)Ð#Ð#r.   rŸ   c                 ó&   — | j                  |d«      S )Nr¥   r  )rG   rŸ   s     r+   Ú_get_legacy_function_namez1ToolPermissionGuardrail._get_legacy_function_nameM  s   € Ø×&Ñ& x°Ó8Ð8r.   Údatac                 óÆ   — |j                  d«      }|r|dv ry t        |t        «      r|S | j                  |d«      dk7  ry | j                  | j                  |d«      d«      S )NÚtool_choice)ÚautoÚnoneÚrequiredr¿   rŸ   r¥   ©rg   r(   rC   rÆ   )rG   r  r  s      r+   Ú_get_named_tool_choicez.ToolPermissionGuardrail._get_named_tool_choiceP  sg   € Ø!ŸX™X mÓ4ˆÙ˜kÐ-IÑIØÜ�k¤3Ô'ØÐØ×"Ñ" ;°Ó7¸:ÒEØØ×&Ñ& t×'>Ñ'>¸{ÈJÓ'WÐY_Ó`Ð`r.   c                 óz   — |j                  d«      }|r|dv ry t        |t        «      r|S | j                  |d«      S )NrË   )r  r  r¥   r  )rG   r  rË   s      r+   Ú_get_named_function_callz0ToolPermissionGuardrail._get_named_function_callZ  sA   € Ø#Ÿx™x¨Ó8ˆÙ Ð1AÑ AØÜ�m¤SÔ)Ø Ð Ø×&Ñ& }°fÓ=Ð=r.   c                 óŽ  — g }|j                  d«      xs g D ],  }| j                  |«      \  }}|€Œ|j                  ||f«       Œ. |j                  d«      xs g D ])  }| j                  |«      }|€Œ|j                  |df«       Œ+ | j	                  |«      | j                  |«      fD ]  }|€Œ|j                  |df«       Œ |S )NÚtoolsÚ	functionsrŸ   )rg   r  rU   r  r  r  )	rG   r  Úrequest_toolsrÖ   rL   rM   rŸ   rÎ   Úforced_tool_names	            r+   Ú_collect_request_toolsz.ToolPermissionGuardrail._collect_request_toolsb  sò   € Ø=?ˆà—H‘H˜WÓ%Ò+¨ò 	=ˆDØ#'×#>Ñ#>¸tÓ#DÑ ˆI�yØÑ$Ø×$Ñ$ i°Ð%;Õ<ð	=ð
 Ÿ™ Ó-Ò3°ò 	BˆHØ ×:Ñ:¸8ÓDˆMØÑ(Ø×$Ñ$ m°ZÐ%@ÕAð	Bð ×'Ñ'¨Ó-Ø×)Ñ)¨$Ó/ð!
ò 	EÐð  Ñ+Ø×$Ñ$Ð&6¸
Ð%CÕDð	Eð Ðr.   Údenied_tool_namesc                 ó  — |s|S t        j                  dt        |«      «       t        «       }|D ]  }|j	                  |«       Œ |j                  d«      }|�=g }|D ]1  }| j                  |«      \  }}	|	dk(  r||v rŒ!|j                  |«       Œ3 ||d<   |j                  d«      }
|
�'|
D �cg c]  }| j                  |«      |vsŒ|‘Œ c}|d<   | j                  |«      }||v rd|d<   | j                  |«      }||v rd|d<   |S c c}w )zä
        Modify the request to replace denied tool_calls blocks with error results

        Args:
            data: The model request to modify
            denied_tools: List of (tool_use, error) tuples for denied tools
        rô   r  rŸ   r  r  r  rË   )r   r  rF   ÚsetÚaddrg   r  rU   r  r  r  )rG   r  r   Úerror_tool_namesrÚ   r  Ú	new_toolsrÖ   rL   rM   r  rŸ   Únamed_tool_choiceÚnamed_function_calls                 r+   Ú&_modify_request_with_permission_errorsz>ToolPermissionGuardrail._modify_request_with_permission_errorsx  sL  € ñ !ØˆKä×!Ñ!Ð"FÌÐL]ÓH^Ô_ô #&£%ÐØ)ò 	+ˆHØ× Ñ  Õ*ð	+ð >B¿X¹XÀgÓ=NˆØÐØ!ˆIØò '�Ø'+×'BÑ'BÀ4Ó'HÑ$�	˜9Ø 
Ò*¨yÐ<LÑ/LØØ× Ñ  Õ&ð	'ð
 &ˆD�‰MàŸ8™8 KÓ0ˆ	ØÐ à)2ö!Ø%°d×6TÑ6TÐU]Ó6^ÐfvÒ6v’ò!ˆD�Ñð $(×#>Ñ#>¸tÓ#DÐØÐ 0Ñ0Ø"(ˆD�Ñà%)×%BÑ%BÀ4Ó%HÐØÐ"2Ñ2Ø$*ˆD�Ñ!àˆùò!s   Â-DÃDrP   c                 óŽ   — d|j                   › �}|j                  r|d|j                  › d�z  }t        |j                  |d¬«      S )zþ
        Create a tool_result block for a permission error

        Args:
            tool_use: The tool use that was denied
            error: The permission error details

        Returns:
            A tool_result block with the error message
        zPermission denied: z (Rule: ú)T)Útool_use_idrà   Úis_error)r™   r�   r   rR   )rG   r›   rP   Úerror_messages       r+   r  z7ToolPermissionGuardrail._create_permission_error_result¨  sF   € ð .¨e¯m©m¨_Ð=ˆØ�=Š=Ø˜x¨¯© °aÐ8Ñ8ˆMä i§l¡l¸MÐTXÔYÐYr.   c                 ó,  — |syt        j                  dt        |«      «       i }|D ]&  \  }}| j                  ||«      }|||j                  <   Œ( t        |j                  «      D �]¬  \  }}t        |t        «      sŒg }	g }
|j                  j                  xs g D ]D  }|j                  }||v r!||   }|
j                  |j                  «       Œ4|	j                  |«       ŒF |	r|	nd|j                  _
        | j                  t        |j                  dd«      |«      }|�I|j                  |j                  «      }|�,d|j                  _        |
j                  |j                  «       |
r_|j                  j                  }|r'|dz   dj#                  |
«      z   |j                  _        n dj#                  |
«      |j                  _        |j                  j                  r�Œ}t        |j                  dd«      ��Œ–|j$                  dv s�Œ¦d|_        �Œ¯ y)zê
        Modify the response to replace denied tool_calls blocks with error results

        Args:
            response: The model response to modify
            denied_tools: List of (tool_use, error) tuples for denied tools
        Nrô   rË   z

rý   )rÔ   rË   Ústop)r   r  rF   r  rR   rÒ   rÓ   r(   r   r™   rÔ   rU   rà   rÏ   rž   rg   rË   r  Úfinish_reason)rG   rÐ   rò   Úerror_resultsrÚ   rP   Úerror_resultrÇ   rÕ   Úfiltered_tool_callsr  r›   Útool_call_idr×   Úlegacy_error_resultÚexisting_contents                   r+   Ú'_modify_response_with_permission_errorsz?ToolPermissionGuardrail._modify_response_with_permission_errors»  sô  € ñ Øä×!Ñ!Ð"FÌÈLÓHYÔZð  "ˆØ+ò 	6‰OˆH�eØ×?Ñ?ÀÈ%ÓPˆLØ)5ˆM˜(Ÿ+™+Ò&ð	6ô
 %.¨h×.>Ñ.>Ó$?ó &	2Ñ ˆL˜&Ü˜&¤'Õ*Ø&(Ð#Ø!#�ð "(§¡×!:Ñ!:Ò!@¸bò >�IØ#,§<¡<�LØ# }Ñ4Ø'4°\Ñ'B˜Ø&×-Ñ-¨l×.BÑ.BÕCà+×2Ñ2°9Õ=ð>ñ DWÑ,?Ð\`�—‘Ô)à#'×#JÑ#JÜ˜FŸN™N¨O¸TÓBÀLó$Ð ð $Ð/Ø*7×*;Ñ*;Ð<L×<OÑ<OÓ*PÐ'Ø*Ð6Ø7;˜Ÿ™Ô4Ø&×-Ñ-Ð.A×.IÑ.IÔJñ "Ø'-§~¡~×'=Ñ'=Ð$Ù'Ø1AÀFÑ1JÈTÏYÉYÐWeÓMfÑ1f˜Ÿ™Õ.à15·±¸>Ó1J˜Ÿ™Ô.ð Ÿ™×1Ô1Ü §¡°ÀÓFÒNØ×,Ñ,Ð0OÓOà+1�FÖ(ñM&	2r.   Úuser_api_key_dictÚcacheÚ	call_typec              ƒ   ó<  K  — t        j                  d«       ddlm} t        j
                  }| j                  ||¬«      dur|S | j                  |«      }|st        j                  d«       |S g }|D ]g  \  }	}
| j                  |	|
«      \  }}}|rŒ|€Œ"t        j                  d|«       | j                  dk(  rt        d	d
|dœ¬«      ‚|j                  |	«       Œi |r| j                  ||«      }t        j                  d«        ||| j                  ¬«       |S ­w)ú z'Tool Permission Guardrail Pre-Call Hookr   r   ©r  Ú
event_typeTzOTool Permission Guardrail: not running guardrail. No tools or functions in datarê   r4   i�  zViolated guardrail policy)rP   Údetection_message)Ústatus_codeÚdetailz:Tool Permission Guardrail Pre-Call Hook: All tools allowed©Úrequest_datarë   )r   rE   Ú)litellm.proxy.common_utils.callback_utilsr   r   rs   Úshould_run_guardrailr  r¤   rš   r9   r
   rU   r(  rë   )rG   r8  r9  r  r:  r   r>  r%  r   rL   rM   r–   r•   r™   s                 r+   Úasync_pre_call_hookz+ToolPermissionGuardrail.async_pre_call_hookû  s6  è ø€ ô 	×"Ñ"Ð#LÔMõ	
ô 2E×1MÑ1Mˆ
Ø×$Ñ$¨$¸:Ð$ÓFÈdÑRØˆKà×6Ñ6°tÓ<ˆ	ÙÜ ×(Ñ(Øaôð ˆKð $&ÐØ$-ò 	4Ñ ˆI�yØ%)×%@Ñ%@ÀÈIÓ%VÑ"ˆJ˜˜7â 'Ñ"5Ü$×,Ñ,Ð-LÈgÔVØ×,Ñ,°Ò7Ü'Ø$'à%@Ø18ñ ôð ð "×(Ñ(¨Õ3ð	4ñ Ø×>Ñ>¸tÐEVÓWˆDä×"Ñ"Ð#_Ô`á2ÀÐUY×UhÑUhÕiØˆùs   ‚BDÂDÂBDc              ƒ   óæ  K  — t        |t        «      rdn| j                  |«      }t        |t        «      s|€|S t        j                  d«       | j                  |t        j                  ¬«      st        j                  d«       |S t        |t        «      r| j                  |«      n| j                  |xs d«      }|st        j                  d«       |S t        j                  dt        |«      «       | j                  |«      }|st        j                  d«       n:t        |t        «      r| j                  ||«       n| j                  ||xs d|«       t        || j                  ¬	«       |S ­w)
zü
        Check tool usage permissions after the LLM call

        Args:
            data: Request data
            user_api_key_dict: User API key information (unused but required by interface)
            response: The model response to check
        Nz;Tool Permission Guardrail Post-Call Hook: Checking responser=  z7Tool Permission Guardrail: Skipping check (not enabled)r=   ú-Tool Permission Guardrail: No tool uses foundú.Tool Permission Guardrail: Found %s tool callsú;Tool Permission Guardrail Post-Call Hook: All tools allowedrB  )r(   r!   râ   r   rE   rE  r   rt   rØ   rç   rF   rñ   r7  r
  r   rë   )rG   r  r8  rÐ   Úanthropic_contentrÔ   rò   s          r+   Úasync_post_call_success_hookz4ToolPermissionGuardrail.async_post_call_success_hook.  sN  è ø€ ô  ˜x¬Ô7‰D¸T×=_Ñ=_Ð`hÓ=ið 	ô ˜(¤MÔ2Ð7HÐ7PØˆOä×"Ñ"Ð#`Ôaà×(Ñ(¨dÔ?R×?\Ñ?\Ð(Ô]Ü ×&Ñ&Ð'`ÔaØˆOô
 ˜(¤MÔ2ð ×2Ñ2°8Ô<à×@Ñ@ÐARÒAXÐVXÓYð 	ñ Ü ×&Ñ&Ð'VÔWØˆOä×"Ñ"Ð#SÔUXÐYcÓUdÔeà"×7Ñ7¸
ÓCˆáÜ ×&Ñ&Ð'dÕeÜ˜¤-Ô0Ø×8Ñ8¸À<ÕPà×AÑAÀ(ÐL]ÒLcÐacÐeqÔrä2ÀÐUY×UhÑUhÕiØˆùs   ‚E/E1rC  c                óJ  K  — ddl m} ddlm} ddlm} g }|2 3 d{  –—† }|j                  |«       Œ7 Œ6 t        |«      s	 ||¬«      nd}	t        |	t        «      rB| j                  |	«      }
|
r| j                  |	|
«        ||	¬«      }|2 3 d{  –—†7  }|­–— Œ6 yt        |«      }|€/t        |«      rt        | j                  d¬	«      ‚|D ]  }|­–— Œ	 y| j                  |«      }|s|D ]  }|­–— Œ	 y| j                  ||«       t        |«      D ]  }|­–— Œ	 y­w)
a3  
        Check tool usage permissions after the LLM stream call

        Args:
            user_api_key_dict: User API key information (unused but required by interface)
            response: The model response to check
            request_data: The model request (unused but required by interface)
        r   )ÚMockResponseIterator)Ústream_chunk_builder)ÚTextCompletionResponseN)Úchunks)Úmodel_responsezpStreamed response could not be verified for tool permissions (not a parseable Anthropic SSE stream), blocking it)rë   r™   )Ú)litellm.llms.base_llm.base_model_iteratorrN  Úlitellm.mainrO  Úlitellm.types.utilsrP  rU   r   r(   r!   Ú_check_assembled_streamr7  r   r   rë   r   )rG   r8  rÐ   rC  rN  rO  rP  Ú
all_chunksÚchunkÚassembled_model_responserò   Úmock_responseÚanthropic_responseÚanthropic_denialsÚ	sse_chunks                  r+   Ú'async_post_call_streaming_iterator_hookz?ToolPermissionGuardrail.async_post_call_streaming_iterator_hookb  sY  è ø€ õ  	SÝ5Ý>ð 8:ˆ
Ø#÷ 	%ð 	%�%Ø×Ñ˜eÕ$ð	%ø˜8ô <MÈZÔ;XÑ ¨
Õ3Ð^bð 	!ô Ð.´Ô>Ø×7Ñ7Ð8PÓQˆLÙØ×<Ñ<Ð=UÐWcÔdá#7ÐG_Ô#`ˆMà,÷ ñ �eØ”ð  -àä$AÀ*Ó$MÐØÐ%Ü  Ô,Ü.Ø#'×#6Ñ#6ðNôð ð $ò �Ø”ðàà#'×#?Ñ#?Ð@RÓ#SÐÙ Ø#ò �Ø”ðàà×4Ñ4Ð5GÐIZÔ[Ü;Ð<NÓOò 	ˆIØŒOñ	ùs9   ‚D#™6�4ž6¡D#´6¶AD#ÂBÂBÂBÂBD#Ú	assembledc                 ó  — t        j                  d«       | j                  |«      }|st        j                  d«       yt        j                  dt        |«      «       | j	                  |«      }|st        j                  d«       |S )Nz,Tool Permission Guardrail: Checking responserH  r=   rI  rJ  )r   rE   rØ   rF   rñ   )rG   r_  rÔ   rò   s       r+   rV  z/ToolPermissionGuardrail._check_assembled_stream¡  sx   € ô 	×"Ñ"Ð#QÔRØ ×BÑBÀ9ÓMˆ
ÙÜ ×&Ñ&Ð'VÔWØÜ×"Ñ"Ð#SÔUXÐYcÓUdÔeØ"×7Ñ7¸
ÓCˆÙÜ ×&Ñ&Ð'dÔeØÐr.   )Nr7   r4   rr   )r   )DÚ__name__Ú
__module__Ú__qualname__r0   r)   r	   rA   r   rB   r   re   Ústaticmethodrp   Úclassmethodr   r?   rN   ÚPatternrC   rw   ry   r   rá   rƒ   rš   r   r   r  r§   Úintr°   r½   rÄ   rÆ   rÊ   rÏ   r!   rØ   rÞ   râ   rç   r   r   rñ   r
  r  r  r  r  r  r(  r   r  r7  r   r   r   r   rh   rF  r    rL  r   r"   r   r^  rV  Ú__classcell__)rI   s   @r+   r3   r3   6   sÅ  ø„ ð $(Ø39Ø<Cñ	!
à�D‰z˜DÑ ð!
ð   Ñ0ð!
ð &Ð&8Ñ9õ	!
ðF09  c¡¨TÑ!1ð 09°dó 09ðd-E¸mÈdÑ>Rð -EÐW[õ -Eð^ ñ2ó ð2ð ð
¨$Ð/BÑ*Cò 
ó ð
ð. b§j¡j°4Ñ&7ð .ÀÀdÁ
ð .Ètó .ð !%ò2à ð2ð ˜‘:ð	2ð
 ˜‘:ð2ð 
ˆt�TˆzÑ	ó2ð2 !%ñ4)à˜‘:ð4)ð ˜‘:ð4)ð 
ˆt�S˜4‘Z  t¡Ð+Ñ	,ó	4)ðl7Ø6ð7à	ˆw�s˜F�{Ñ# dÑ*¨C°$©JÐ6Ñ	7ó7ðJ ñAàðAð ðAð ˜˜T &™\Ð)Ñ*ð	Að
 ðAð 
óAð6ð ˜3 ˜;Ñ'ðð !ð	ð
 ˜‘:ðð 
ˆt�S˜4‘ZÐÑ	 óð>A)Ø6ðA)à	ˆt�S˜4‘Z  t¡Ð+Ñ	,óA)ðF ð( ð (¨3ð (°3ò (ó ð(ð
 ð6¨sð 6°sò 6ó ð6ð
Ø ð
Ø03ð
à	&¨Ñ	-ó
ð"¸-ð ÈDÐQnÑLoó ð0 ð
°ð 
Ð;XÐ[_Ñ;_ò 
ó ð
ð ðE°ð E¸5ÀÈÀÑ;MÐPTÑ;Tò Eó ðEð
Ø˜V S˜[Ñ)ð
à	Ð,¨cÐ1Ñ	2ó
ð
Ø"Ð#@ÑAð
à	ˆuÐ2°OÐCÑDÀcÐIÑ	Jó
ð81àð1ð �s˜C�x‘ð1ð ˜EÐ"?ÀÐ"PÑQÐSVÐVÑWð	1ð
 
ó1ð>$¨3ð $°5¸¸t¹ÀSÈ4ÁZÐ9OÑ3Pó $ð9°#ð 9¸#À¹*ó 9ða¨4ð a°C¸$±Jó að>¨Tð >°c¸D±jó >ð¨4ð °D¸¸sÀCÈ$ÁJ¸Ñ9OÑ4Pó ð,.àð.ð   ™9ó.ð`ZØ6ðZØ?NðZà	óZð&>2àð>2ð ˜uÐ%BÀOÐ%SÑTÑUð>2ð 
ó	>2ð@ ð0à)ð0ð ð0ð ð	0ð
 $ð0ð 
�S‰˜4Ñ	 $Ñ	&ò0ó ð0ðd ð1àð1ð *ð1ð #ò	1ó ð1ðf=à)ð=ð  Ð 3Ñ4ð=ð ð	=ð
 
Ð+¨TÐ1Ñ	2ó=ð~Ø&ðà	ˆuÐ2°OÐCÑDÀcÐIÑ	J÷r.   r3   )6r    rN   Úcollections.abcr   r   r   r   Útypingr   r   r	   Úfastapir
   Úlitellmr   Úlitellm._loggingr   Úlitellm.caching.dual_cacher   Úlitellm.exceptionsr   Ú%litellm.integrations.custom_guardrailr   r   Úlitellm.proxy._typesr   rD  r   Ú&litellm.proxy.guardrails.anthropic_sser   r   r   Úlitellm.types.guardrailsr   r   ro   r   r   r   rU  r   r   r   r   r    r!   r"   r$   Ú__annotations__r  rC   r,   r1   r3   r=   r.   r+   ú<module>ru     s¶   ðÜ Û 	ß LÓ Lß &Ñ &å !å +Ý 1Ý 0Ý 7÷õ 0õ÷ñ ÷
 H÷ñ ÷
÷ ñ ð *€�Ó )ð6˜6ð 6 g¨c°6¨kÑ&:¸TÑ&Aó 6ð
6˜ð 6 8¨FÑ#3°dÑ#:ó 6ô
w˜oõ wr.   