Ë
    tPêj¨  ã            
       ó  — U d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	 i Z
eeeef      ed<   dedee   fd	„Zdedee   fd
„Zdd„Z ee	j&                  j(                  e	j*                  j(                  e	j,                  j(                  e	j.                  j(                  e	j0                  j(                  e	j2                  j(                  e	j4                  j(                  e	j6                  j(                  h«      Zeed<   dededee   fd„Zy)a  
Extract tool names from request body by route/call type.

Used by auth (check_tools_allowlist) and ToolPolicyGuardrail so tool-format
knowledge lives in one place. Uses guardrail translation handlers where available,
with standalone extractors for generate_content and MCP.
é    )ÚAnyÚFinal)Úget_call_types_for_route)Ú#load_guardrail_translation_mappings)Ú	CallTypesÚSTANDALONE_EXTRACTORSÚdataÚreturnc                 ó  — g }| j                  d«      xs g D ]m  }t        |t        «      sŒ|j                  d«      xs g D ]B  }t        |t        «      sŒ|j                  d«      sŒ&|j                  t	        |d   «      «       ŒD Œo |S )z;Google generateContent: tools[].functionDeclarations[].nameÚtoolsÚfunctionDeclarationsÚname)ÚgetÚ
isinstanceÚdictÚappendÚstr)r	   ÚnamesÚtoolÚdecls       úr/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/guardrails/tool_name_extraction.pyÚ$_extract_generate_content_tool_namesr      s€   € à €EØ—‘˜Ó!Ò' Rò 0ˆÜ˜$¤Ô%ØØ—H‘HÐ3Ó4Ò:¸ò 	0ˆDÜ˜$¤Õ%¨$¯(©(°6Õ*:Ø—‘œS  f¡Ó.Õ/ñ	0ð0ð €Ló    c                 óŠ   — g }| j                  d«      xs | j                  d«      }|r|j                  t        |«      «       |S )z,MCP call_tool: name or mcp_tool_name in bodyr   Úmcp_tool_name)r   r   r   )r	   r   r   s      r   Ú_extract_mcp_tool_namesr      s;   € à €EØ—(‘(˜6Ó"Ò? d§h¡h¨Ó&?€DÙØ�‰”S˜“YÔØ€Lr   Nc                  óð   — t         ry t        t         t        j                  j                  <   t        t         t        j
                  j                  <   t        t         t        j                  j                  <   y )N)r   r   r   Úgenerate_contentÚvalueÚagenerate_contentr   Úcall_mcp_tool© r   r   Ú_register_standalone_extractorsr#   (   sM   € ÝØÜ>bÔœ)×4Ñ4×:Ñ:Ñ;Ü?cÔœ)×5Ñ5×;Ñ;Ñ<Ü;RÔœ)×1Ñ1×7Ñ7Ò8r   ÚTOOL_CAPABLE_CALL_TYPESÚroutec                 óZ  — t        | «      }|sg S t        «        t        «       }|D ]‚  }t        |t        «      sŒ|j
                  t        vrŒ'|j
                  t        v rt        |j
                     |«      c S |j                  |«      }|€Œg |«       j                  |«      }|sŒ€|c S  g S )a  
    Extract tool names from the request body for the given route.
    Uses guardrail translation handlers when available, else standalone extractors
    for generate_content and MCP. Returns [] for non-tool-capable routes or when
    no tools are present.
    )
r   r#   r   r   r   r   r$   r   r   Úextract_request_tool_names)r%   r	   Ú
call_typesÚmappingsÚ	call_typeÚhandler_clsr   s          r   r'   r'   ?   s¦   € ô 1°Ó7€JÙØˆ	Ü#Ô%Ü9Ó;€HØò ˆ	Ü˜)¤YÔ/ØØ�?‰?Ô"9Ñ9ØØ�?‰?Ô3Ñ3Ü(¨¯©Ñ9¸$Ó?Ò?Ø—l‘l 9Ó-ˆØÑ"Ù“M×<Ñ<¸TÓBˆEÚØ’ðð €Ir   )r
   N)Ú__doc__Útypingr   r   Ú2litellm.litellm_core_utils.api_route_to_call_typesr   Úlitellm.llmsr   Úlitellm.types.utilsr   r   r   r   Ú__annotations__Úlistr   r   r#   Ú	frozensetÚ
completionr   ÚacompletionÚ	responsesÚ
aresponsesÚanthropic_messagesr   r    r!   r$   r'   r"   r   r   ú<module>r9      s  ðò÷ å WÝ <Ý )ð 02Ð �u˜T # s (™^Ñ,Ó 1ð	¨tð 	¸¸S¹	ó 	ð $ð ¨4°©9ó óSñ "+à×Ñ×"Ñ"Ø×Ñ×#Ñ#Ø×Ñ×!Ñ!Ø×Ñ×"Ñ"Ø×$Ñ$×*Ñ*Ø×"Ñ"×(Ñ(Ø×#Ñ#×)Ñ)Ø×Ñ×%Ñ%ð	ó"Ð ˜ó ð cð °ð ¸$¸s¹)ô r   