
    Ngq,                        d dl mZ d dlZd dlZd dlZd dlmZmZm	Z	m
Z
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 d dlmZmZmZ  ej        e          Z G d d	e          ZdS )
    )annotationsN)	AnyCallableDictIteratorListLiteralOptionalTupleUnion)CallbackManagerForLLMRun)LLM)GenerationChunk)	BaseModelFieldmodel_validatorc                     e Zd ZU dZdZded<   ded<   	 dZded	<   	 d
Zded<   	 dZded<   	 dZ	ded<   	 dZ
ded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	  ee          Zded<   	  ed          d0d"            Zd0d#Zed1d$            Zed2d%            Zed2d&            Zed3d'            Z	 	 d4d5d,Z	 	 d4d6d.Zed3d/            ZdS )7Outlinesz%LLM wrapper for the Outlines library.Nr   clientstrmodeltransformerszKLiteral['llamacpp', 'transformers', 'transformers_vision', 'vllm', 'mlxlm']backend   int
max_tokensOptional[List[str]]stopTbool	streamingzOptional[str]regexzOptional[Union[type, str]]type_constraintsz*Optional[Union[BaseModel, Dict, Callable]]json_schemagrammarzOptional[Any]custom_generator)default_factoryDict[str, Any]model_kwargsafter)modereturn
'Outlines'c                
   t          t          | j                  t          | j                  t          | j                  t          | j                  g          }|dk    rt          d          |                                 S )z@Validate that outlines is installed and create a model instance.   z_Either none or exactly one of regex, type_constraints, json_schema, or grammar can be provided.)sumr   r!   r"   r#   r$   
ValueErrorbuild_client)selfnum_constraintss     ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/outlines.pyvalidate_environmentzOutlines.validate_environment   s     TZ  T*++T%&&T\""	
 
 Q;     """    c                   	 dd l m} n# t          $ r t          d          w xY wdd}| j        dk    rfd	| j        v r'| j                            d
d          \  }}}| d
| }nt          d           |dg            |j        ||fi | j        | _	        n;| j        dk    r, |g d            |j
        | j        fi | j        | _	        n| j        dk    rR |g d           ddl
m} t          |d          st          d           |j        | j        fd|i| j        | _	        n| j        dk    rPt          j                    dk    rt          d           |dg            |j        | j        fi | j        | _	        nL| j        dk    r* |dg            |j        | j        fi | j        | _	        nt          d| j                   | S )Nr   zUCould not import the Outlines library. Please install it with `pip install outlines`.packages!List[Union[str, Tuple[str, str]]]r+   Nonec                    d | D             }|r;t          dd                    |           dd                    |                     d S )Nc                    g | ]^}t           j                            t          |t                    r|d          n|          	 ?t          |t
                    r|n|d         _S )r.   Nr   )	importlibutil	find_spec
isinstancetupler   ).0pkgs     r4   
<listcomp>zKOutlines.build_client.<locals>.check_packages_installed.<locals>.<listcomp>   sr          >++je6L6L,UCFFRUVV "#s++7Q  r6   zMissing packages: z, z.. You can install them with:

    pip install  )ImportErrorjoin)r8   missing_packagess     r4   check_packages_installedz7Outlines.build_client.<locals>.check_packages_installed   s       #        !D3C)D)D D D'*xx0@'A'AD D   r6   llamacppz.gguf/   z.GGUF file_name must be provided for llama.cpp.)zllama-cpp-python	llama_cppr   )r   torchdatasetstransformers_vision)r   rO   torchvisionPIL
flash_attn)!LlavaNextForConditionalGenerationzZtransformers_vision backend is not supported, please install the correct outlines version.model_classvllmDarwinz'vLLM backend is not supported on macOS.mlxlmmlxzUnsupported backend: )r8   r9   r+   r:   )outlines.modelsmodelsrF   r   r   splitr0   rJ   r(   r   r   rT   hasattrrP   platformsystemrV   rX   )r2   r[   rI   creator	repo_name	file_namerepo_idrT   s           r4   r1   zOutlines.build_client   s   	,,,,,,, 	 	 	A  		 	 	 	  <:%%$*$$04
0@0@a0H0H-I$22y22 !QRRR$$&G%HIII)&/'9RR@QRRDKK\^++$$%J%J%JKKK-&-djNND<MNNDKK\222$$PPP   GFFFFF6#899  C   5&4
 = # DKK
 \V##  H,, !JKKK$$fX...%&+djFFD4EFFDKK\W$$$$eW---&&,tzGGT5FGGDKKCT\CCDDDs   	 #c                    dS )Noutlines r2   s    r4   	_llm_typezOutlines._llm_type   s    zr6   c                .    | j         | j        d| j        S )N)r   stop_at)r   r   r(   rg   s    r4   _default_paramszOutlines._default_params   s*     /y
 
 
 	
r6   c                ^    | j         | j        | j        | j        | j        | j        d| j        S )N)r   r   r!   r"   r#   r$   )r   r   r!   r"   r#   r$   rk   rg   s    r4   _identifying_paramszOutlines._identifying_params   s@     Z|Z $ 5+|
 
 "
 	
r6   c                   ddl m} | j        r| j        S | j        r!|                    | j        | j                  S | j        r!|                    | j        | j                  S | j        r!|                    | j        | j                  S | j	        r!|
                    | j        | j	                  S |                    | j                  S )Nr   )generate)	regex_str)python_type)schema_object)cfg_str)re   ro   r%   r!   r   r"   formatr#   jsonr$   cfgtext)r2   ro   s     r4   
_generatorzOutlines._generator   s    %%%%%%  	)((: 	E>>$+>DDD  	S??4;D<Q?RRR 	N==D<L=MMM< 	C<<T\<BBB}}T[)))r6   promptrun_manager"Optional[CallbackManagerForLLMRun]kwargsc                    i | j         |}|r||d<   d}| j        r% | j        d||d         |d|D ]}||j        z  }n | j        |fi |}|S )Nrj    )ry   r   rz   rf   )rk   r    _streamrw   rx   )r2   ry   r   rz   r|   paramsresponsechunks           r4   _callzOutlines._call	  s     4D(3F3 	% $F9> 		9% I&'  	  ' ' EJ&' 'tv8888Hr6   Iterator[GenerationChunk]c              +     K   i | j         |}|r||d<    | j        j        |fi |D ]+}|r|                    |           t	          |          V  ,d S )Nrj   )rw   )rk   rx   streamon_llm_new_tokenr   )r2   ry   r   rz   r|   r   tokens          r4   r   zOutlines._stream!  s       4D(3F3 	% $F9+T_+F==f== 	. 	.E 4,,U333!u-------	. 	.r6   c                b    t          | j        d          r| j        j        S t          d          )zAccess the tokenizer for the underlying model.

        .encode() to tokenize text.
        .decode() to convert tokens back to text.
        	tokenizerzTokenizer not found)r]   r   r   r0   rg   s    r4   r   zOutlines.tokenizer1  s2     4;,, 	);((.///r6   )r+   r,   )r+   r   )r+   r'   )r+   r   )NN)
ry   r   r   r   rz   r{   r|   r   r+   r   )
ry   r   r   r   rz   r{   r|   r   r+   r   )__name__
__module____qualname____doc__r   __annotations__r   r   r   r    r!   r"   r#   r$   r%   r   dictr(   r   r5   r1   propertyrh   rk   rm   rx   r   r   r   rf   r6   r4   r   r      s[        //FJJJ 	      J3 $D$$$$@I8E 487777	 ?CKBBBB$ "G!!!!0 '+****R#(5#>#>#>L>>>> _'"""# # # #"#"? ? ? ?B    X 
 
 
 X
 	
 	
 	
 X	
 * * * X*$ %):>	    6 %):>	. . . . .  0 0 0 X0 0 0r6   r   )
__future__r   importlib.utilr=   loggingr^   typingr   r   r   r   r   r	   r
   r   r   langchain_core.callbacksr   #langchain_core.language_models.llmsr   langchain_core.outputsr   pydanticr   r   r   	getLoggerr   loggerr   rf   r6   r4   <module>r      s   " " " " " "       W W W W W W W W W W W W W W W W W W W W W W = = = = = = 3 3 3 3 3 3 2 2 2 2 2 2 6 6 6 6 6 6 6 6 6 6		8	$	$j0 j0 j0 j0 j0s j0 j0 j0 j0 j0r6   