
    rh$%                     l   d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZmZmZmZ d d	lmZmZ d d
lmZmZmZmZ  G d de      Z G d de      Z G d de      Z de!de!fdZ" ed      dee!ee!   f   fd       Z# ed      de!de!ddfd       Z$ G d de      Z%y)    N)	lru_cache)Path)AnyDictOptionalUnion)urlparse
urlunparse)	constants)InferenceProviderMapping)RequestParameters_b64_encode_bytes_to_dict_open_as_binary)TaskProviderHelperfilter_none)build_hf_headersget_session	get_tokenhf_raise_for_statusc            	            e Zd ZdZdef fdZdee   defdZdee   defdZ	ded	edefd
Z
dedededee   fdZ xZS )HFInferenceTaskz&Base class for HF Inference API tasks.taskc                 f    t         |   dt        j                  j	                  d      |       y )Nhf-inferenceprovider)r   base_urlr   )super__init__r   INFERENCE_PROXY_TEMPLATEformat)selfr   	__class__s     /var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/huggingface_hub/inference/_providers/hf_inference.pyr    zHFInferenceTask.__init__   s2    #77>>>W 	 	
    api_keyreturnc                     |xs
 t               S N)r   )r#   r'   s     r%   _prepare_api_keyz HFInferenceTask._prepare_api_key   s    %)+%r&   modelc                 @   |+|j                  d      rt        d||| j                  d      S ||n"t               j	                  | j                        }|t        d| j                   d      t        || j                         t        d||| j                  d      S )Nzhttp://zhttps://r   live)r   
providerIdhf_model_idr   statuszTask z has no recommended model for HF Inference. Please specify a model explicitly. Visit https://huggingface.co/tasks for more info.)
startswithr   r   _fetch_recommended_modelsget
ValueError_check_supported_task)r#   r,   model_ids      r%   _prepare_mapping_infoz%HFInferenceTask._prepare_mapping_info   s    !1!12I!J+'EuSWS\S\ek  "-53L3N3R3RSWS\S\3]		{ #Q Q  	h		2'#hUYU^U^gm
 	
r&   mapped_modelc                     |j                  d      r|S | j                  dv r| j                   d| d| j                   S | j                   d| S )Nr.   feature-extractionzsentence-similarity/models/z
/pipeline/)r3   r   r   )r#   r'   r:   s      r%   _prepare_urlzHFInferenceTask._prepare_url,   sb    ""#:; yyII }}oXl^:dii[I	

 MM?(<.9	
r&   inputs
parametersprovider_mapping_infoc                     t        |t              rt        d| j                   d      t        |t              rt        d| j                   d| d      t        ||d      S )N!Unexpected binary input for task .Unexpected path input for task  (got )r@   rA   
isinstancebytesr6   r   r   r   r#   r@   rA   rB   s       r%   _prepare_payload_as_dictz(HFInferenceTask._prepare_payload_as_dict8   sb     fe$@1MNNfd#>tyykPVxWXYZZfJGHHr&   )__name__
__module____qualname____doc__strr    r   r+   r   r9   r?   r   r   rN   __classcell__r$   s   @r%   r   r      s    0
S 
& &# &
8C= 
=U 
 

C 

s 

s 

II'+ID\I	$Ir&   r   c                   R    e Zd Zdedededee   fdZdedededee   dee   f
dZ	y)	HFInferenceBinaryInputTaskr@   rA   rB   r(   c                      y r*    rM   s       r%   rN   z3HFInferenceBinaryInputTask._prepare_payload_as_dictC   s     r&   extra_payloadc                    t        |      }|xs i }t        |      dkD  xs t        |      dkD  }t        |t        t        f      st        |t
              st        d|       |s9t        |      5 }t        |t              r|n|j                         }|cd d d        S t        j                  t        |      |d|      j                  d      S # 1 sw Y   ;xY w)Nr   z5Expected binary inputs or a local path or a URL. Got rI   zutf-8)r   lenrK   rL   r   rS   r6   r   readjsondumpsr   encode)r#   r@   rA   rB   rZ   has_parametersdatadata_as_bytess           r%   _prepare_payload_as_bytesz4HFInferenceBinaryInputTask._prepare_payload_as_bytesH   s     !,
%+Z1,FM0BQ0F &5$-0FC9PTU[T\]^^  ( %D(24(?TYY[$% %
 zz[%8
dVcdellmtuu% %s   1$CCN)
rO   rP   rQ   r   r   r   r   rN   rL   rd   rY   r&   r%   rW   rW   B   sn    '+D\	$
vv v  8	v
  ~v 
%vr&   rW   c            	       P     e Zd Z fdZdedededee   fdZde	de	de	fd	Z
 xZS )
HFInferenceConversationalc                 $    t         |   d       y )Nconversationalr   r    r#   r$   s    r%   r    z"HFInferenceConversational.__init__b   s    )*r&   r@   rA   rB   r(   c                    t        |      }|j                  }|j                  d      xs |}||j                  d      rd}|j                  d      }t	        |t
              r"|j                  d      dk(  rd|d   d   d	|d<   i |||d
S )Nr,   r.   dummyresponse_formattypejson_schemajson_objectschema)rn   value)r,   messages)r   provider_idr5   r3   rK   dict)r#   r@   rA   rB   payloadr:   payload_modelrm   s           r%   rN   z2HFInferenceConversational._prepare_payload_as_dicte   s     j),88"w/?< M$<$<=T$U#M$..):;ot,1D1DV1LP]1]%(7A*G%& G'FMvFFr&   r'   r:   c                     |j                  d      r|n$t        j                  j                  d       d| }t	        |      S )Nr.   r   r   r>   )r3   r   r!   r"   _build_chat_completion_url)r#   r'   r:   r   s       r%   r?   z&HFInferenceConversational._prepare_urlw   sP     &&'>? 66==~=VWW_`l_mn 	
 *(33r&   )rO   rP   rQ   r    r   r   r   r   rN   rS   r?   rT   rU   s   @r%   rf   rf   a   sP    +GG'+GD\G	$G$4C 4s 4s 4r&   rf   	model_urlr(   c                     t        |       }|j                  j                  d      }|j                  d      r| S |j                  d      r|dz   }n
|sd}n|dz   }t	        |j                  |            S )N/z/chat/completionsz/v1z/v1/chat/completions)path)r	   r}   rstripendswithr
   _replace)rz   parsedr}   new_paths       r%   ry   ry      s{    i F;;c"D }}() }}U--) 00 foo8o455r&      )maxsizec                     t               j                  t        j                   dt	                     } t        |        | j                         j                         D ci c]  \  }}|t        t        |d         d         c}}S c c}}w )Nz
/api/tasks)headerswidgetModels)
r   r5   r   ENDPOINTr   r   r^   itemsnextiter)responser   detailss      r%   r4   r4      ss    }  I$6$6#7z!BL\L^ _H!QYQ^Q^Q`QfQfQhigD$tGN34d;;iiis   !#Br,   r   c                    ddl m}  |       j                  |       }|j                  }|j                  xs g }d|v }|dv r |dk(  r|ry |dk(  ry t        d|  d| d      |d	k(  r|dk(  ry t        d|  d| d      |d
k(  r|r|dk(  ry t        d      |dv r	|dv r||v ry ||k7  rt        d|  d| d| d| d	      y )Nr   )HfApirh   )text-generationrh   r   zModel 'z' doesn't support task 'z'.ztext2text-generationzimage-text-to-textz<Non-conversational image-text-to-text task is not supported.r<   z'. Supported tasks: 'z	', got: '')huggingface_hub.hf_apir   
model_infopipeline_tagtagsr6   )r,   r   r   r   r   r   is_conversationals          r%   r7   r7      s.   ,##E*J**L?? bD(D044,, ((wug-EdV2NOO--$$75')A$rJKK++)9!9WXX 	==IIDL 	 teW4TF:OP\~]fgkfllmn
 	
 r&   c            	       b     e Zd Z fdZdedededee   fdZd
de	e
ef   dee   defd	Z xZS ) HFInferenceFeatureExtractionTaskc                 $    t         |   d       y )Nr=   ri   rj   s    r%   r    z)HFInferenceFeatureExtractionTask.__init__   s    -.r&   r@   rA   rB   r(   c                     t        |t              rt        d| j                   d      t        |t              rt        d| j                   d| d      d|it        |      S )NrD   rE   rF   rG   rH   r@   rJ   rM   s       r%   rN   z9HFInferenceFeatureExtractionTask._prepare_payload_as_dict   si     fe$@1MNNfd#>tyykPVxWXYZZ &<K
$;<<r&   r   request_paramsc                 <    t        |t              rt        |      S |S r*   )rK   rL   r   )r#   r   r   s      r%   get_responsez-HFInferenceFeatureExtractionTask.get_response   s    h&!(++r&   r*   )rO   rP   rQ   r    r   r   r   r   rN   r   rL   r   r   rT   rU   s   @r%   r   r      s[    /
=
='+
=D\
=	$
=U5$;%7 RcId ps r&   r   )&r^   	functoolsr   pathlibr   typingr   r   r   r   urllib.parser	   r
   huggingface_hubr   r   r   !huggingface_hub.inference._commonr   r   r   r   ,huggingface_hub.inference._providers._commonr   r   huggingface_hub.utilsr   r   r   r   r   rW   rf   rS   ry   r4   r7   r   rY   r&   r%   <module>r      s       - - - % ; m m X _ _1I( 1Ihv v>4 4>6# 6# 6, 1j4Xc](:#; j j 4( (C (D ( (V r&   