o
    Zh5                     @   sp   d dl mZmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZ G dd de	Zd	S )
    )AnyDictListOptionalUnion)CallbackManagerForLLMRun)BaseLLM)
Generation	LLMResult)pre_init)Fieldc                   @   sV  e Zd ZU dZdZeed< 	 dZeed< 	 dZeed< 	 dZ	e
eee f ed< 	 d	Ze
eeeef f ed
< 	 dZeed< 	 dZeed< 	 dZeed< 	 dZeed< 	 dZeed< dZeed< eedZeeef ed< 	 ededefddZedeeef fddZ		d$dee deee  dee dede f
d d!Z!edefd"d#Z"dS )%CTranslate2zCTranslate2 language model. 
model_pathtokenizer_namecpudevicer   device_indexdefaultcompute_typei   
max_length   sampling_topksampling_toppsampling_temperatureNclient	tokenizer)default_factoryctranslate2_kwargsvaluesreturnc                 C   s   zddl }W n ty   tdw zddl}W n ty#   tdw |jd|d |d |d |d d	|d
 |d< |j|d |d< |S )z3Validate that python package exists in environment.r   Nz^Could not import ctranslate2 python package. Please install it with `pip install ctranslate2`.z`Could not import transformers python package. Please install it with `pip install transformers`.r   r   r   r   )r   r   r   r   r   r   r   r    )ctranslate2ImportErrortransformers	GeneratorZAutoTokenizerZfrom_pretrained)clsr   r"   r$   r!   r!   [/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/llms/ctranslate2.pyvalidate_environment6   s4   
z CTranslate2.validate_environmentc                 C   s   | j | j| j| jdS )zGet the default parameters.r   r   r   r   r)   selfr!   r!   r'   _default_paramsX   s
   zCTranslate2._default_paramspromptsstoprun_managerkwargsc                    s   i  j |} |d } fdd|D } jj|fi |}dd |D }	 fdd|	D }
g }|
D ]}|t|dg q5t|dS )NZ	input_idsc                       g | ]} j |qS r!   )r   Zconvert_ids_to_tokens).0Zencoded_promptr*   r!   r'   
<listcomp>n   s    
z)CTranslate2._generate.<locals>.<listcomp>c                 S   s   g | ]}|j d  qS )r   )Zsequences_ids)r2   resultr!   r!   r'   r3   u   s    c                    r1   r!   )r   decode)r2   seqr*   r!   r'   r3   v   s    )text)generations)r,   r   r   Zgenerate_batchappendr	   r
   )r+   r-   r.   r/   r0   paramsZencoded_promptsZtokenized_promptsresults	sequencesZdecoded_sequencesr8   r7   r!   r*   r'   	_generateb   s   

zCTranslate2._generatec                 C   s   dS )zReturn type of llm.r"   r!   r*   r!   r!   r'   	_llm_type~   s   zCTranslate2._llm_type)NN)#__name__
__module____qualname____doc__r   str__annotations__r   r   r   r   intr   r   r   r   r   r   floatr   r   r   r   r   dictr   r   r(   propertyr,   r   r   r
   r=   r>   r!   r!   r!   r'   r   
   sV   
 !

r   N)typingr   r   r   r   r   Zlangchain_core.callbacksr   Z#langchain_core.language_models.llmsr   Zlangchain_core.outputsr	   r
   Zlangchain_core.utilsr   Zpydanticr   r   r!   r!   r!   r'   <module>   s    