a
    bgq,                     @  s   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eZG dd	 d	eZdS )
    )annotationsN)	AnyCallableDictIteratorListLiteralOptionalTupleUnion)CallbackManagerForLLMRun)LLM)GenerationChunk)	BaseModelFieldmodel_validatorc                   @  sT  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dZded< eddd d!d"d#Zd d!d$d%Zedd!d&d'Zedd!d(d)Zedd!d*d+Zedd!d,d-Zd7ddd.ddd/d0d1Zd8ddd.dd2d/d3d4Zedd!d5d6ZdS )9Outlinesz%LLM wrapper for the Outlines library.Nr   clientstrmodeltransformerszKLiteral['llamacpp', 'transformers', 'transformers_vision', 'vllm', 'mlxlm']backend   int
max_tokensz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_factoryzDict[str, Any]model_kwargsafter)modez
'Outlines')returnc                 C  s@   t t| jt| jt| jt| jg}|dkr8t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)selfZnum_constraints r-   o/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/llms/outlines.pyvalidate_environment   s    zOutlines.validate_environmentc                 C  s  zdd l m} W n ty*   tdY n0 ddddd}| jdkrd	| jv rt| 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r(|g d ddl
m} t|ds
td|j| jfd|i| j| _	n| jdkrnt dkrJtd|dg |j| jfi | j| _	n@| 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`.z!List[Union[str, Tuple[str, str]]]None)packagesr'   c                 S  s6   dd | D }|r2t dd| dd| d S )Nc                 S  sD   g | ]<}t jt|tr |d  n|du rt|tr8|n|d qS )r(   Nr   )	importlibutil	find_spec
isinstancetupler   ).0pkgr-   r-   r.   
<listcomp>   s
   zKOutlines.build_client.<locals>.check_packages_installed.<locals>.<listcomp>zMissing packages: z, z.. You can install them with:

    pip install  )ImportErrorjoin)r1   Zmissing_packagesr-   r-   r.   check_packages_installed   s    z7Outlines.build_client.<locals>.check_packages_installedllamacppz.gguf/   z.GGUF file_name must be provided for llama.cpp.)zllama-cpp-pythonZ	llama_cppr   )r   Ztorchdatasetstransformers_vision)r   rA   ZtorchvisionZPILZ
flash_attn)!LlavaNextForConditionalGenerationzZtransformers_vision backend is not supported, please install the correct outlines version.Zmodel_classvllmDarwinz'vLLM backend is not supported on macOS.mlxlmZmlxzUnsupported backend: )Zoutlines.modelsmodelsr;   r   r   splitr*   r>   r$   r   r   rC   hasattrrB   platformsystemrD   rF   )r,   rG   r=   Zcreator	repo_name	file_nameZrepo_idrC   r-   r-   r.   r+      sV    







zOutlines.build_clientc                 C  s   dS )Noutlinesr-   r,   r-   r-   r.   	_llm_type   s    zOutlines._llm_typec                 C  s   | j | jd| jS )N)r   stop_at)r   r   r$   rO   r-   r-   r.   _default_params   s
    zOutlines._default_paramsc                 C  s$   | j | j| j| j| j| jd| jS )N)r   r   r   r   r    r!   )r   r   r   r   r    r!   rR   rO   r-   r-   r.   _identifying_params   s    zOutlines._identifying_paramsc                 C  s   ddl m} | jr| jS | jr0|j| j| jdS | jrH|j| j| jdS | jr`|j| j| jdS | j	rx|j
| j| j	dS || jS )Nr   )generate)Z	regex_str)Zpython_type)Zschema_object)Zcfg_str)rN   rT   r"   r   r   r   formatr    jsonr!   cfgtext)r,   rT   r-   r-   r.   
_generator   s    zOutlines._generatorz"Optional[CallbackManagerForLLMRun])promptr   run_managerkwargsr'   c                 K  sh   i | j |}|r||d< d}| jrR| jf ||d |d|D ]}||j7 }q@n| j|fi |}|S )NrQ    )rZ   r   r[   )rR   r   _streamrX   rY   )r,   rZ   r   r[   r\   paramsresponsechunkr-   r-   r.   _call	  s    
zOutlines._callzIterator[GenerationChunk]c                 k  sR   i | j |}|r||d< | jj|fi |D ]}|r@|| t|dV  q.d S )NrQ   )rX   )rR   rY   streamZon_llm_new_tokenr   )r,   rZ   r   r[   r\   r_   tokenr-   r-   r.   r^   !  s    
zOutlines._streamc                 C  s    t | jdr| jjS tddS )zAccess the tokenizer for the underlying model.

        .encode() to tokenize text.
        .decode() to convert tokens back to text.
        	tokenizerzTokenizer not foundN)rI   r   re   r*   rO   r-   r-   r.   re   1  s    zOutlines.tokenizer)NN)NN)__name__
__module____qualname____doc__r   __annotations__r   r   r   r   r   r   r    r!   r"   r   dictr$   r   r/   r+   propertyrP   rR   rS   rY   rb   r^   re   r-   r-   r-   r.   r      sB   

A    r   )
__future__r   importlib.utilr2   loggingrJ   typingr   r   r   r   r   r   r	   r
   r   Zlangchain_core.callbacksr   Z#langchain_core.language_models.llmsr   Zlangchain_core.outputsr   Zpydanticr   r   r   	getLoggerrf   loggerr   r-   r-   r-   r.   <module>   s   ,
