o
    Æ°i+  ã                	   @   s  d dl Z d dlZd dlmZmZmZmZmZ erd dlm	Z	 d dl
mZ d dlmZ dedefdd	„Zd
eee ef ded defdd„Z	dd
eee ef dee deee ef fdd„Zdedefdd„Z	dd
eee ef dee deee ef fdd„ZdS )é    N)ÚTYPE_CHECKINGÚDictÚListÚOptionalÚUnion)ÚOpenAIFileObject)ÚCredentialLiteLLMParams)Úverbose_loggerÚlitellm_paramsÚreturnc                 C   s*   t di | ¤Ž}t t | ¡ ¡ ¡ ¡ ¡ S )zX
    Hash of the credential params, used for mapping the file id to the right model
    N© )r   ÚhashlibÚsha256ÚjsonÚdumpsZ
model_dumpÚencodeÚ	hexdigest)r
   Zsensitive_paramsr   r   úX/home/app/Keep/.python/lib/python3.10/site-packages/litellm/router_utils/common_utils.pyÚ,get_litellm_params_sensitive_credential_hash   s   ÿþr   Úhealthy_deploymentsÚ	responsesr   c                 C   sf   i }t | tƒrt| |ƒD ]\}}|j|| di ¡ d¡< q|S t | tƒr1|  ¡ D ]\}}|||< q(|S )z}
    Create a mapping of model name to file id
    {
        "model_id": "file_id",
        "model_id": "file_id",
    }
    Ú
model_infoÚid)Ú
isinstanceÚlistÚzipr   ÚgetÚdictÚitems)r   r   Zmodel_file_id_mappingÚ
deploymentÚresponseZmodel_idZfile_idr   r   r   Úadd_model_file_id_mappings   s   

ÿ
ý
r!   Úrequest_kwargsc                    s¦   |du r| S |  d¡pi }|  d¡pi }|  d¡p|  d¡}tƒ ‰ t| tƒr(| S | D ]}|  d¡p2i }|  d¡}|du r=q*||krIˆ  |  d¡¡ q*‡ fdd	„| D ƒS )
zM
    If a model has a team_id

    Only use if request is from that team
    NÚmetadataÚlitellm_metadataZuser_api_key_team_idr   Zteam_idr   c                    s&   g | ]}|  d i ¡  d¡ˆ vr|‘qS )r   r   ©r   )Ú.0r   ©Zids_to_remover   r   Ú
<listcomp>H   s
    þz,filter_team_based_models.<locals>.<listcomp>)r   Úsetr   r   Úadd)r   r"   r#   r$   Zrequest_team_idr   Z_model_infoZmodel_team_idr   r'   r   Úfilter_team_based_models,   s*   	ÿ

€
þr+   r   c                 C   s    |   di ¡}d|v r|d S dS )a›  
    Check if a deployment supports web search.

    Priority:
    1. Check config-level override in model_info.supports_web_search
    2. Default to True (assume supported unless explicitly disabled)

    Note: Ideally we'd fall back to litellm.supports_web_search() but
    model_prices_and_context_window.json doesn't have supports_web_search
    tags on all models yet. TODO: backfill and add fallback.
    r   Zsupports_web_searchTr%   )r   r   r   r   r   Ú_deployment_supports_web_searchN   s   r,   c                 C   s–   |du r| S t | tƒr| S d}| d¡pg }|D ]}| d¡dks(| d¡dkr,d} nq|s1| S dd	„ | D ƒ}t| ƒd
krIt|ƒd
krIt d¡ |S )z[
    If the request is websearch, filter out deployments that don't support web search
    NFÚtoolsÚtypeZ
web_searchZweb_search_previewTc                 S   s   g | ]}t |ƒr|‘qS r   )r,   )r&   Údr   r   r   r(   |   s    z1filter_web_search_deployments.<locals>.<listcomp>r   z-No deployments support web search for request)r   r   r   Úlenr	   Úwarning)r   r"   Zis_web_search_requestr-   ZtoolZfinal_deploymentsr   r   r   Úfilter_web_search_deploymentsb   s"   
þ
r2   )N)r   r   Útypingr   r   r   r   r   Zlitellm.types.llms.openair   Zlitellm.types.routerr   Zlitellm._loggingr	   r   Ústrr   r!   r+   Úboolr,   r2   r   r   r   r   Ú<module>   s@    
ÿÿ
þþÿþ
ý"þÿþý