
    Cj                         S SK JrJrJrJr  S SKJr  S SKJr  S SK	J
r
Jr  S SKJr  S\S\S\S	\\\\4   4S
 jr\" S5      r " S S5      rg)    )AnyDictOptionalTypeVar)BaseContainerConfig)ResponsesAPIRequestUtils)$ContainerCreateOptionalRequestParams"ContainerListOptionalRequestParams)GenericLiteLLMParamscontainer_idcustom_llm_providerlitellm_paramsreturnc                     [         R                  " U 5      nUR                  SU 5      nUR                  S5      nU(       a  US:X  a  UnUR                  S5      nU(       a  UR                  S5      (       d  XbS'   XAU4$ )zDecode a LiteLLM-managed container ID for upstream API calls.

Returns:
    (original_container_id, resolved_provider, updated_litellm_params)
response_idr   openaimodel_id)r   _decode_container_idget)r   r   r   decodedoriginal_container_iddecoded_providerdecoded_model_ids          j/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/litellm/containers/utils.py'decode_managed_container_id_for_requestr      s{     ';;LIG#KK|D{{#89/8;.{{:. 2 2: > >%5z" ~EE    Tc                       \ rS rSr\S\S\4S j5       r\S\S\S\	4S j5       r
\S\S\4S j5       r\  SS
\S\\   S\\	\\4      S\\	\\4      S\4
S jj5       rSrg	)ContainerRequestUtils'   passed_paramsr   c                 \    [        5       n/ SQnU H  nX0;   d  M
  X   c  M  X   X'   M     U$ )zLExtract only valid container creation parameters from the passed parameters.)expires_afterfile_idsextra_headers
extra_body)r	   )r!    container_create_optional_paramsvalid_paramsparams       r   -get_requested_container_create_optional_paramCContainerRequestUtils.get_requested_container_create_optional_param(   sC    
 ,P+Q(
 "E%-*>*J:G:N07 " 0/r   container_provider_configr'   c                     U R                  5       nUR                  5        VVs0 s H  u  p4X2;   d  M  X4_M     nnnU R                  USS9$ s  snnf )z3Get the optional parameters for container creation.F)r'   drop_params)get_supported_openai_paramsitemsmap_openai_params)r,   r'   supported_paramskvfiltered_paramss         r   $get_optional_params_container_create:ContainerRequestUtils.get_optional_params_container_create<   so     5PPR
 9>>@
@$ AD@ 	 
 )::-< ; 
 	

s
   AAc                 \    [        5       n/ SQnU H  nX0;   d  M
  X   c  M  X   X'   M     U$ )zHExtract only valid container list parameters from the passed parameters.)afterlimitorderr%   extra_query)r
   )r!   container_list_optional_paramsr(   r)   s       r   +get_requested_container_list_optional_paramAContainerRequestUtils.get_requested_container_list_optional_paramP   sC    
 *L)M&
 "E%-*>*J8E8L.5 " .-r   Nresponse_objr   litellm_metadatar&   c                 *   U=(       d    0 nUR                  S0 5      =(       d    0 nUR                  S5      nSnUb  SnU(       a  SU;   a  SnUc}  US   n[        U[        5      (       a#  UR                  S5      S   R	                  5       nO@[        U[
        5      (       a+  [        U5      S:  a  [        US   5      R	                  5       nU(       a>  U (       a7  [        U S5      (       a&  [        R                  " UUU R                  S9nXl
        U $ )	a  
Encode container_id in response object with provider/model metadata for routing.

This mirrors the responses API pattern where response IDs are encoded with
routing metadata so follow-up calls can route to the correct provider.

Encodes when:
1. litellm_metadata contains model_info.id (indicating router/proxy usage), OR
2. extra_body contains target_model_names (indicating model-specific routing)

Direct SDK calls with explicit custom_llm_provider and no routing hints return raw IDs.

Args:
    response_obj: Response object with an `id` attribute (ContainerObject, DeleteContainerResult, etc.)
    custom_llm_provider: Provider name (e.g., "azure", "openai")
    litellm_metadata: Optional litellm_metadata dict that may contain model_info.id
    extra_body: Optional extra_body dict that may contain target_model_names

Returns:
    The same response object with encoded container_id (if routing metadata present)

model_infoidFTtarget_model_names,r   )r   r   r   )r   
isinstancestrsplitstriplistlenhasattrr   _build_container_idrD   )	r@   r   rA   r&   rC   r   should_encodetarget_models
encoded_ids	            r   encode_container_id_in_response5ContainerRequestUtils.encode_container_id_in_responsee   s   : ,1r%5%9%9,%K%Qr
>>$'   M .*< M *+? @mS11,2237:@@BHt44]9Ka9O"=#34::<H \glD.I.I1EE$7!)__J
 )Or    )NN)__name__
__module____qualname____firstlineno__staticmethoddictr	   r*   r   r   r6   r
   r>   r   r   rH   r   rR   __static_attributes__rT   r   r   r   r   '   s    00	-0 0& 
#6
*N
 

 
& ..	+. .(  6:/3	<<%c]< #4S>2< T#s(^,	<
 
< <r   r   N)typingr   r   r   r   /litellm.llms.base_llm.containers.transformationr   litellm.responses.utilsr   litellm.types.containers.mainr	   r
   litellm.types.routerr   rH   tupler   r   r   rT   r   r   <module>rb      sm    / / O < 6FFF )F 3))*	F0 CL{ {r   