Ë
    uPêj5  ã                   ór   — d 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 erddlmZ  G d	„ d
e«      Zy)zQ
Translate from OpenAI's `/v1/chat/completions` to VLLM's `/v1/chat/completions`
é    )ÚTYPE_CHECKINGÚFinal)ÚOPENAI_CHAT_COMPLETION_PARAMS)Úget_secret_boolÚget_secret_str)ÚLiteLLM_Paramsé   )ÚOpenAIGPTConfig)ÚAllMessageValuesc                   ó†  ‡ — e Zd Zdedefˆ fd„Zdededededef
d„Zded	z  d
ed	z  de	ed	z  ed	z  f   fd„Z
dd
ed	z  ded	z  dee   fˆ fd„Zedd
ed	z  ded	z  fd„«       Ze	 dded	z  fd„«       Ze	 ddeded	z  d
ed	z  de	eeed	z  ed	z  f   fd„«       Zdeded   dedededefd„Zdeded   dedededefd„Zˆ xZS )ÚLiteLLMProxyChatConfigÚmodelÚreturnc                 óP   •— t         ‰| �  |«      }|j                  t        «       |S ©N)ÚsuperÚget_supported_openai_paramsÚextendr   )Úselfr   Úparams_listÚ	__class__s      €ús/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/litellm_proxy/chat/transformation.pyr   z2LiteLLMProxyChatConfig.get_supported_openai_params   s'   ø€ Ü"™WÑ@ÀÓGˆØ×ÑÔ8Ô9ØÐó    Únon_default_paramsÚoptional_paramsÚdrop_paramsc                 ó¢   — | j                  |«      }|j                  «       D ]*  \  }}|dk(  r||j                  di «      d<   Œ!||v sŒ&|||<   Œ, |S )NÚthinkingÚ
extra_body)r   ÚitemsÚ
setdefault)r   r   r   r   r   Úsupported_openai_paramsÚparamÚvalues           r   Ú_map_openai_paramsz)LiteLLMProxyChatConfig._map_openai_params   sk   € ð *.×)IÑ)IÈ%Ó)PÐØ.×4Ñ4Ó6ò 	/‰LˆE�5Ø˜
Ò"ØKP�×*Ñ*¨<¸Ó<¸ZÒHØÐ1Ò1Ø).� Ò&ð		/ð
 Ðr   Úapi_baseNÚapi_keyc                 óF   — |xs t        d«      }|xs t        d«      }||fS )NÚLITELLM_PROXY_API_BASEÚLITELLM_PROXY_API_KEY©r   )r   r&   r'   Údynamic_api_keys       r   Ú$_get_openai_compatible_provider_infoz;LiteLLMProxyChatConfig._get_openai_compatible_provider_info&   s/   € ð ÒGœ~Ð.FÓGˆØ!(Ò!S¬NÐ;RÓ,SˆØ˜Ð(Ð(r   c                 óš   •— | j                  ||«      \  }}|€t        d«      ‚t        ‰| �  ||¬«      }|D �cg c]  }d|› �‘Œ	 c}S c c}w )NzQapi_base not set for LiteLLM Proxy route. Set in env via `LITELLM_PROXY_API_BASE`)r'   r&   úlitellm_proxy/)r-   Ú
ValueErrorr   Ú
get_models)r   r'   r&   Úmodelsr   r   s        €r   r1   z!LiteLLMProxyChatConfig.get_models-   s\   ø€ Ø ×EÑEÀhÐPWÓXÑˆ�'ØÐÜÐpÓqÐqÜ™Ñ*°7ÀXÐ*ÓNˆØ6<Ö=¨U�.  Ò(Ò=Ð=ùÒ=s   ¹Ac                 ó    — | xs t        d«      S )Nr*   r+   )r'   s    r   Úget_api_keyz"LiteLLMProxyChatConfig.get_api_key4   s   € àÒAœ.Ð)@ÓAÐAr   Úlitellm_paramsc                 óh   — ddl }t        d«      du ry| r| j                  du ry|j                  du ryy)aÒ  
        Returns True if litellm proxy should be used by default for a given request

        Issue: https://github.com/BerriAI/litellm/issues/10559

        Use case:
        - When using Google ADK, users want a flag to dynamically enable sending the request to litellm proxy or not
        - Allow the model name to be passed in original format and still use litellm proxy:
        "gemini/gemini-1.5-pro", "openai/gpt-4", "mistral/llama-2-70b-chat" etc.
        r   NÚUSE_LITELLM_PROXYTF)Úlitellmr   Úuse_litellm_proxy)r5   r8   s     r   Ú$_should_use_litellm_proxy_by_defaultz;LiteLLMProxyChatConfig._should_use_litellm_proxy_by_default8   s?   € ó 	äÐ.Ó/°4Ñ7ØÙ˜n×>Ñ>À$ÑFØØ×$Ñ$¨Ñ,ØØr   c                 ó®   — ddl }d}| j                  d«      r| j                  dd«      d   } |j                  «       j	                  ||¬«      \  }}| |||fS )a³  
        Force use litellm proxy for all models

        Issue: https://github.com/BerriAI/litellm/issues/10559

        Expected behavior:
        - custom_llm_provider will be 'litellm_proxy'
        - api_base = api_base OR LITELLM_PROXY_API_BASE
        - api_key = api_key OR LITELLM_PROXY_API_KEY

        Use case:
        - When using Google ADK, users want a flag to dynamically enable sending the request to litellm proxy or not
        -  Allow the model name to be passed in original format and still use litellm proxy:
        "gemini/gemini-1.5-pro", "openai/gpt-4", "mistral/llama-2-70b-chat" etc.

        Return model, custom_llm_provider, dynamic_api_key, api_base
        r   NÚlitellm_proxyr/   ú/é   )r&   r'   )r8   Ú
startswithÚsplitr   r-   )r   r&   r'   r8   Úcustom_llm_providers        r   Ú*litellm_proxy_get_custom_llm_provider_infozALiteLLMProxyChatConfig.litellm_proxy_get_custom_llm_provider_infoP   sn   € ó* 	à%4ÐØ×ÑÐ,Ô-Ø—K‘K  QÓ'¨Ñ*ˆEð
 ×*Ñ*Ó,×QÑQÐ[cÐmtÐQÓuñ	
ØØð Ð)¨7°HÐ<Ð<r   Úmessagesr   Úheadersc                 ó   — ||dœ|¥S ©N)r   rC   © ©r   r   rC   r   r5   rD   s         r   Útransform_requestz(LiteLLMProxyChatConfig.transform_requestr   s   € ð Ø ñ
ð ð
ð 	
r   c              ƒ   ó   K  — ||dœ|¥S ­wrF   rG   rH   s         r   Úasync_transform_requestz.LiteLLMProxyChatConfig.async_transform_request�   s"   è ø€ ð Ø ñ
ð ð
ð 	
ùs   ‚
)NNr   )Ú__name__Ú
__module__Ú__qualname__ÚstrÚlistr   ÚdictÚboolr%   Útupler-   r1   Ústaticmethodr4   r   r:   rB   rI   rK   Ú__classcell__)r   s   @r   r   r      sÝ  ø„ ð°ð ¸õ ð
à ðð ðð ð	ð
 ðð 
óð)Ø˜d™
ð)Ø-0°4©Zð)à	ˆs�T‰z˜3 ™:Ð%Ñ	&ó)ñ> #¨¡*ð >¸sÀT¹zð >ÐUYÐZ]ÑU^õ >ð ñB˜S 4™Zð B°3¸±:ò Bó ðBð à04ñØ&¨Ñ-òó ðð. àGKñ=Øð=Ø! D™jð=Ø:=À¹*ð=à	ˆs�C˜˜t™ S¨4¡ZÐ/Ñ	0ò=ó ð=ðB
àð
ð Ð)Ñ*ð
ð ð	
ð
 ð
ð ð
ð 
ó
ð
àð
ð Ð)Ñ*ð
ð ð	
ð
 ð
ð ð
ð 
÷
r   r   N)Ú__doc__Útypingr   r   Úlitellm.constantsr   Úlitellm.secret_managers.mainr   r   Úlitellm.types.routerr   Úopenai.chat.gpt_transformationr
   Úlitellm.types.llms.openair   r   rG   r   r   ú<module>r]      s/   ðñ÷ (å ;ß HÝ /å =áÝ:ô}
˜_õ }
r   