
    7|h}                     j    d dl mZ d dlmZ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  G d de      Zy)	    )partial)AnyDictListOptionalSequence)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LLM)pre_initc                   B   e Zd ZU dZeed<   eed<   	 dZee   ed<   	 dZ	ee   ed<   	 dZ
eeeef      ed<   	 dZee   ed<   	 ed	eeef   fd
       Zed	efd       Zeded	efd       Z	 	 ddedeee      dee   ded	ef
dZ	 	 ddedeee      dee   ded	ef
dZy)CTransformersa_  C Transformers LLM models.

    To use, you should have the ``ctransformers`` python package installed.
    See https://github.com/marella/ctransformers

    Example:
        .. code-block:: python

            from langchain_community.llms import CTransformers

            llm = CTransformers(model="/path/to/ggml-gpt-2.bin", model_type="gpt2")
    clientmodelN
model_type
model_fileconfiglibreturnc                 `    | j                   | j                  | j                  | j                  dS )zGet the identifying parameters.r   r   r   r   r   selfs    e/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/llms/ctransformers.py_identifying_paramsz!CTransformers._identifying_params-   s*     ZZ////kk	
 	
    c                      y)zReturn type of llm.ctransformers r   s    r   	_llm_typezCTransformers._llm_type7   s     r   valuesc                     	 ddl m} |d   xs i } |j                  |d   f|d   |d   |d   d	||d
<   |S # t        $ r t        d      w xY w)z5Validate that ``ctransformers`` package is installed.r   )AutoModelForCausalLMz\Could not import `ctransformers` package. Please install it with `pip install ctransformers`r   r   r   r   r   )r   r   r   r   )r   r#   ImportErrorfrom_pretrained)clsr!   r#   r   s       r   validate_environmentz"CTransformers.validate_environment<   s    	: !'R?/??7O
l+l+u	

 
x   	E 	s	   9 Apromptstoprun_managerkwargsc                     g }|xs t        j                         }| j                  ||d      D ]0  }|j                  |       |j	                  || j
                         2 dj                  |      S )aV  Generate text from a prompt.

        Args:
            prompt: The prompt to generate text from.
            stop: A list of sequences to stop generation when encountered.

        Returns:
            The generated text.

        Example:
            .. code-block:: python

                response = llm.invoke("Tell me a joke.")
        Tr)   streamverbose )r
   get_noop_managerr   appendon_llm_new_tokenr0   join)r   r(   r)   r*   r+   text_run_managerchunks           r   _callzCTransformers._callQ   sp    * "Q&>&O&O&Q[[d4[@ 	GEKK))%)F	G wwt}r   c                    K   d}|r!t        |j                  | j                        }d}| j                  ||d      D ]  }|r ||       d{    ||z  } |S 7 w)a  Asynchronous Call out to CTransformers generate method.
        Very helpful when streaming (like with websockets!)

        Args:
            prompt: The prompt to pass into the model.
            stop: A list of strings to stop generation when encountered.

        Returns:
            The string generated by the model.

        Example:
            .. code-block:: python
                response = llm.invoke("Once upon a time, ")
        Nr/   r1   Tr-   )r   r4   r0   r   )r   r(   r)   r*   r+   text_callbackr6   tokens           r   _acallzCTransformers._acallm   so     * #K$@$@$,,WM[[d4[@ 	E#E***EMD	
  +s   AAAA)NN)__name__
__module____qualname____doc__r   __annotations__strr   r   r   r   r   r   propertyr   r    r   r'   r   r
   r9   r   r	   r=   r   r   r   r   r      sa    KJ !%J$ $J$:'+FHT#s(^$+; C#H
T#s(^ 
 
 3   $ 4  . )-:>	 x}% 67	
  
> %)?C	 tCy! ;<	
  
r   r   N)	functoolsr   typingr   r   r   r   r   langchain_core.callbacksr	   r
   #langchain_core.language_models.llmsr   langchain_core.utilsr   r   r   r   r   <module>rJ      s)     6 6 4 )@C @r   