
    hO                         d dl Z d dlZd dlmZmZmZmZmZmZ d dl	Z	d dl
mZmZ er	d dlmZ eZneZd dlmZ ddlmZ dd	lmZmZ  e j0                  e      Zd
ZdedefdZ G d de      Zy)    N)TYPE_CHECKINGAnyDictListOptionalUnion)AllMessageValuesChatCompletionRequest)Logging)BaseLLMException   )OpenAIGPTConfig   )HuggingFaceError!_fetch_inference_provider_mappingzhttps://router.huggingface.co	model_urlreturnc                     | j                  d      } | j                  d      r| dz  } | j                  d      s| dz  } | S )N/z/v1z/chat/completions/v1/chat/completions)rstripendswith)r   s    h/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/huggingface/chat/transformation.py_build_chat_completion_urlr      sO      %I % ((	 12++	    c                      e Zd ZdZ	 	 ddededee   dedede	e   d	e	e   d
efdZ
dededeeej                  f   d
efdZdede	e   d
e	e   fdZ	 dd	e	e   de	e   dededede	e   d
efdZdedee   dededed
efdZy)HuggingFaceChatConfigzQ
    Reference: https://huggingface.co/docs/huggingface_hub/guides/inference
    Nheadersmodelmessagesoptional_paramslitellm_paramsapi_keyapi_baser   c                 .    ddi}|d| |d<   i ||}|S )Nzcontent-typezapplication/jsonzBearer Authorization )	selfr   r   r    r!   r"   r#   r$   default_headerss	            r   validate_environmentz*HuggingFaceChatConfig.validate_environment.   s>     .
 18	/BOO,0W00r   error_messagestatus_codec                     t        |||      S )N)r,   messager   )r   )r(   r+   r,   r   s       r   get_error_classz%HuggingFaceChatConfig.get_error_classB   s      #]G
 	
r   base_urlc                     |j                  d      r|}|S |-t        j                  d      xs t        j                  dd      }|S )z
        Get the API base for the Huggingface API.

        Do not add the chat/embedding/rerank extension here. Let the handler do this.
        zhttp://zhttps://HF_API_BASEHUGGINGFACE_API_BASE )
startswithosgetenv)r(   r   r0   s      r   get_base_urlz"HuggingFaceChatConfig.get_base_urlI   sL     34H  yy/X299=SUW3XHr   streamc                    ||}t        |      }nt        j                  d      st        j                  d      r?t        t        j                  d            xs t        t        j                  d            }np|j	                  d      r|}t        |      }nQd}|j                  dd      \  }}	d|	v r6|}
|
dk(  r	|
 d| d	}n|
d
k(  r|
 d}n|
dk(  r|
 d}n|
 d	}t         d| }|j                  d      }|S )zr
        Get the complete URL for the API call.
        For provider-specific routing through huggingface
        r3   r4   r2   z1https://router.huggingface.co/v1/chat/completionsr      zhf-inferencez/models/r   novitaz/v3/openai/chat/completionszfireworks-aiz/inference/v1/chat/completions)r   r7   r8   strr6   splitBASE_URLr   )r(   r$   r#   r   r!   r"   r:   complete_url
first_part	remainingproviderroutes               r   get_complete_urlz&HuggingFaceChatConfig.get_complete_urlU   s    #L5lCLYY}%3I)Jryy78 C		01=L 56 L5lCL OL$)KKQ$7!J	i%~-'j7KLE)'j(CDE/'j(FGE'j(<=E"*1UG4#**3/r   c                    |j                  d      rt        t        d||d|      S d|v r't        j	                  d       |j                  dd        |j                  dd      \  }}|}d|v rU|}	|}
t        |
      }|	|vrt        d|
 d|	 d	i 
      ||	   }|d   dk(  rt        j	                  d|
 d|	 d       |d   }| j                  ||      }t        t        d||d|      S )Nr$   )r   r    max_retriesz3`max_retries` is not supported. It will be ignored.r   r<   zModel z is not supported for provider i  )r.   r,   r   statusstagingz! is in staging mode for provider z. Meant for test purposes only.
providerId)r    r   r'   )
getdictr
   loggerwarningpopr?   r   r   _transform_messages)r(   r   r    r!   r"   r   rB   rC   mapped_modelrD   model_idprovider_mappings               r   transform_requestz'HuggingFaceChatConfig.transform_request   s>    j)%XEHXX  O+NNPQt4 %C 3
I)!H H@J//&$XJ.MhZX # 
  09)Y6XJ&GzQpq ,L9L++X\+R! "X9H
 	
r   )NN)N)__name__
__module____qualname____doc__rM   r>   r   r	   r   r   r*   intr   httpxHeadersr   r/   r9   boolrF   rU   r'   r   r   r   r   )   se    "&"&  '(	
   # 3- 
(
 
/2
=B4CV=W
	

# 
# 
8C= 
& "&*3-* #* 	*
 * * * 
*X'
'
 '('
 	'

 '
 '
 
'
r   r   )loggingr7   typingr   r   r   r   r   r   r[   litellm.types.llms.openair	   r
   *litellm.litellm_core_utils.litellm_loggingr   LiteLLMLoggingObjLoggingClass)litellm.llms.base_llm.chat.transformationr   openai.chat.gpt_transformationr   common_utilsr   r   	getLoggerrV   rN   r@   r>   r   r   r'   r   r   <module>rh      sh     	 B B  MW$LL F = N			8	$*# # 
O 
r   