
    +#h                     D    d dl Z d dlmZmZ d dlmZ d Z G d de      Zy)    N)LiteralOptional)LMc                      i }| j                         D ]?  \  }}|dk(  r||d<   |dk(  r	d|z
  |d<   |dk(  r||d<   *|dk(  r||d	<   5|d
k(  r;|||<   A |S )Nnnum_return_sequencesfrequency_penaltyg      ?repetition_penaltypresence_penaltydiversity_penalty
max_tokensmax_new_tokensmodel)items)kwargs	hf_kwargskvs       K/var/www/html/sandstorm/venv/lib/python3.12/site-packages/dsp/modules/hf.pyopenai_to_hfr      s    I 1801I,-%%.1AgI*+$$-.I)*,*+I&''\IaL     c                   p     e Zd Zddddi fdedee   deded   d	ee   d
ee   f fdZd Z	d Z
ddZ xZS )HFModelNFautor   
checkpoint	is_clienthf_device_map)r   balancedbalanced_low_0
sequentialtokenmodel_kwargsc                    t         |   |       d| _        || _        || _        t        |xs t        j                  j                  d            }|j                         }|j                         }	d|v r|j                  d       |	j                  |       | j                  s	 ddl}
ddlm}m}m}m} |
j)                  |
j*                  j-                         rd	nd
      | _        	  |j.                  |fi |j0                  d   d   }d|v xs d|v | _        d|v xs d|v | _        | j2                  s| j4                  s
J d|         |j.                  ||n|fi || _        d| _        | j2                  r|n|}|rjd| _        | j                  r% |j.                  |fd| j                  i|	| _        n |j.                  |fi |	j=                  | j(                        | _        nb| j                  r% |j.                  |fd| j                  i|	| _        n1 |j.                  |fi |	j=                  | j(                        | _        d| _        g | _!        yg | _!        y# t$        $ r}t'        d      |d}~ww xY w# t@        $ rX  |j.                  ||n|fd| j                  i|	| _        d| _         |j.                  |fi || _        d| _        Y g | _!        yw xY w)as  wrapper for Hugging Face models

        Args:
            model (str): HF model identifier to load and use
            checkpoint (str, optional): load specific checkpoints of the model. Defaults to None.
            is_client (bool, optional): whether to access models via client. Defaults to False.
            hf_device_map (str, optional): HF config strategy to load the model.
                Recommeded to use "auto", which will help loading large models using accelerate. Defaults to "auto".
            model_kwargs (dict, optional): additional kwargs to pass to the model constructor. Defaults to empty dict.
        hfHF_TOKEN)r!   
device_mapr   N)
AutoConfigAutoModelForCausalLMAutoModelForSeq2SeqLMAutoTokenizerzGYou need to install Hugging Face transformers library to use HF models.cudacpuarchitecturesConditionalGenerationT5WithLMHeadModelCausalLMGPT2LMHeadModelz!Unknown HuggingFace model class: TF)"super__init__providerr   r&   dictosenvirongetcopypopupdatetorchtransformersr'   r(   r)   r*   ImportErrorModuleNotFoundErrordevicer+   is_availablefrom_pretrained__dict__encoder_decoder_modeldecoder_only_model	tokenizer	rationaler   todrop_prompt_from_output
ValueErrorhistory)selfr   r   r   r   r!   r"   hf_autoconfig_kwargshf_autotokenizer_kwargshf_automodel_kwargsr<   r'   r(   r)   r*   excarchitectureAutoModelClass	__class__s                     r   r3   zHFModel.__init__   s=   2 	"'#%*M2::>>*3MN"6";";"=2779 <'\*""<0~~oo
  ,,1H1H1JvPUVDK?49z99 *  (? , -. / /F.U .'<7 * ,6+E*mK\`lKl'..$2I2I?6ug>?I!>!>!>'/EZ"-"
 "&:>:T:T!6Zn &+DN %C^%C%C&&'+& 2&
 &D^%C%C&&1& "T[[/ 

 %C^%C%C!&'+& 2&
 &D^%C%C!&1& "T[[/ 
 05, rK  )]r  4A1AA'/EZ# *

 04,!>!>!>"-" 04,4s,   'I% *E+J %	I?.I::I?AK#"K#c                     |}i | j                   |} | j                  |fi |}||||d}| j                  j                  |       |S )N)promptresponser   
raw_kwargs)r   	_generaterK   append)rL   rU   r   rW   rV   rK   s         r   basic_requestzHFModel.basic_request   s]    
*DKK*6*!4>>&3F3  $	
 	G$r   c                 H   | j                   rJ i t        di | j                  t        di |}t        |t              r	 |d   d   d   }| j                  |d      j                  | j                        } | j                  j                  di ||}| j                  r$|j                  j                   d   }|d d |d f   }| j                  j#                  |d	      D cg c]  }d
|i }}||d}|S # t
        t        t        f$ r t        d       Y w xY wc c}w )Nmessagesr   contentz,Failed to extract 'content' from the prompt.pt)return_tensors   T)skip_special_tokenstext)rU   choices )r   r   r   
isinstancer5   KeyError
IndexError	TypeErrorprintrF   rH   r@   r   generaterI   	input_idsshapebatch_decode)	rL   rU   r   inputsoutputsinput_lengthccompletionsrV   s	            r   rX   zHFModel._generate   s1   >>!!JL/4;;/J<3I&3IJfd#F
+A.y9 t<??L &$**%%99&9''!++11!4La./G,0NN,G,Gei,G,jkq{kk"
  j)4 FDEF ls   C: &D:DDc                     |sJ d       |du sJ d       |j                  dd      dkD  s|j                  dd      dkD  rd|d	<    | j                  |fi |}|d
   D cg c]  }|d   	 c}S c c}w )Nzfor nowFr   r`   temperatureg        g?T	do_samplerc   rb   )r8   request)rL   rU   only_completedreturn_sortedr   rV   rq   s          r   __call__zHFModel.__call__   s    (y(~%0y0%::c1!VZZs%Cc%I"&F;4<<1&1#+I#67a&	777s   A-)TF)__name__
__module____qualname__strr   boolr   r5   r3   rZ   rX   ry   __classcell__)rS   s   @r   r   r      s     %) #')oo SMo 	o
 
o }o tnob08r   r   )r6   typingr   r   dsp.modules.lmr   r   r   rd   r   r   <module>r      s#    
 $ 
&a8b a8r   