
    7|h,                        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j4                  e      Z G d d	e      Zy)
    )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      d)d        Zd)d!Zed*d"       Zed+d#       Zed+d$       Zed,d%       Z	 	 d-	 	 	 	 	 	 	 	 	 d.d&Z	 	 d-	 	 	 	 	 	 	 	 	 d/d'Zed,d(       Zy)0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)modec                    t        t        | j                        t        | j                        t        | j                        t        | j
                        g      }|dkD  rt        d      | j                         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/test/engine/venv/lib/python3.12/site-packages/langchain_community/llms/outlines.pyvalidate_environmentzOutlines.validate_environment   st     TZZ T**+T%%&T\\"	
 Q;    ""    c                2   	 dd l m} 	 	 	 	 dd}| j                  dk(  rod| j                  v r(| j                  j                  dd      \  }}}| d| }nt        d       |d	g        |j                  ||fi | j                  | _	        | S | j                  d
k(  r8 |g d        |j                  | j                  fi | j                  | _	        | S | j                  dk(  rW |g d       ddl
m} t        |d      st        d       |j                  | j                  fd|i| j                  | _	        | S | j                  dk(  rYt        j                         dk(  rt        d       |dg        |j                   | j                  fi | j                  | _	        | S | j                  dk(  r7 |dg        |j"                  | j                  fi | j                  | _	        | S t        d| j                         # t        $ r t        d      w xY w)Nr   zUCould not import the Outlines library. Please install it with `pip install outlines`.c           	     "   | D cg c]N  }t         j                  j                  t        |t              r|d   n|      	 t        |t
              r|n|d   P }}|r/t        ddj                  |       ddj                  |             y c c}w )Nr,   r   zMissing packages: z, z.. You can install them with:

    pip install  )	importlibutil	find_spec
isinstancetupler   ImportErrorjoin)packagespkgmissing_packagess      r2   check_packages_installedz7Outlines.build_client.<locals>.check_packages_installed   s    
 $ >>++je6LCFRUV "#s+Q7     !(3C)D(E F''*xx0@'A&BD    s   ABllamacppz.gguf/   z.GGUF file_name must be provided for llama.cpp.)zllama-cpp-python	llama_cppr   )r   torchdatasetstransformers_vision)r   rH   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: )r?   z!List[Union[str, Tuple[str, str]]]returnNone)outlines.modelsmodelsr=   r   r   splitr.   rC   r(   r   r   rM   hasattrrI   platformsystemrO   rQ   )r0   rV   rB   creator	repo_name	file_namerepo_idrM   s           r2   r/   zOutlines.build_client   s>   	,	7		  <<:%$**$04

0@0@a0H-I$IQyk2 !QRR$&G%HI)&//'9R@Q@QRDKJ I \\^+$%JK-&--djjND<M<MNDKD C \\22$ G6#89 C  5&44

= ##DK   \\V# H, !JKK$fX.%&++djjFD4E4EFDK  \\W$$eW-&&,,tzzGT5F5FGDK  4T\\NCDDA  	A 	s   H Hc                     y)Noutlines r0   s    r2   	_llm_typezOutlines._llm_type   s    r4   c                L    | j                   | j                  d| j                  S )N)r   stop_at)r   r   r(   rb   s    r2   _default_paramszOutlines._default_params   s,     //yy
 
 	
r4   c                    | j                   | j                  | j                  | j                  | j                  | j
                  d| j                  S )N)r   r   r!   r"   r#   r$   )r   r   r!   r"   r#   r$   rf   rb   s    r2   _identifying_paramszOutlines._identifying_params   sL     ZZ||ZZ $ 5 5++||
 ""
 	
r4   c                   ddl m} | j                  r| j                  S | j                  r'|j                  | j                  | j                        S | j
                  r'|j                  | j                  | j
                        S | j                  r'|j                  | j                  | j                        S | j                  r'|j                  | j                  | j                        S |j                  | j                        S )Nr   )generate)	regex_str)python_type)schema_object)cfg_str)r`   rj   r%   r!   r   r"   formatr#   jsonr$   cfgtext)r0   rj   s     r2   
_generatorzOutlines._generator   s    %  (((::>>$++>DD  ??4;;D<Q<Q?RR==D<L<L=MM<<<<T\\<BB}}T[[))r4   c                    i | j                   |}|r||d<   d}| j                  r/ | j                  d||d   |d|D ]  }||j                  z  } |S  | j                  |fi |}|S )Nre    )promptr   run_managerra   )rf   r    _streamrr   rs   )r0   rv   r   rw   kwargsparamsresponsechunks           r2   _callzOutlines._call  s     4D((3F3 $F9>>% I&' 	 ' EJJ&'  'tv88Hr4   c              +     K   i | j                   |}|r||d<    | j                  j                  |fi |D ]#  }|r|j                  |       t	        |       % y w)Nre   )rr   )rf   rs   streamon_llm_new_tokenr   )r0   rv   r   rw   ry   rz   tokens          r2   rx   zOutlines._stream'  sk      4D((3F3 $F9+T__++F=f= 	.E,,U3!u--	.s   AAc                p    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)rX   r   r   r.   rb   s    r2   r   zOutlines.tokenizer7  s.     4;;,;;(((.//r4   )rS   z
'Outlines')rS   r   )rS   r'   )rS   r   )NN)
rv   r   r   r   rw   "Optional[CallbackManagerForLLMRun]ry   r   rS   r   )
rv   r   r   r   rw   r   ry   r   rS   zIterator[GenerationChunk])__name__
__module____qualname____doc__r   __annotations__r   r   r   r    r!   r"   r#   r$   r%   r   dictr(   r   r3   r/   propertyrc   rf   rh   rs   r}   rx   r   ra   r4   r2   r   r      s   /FCJ 	    J3 $D
$@It8E= 4807	 ?CK;B$ "G]!0 '+m*R#(#>L.> '"# ##"EN   
 
 	
 	
 * *$ %):>	 " 8	
  
6 %):>	.. ". 8	.
 . 
#.  0 0r4   r   )
__future__r   importlib.utilr8   loggingrY   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   ra   r4   r2   <module>r      sI    "    W W W = 3 2 6 6			8	$p0s p0r4   