
    Ng}                     r    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dS )	    )partial)AnyDictListOptionalSequence)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LLM)pre_initc                      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dS )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                 8    | j         | j        | j        | j        dS )zGet the identifying parameters.r   r   r   r   r   selfs    b/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/ctransformers.py_identifying_paramsz!CTransformers._identifying_params-   s'     Z//k	
 
 	
    c                     dS )zReturn type of llm.ctransformers r   s    r   	_llm_typezCTransformers._llm_type7   s	     r   valuesc                     	 ddl m} n# t          $ r t          d          w xY w|d         pi } |j        |d         f|d         |d         |d         d	||d
<   |S )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    	::::::: 	 	 	E  	 !'R?/?7O
l+l+u	
 

 
 
x s   	 #promptstoprun_managerkwargsc                     g }|pt          j                    }|                     ||d          D ]3}|                    |           |                    || j                   4d                    |          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   s    * "Q&>&O&Q&Q[[d4[@@ 	G 	GEKK))%)FFFFwwt}}r   c                    K   d}|rt          |j        | j                  }d}|                     ||d          D ]}|r ||           d{V  ||z  }|S )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   s      *  	X#K$@$,WWWM[[d4[@@ 	 	E +#mE*********EMDDr   )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      s          KKKJJJ !%J$$$ $J$$$:'+FHT#s(^$+++; C#H
T#s(^ 
 
 
 X
 3    X $ 4    X. )-:>	  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 6 6 6 6 6 6 6 6 6 6 6 6        4 3 3 3 3 3 ) ) ) ) ) )@ @ @ @ @C @ @ @ @ @r   