o
    i                     @   s`   zd dl mZ W n ey   edw d dlZd dlmZmZ d dlmZ G dd deZ	dS )    )
PromptNodezMhaystack is not installed. Please install it with "pip install farm-haystack"N)CallableOptional)CharacterLevelParserc                       sn   e Zd ZdZG dd dejZdddee f fddZ	d	ee
 fd
dZd	efddZ fddZ  ZS )LMFormatEnforcerPromptNodez[A prompt node for Haystack V1 API that activates the LMFormatEnforcer on the generated textc                   @   s   e Zd ZdZdS )z$LMFormatEnforcerPromptNode.ModelTypeHFLocalInvocationLayerN)__name__
__module____qualname__HUGGINGFACE r   r   e/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/lmformatenforcer/integrations/haystackv1.py	ModelType   s    r   N)character_level_parserr   c                   s0   t  j|i | || _|  | _|  | _dS )a  Create a new prompt node that activates the LMFormatEnforcer on the generated text. See PromptNode
        documentation for all of the regular arguments.
        :param character_level_parser: A CharacterLevelParser that will be used to enforce the format of the generatedN)super__init__r   _resolve_model_type
model_type_prepare_token_enforcer_fntoken_enforcer_fn)selfr   argskwargs	__class__r   r   r      s   
z#LMFormatEnforcerPromptNode.__init__returnc                 C   sN   | j sd S | jtjjkr| jjjj}ddl	m
} ||| j S td| jj )Nr   )+build_transformers_prefix_allowed_tokens_fnz.Token enforcer not implemented for model type )r   r   r   r   r   prompt_modelmodel_invocation_layerpipe	tokenizer*lmformatenforcer.integrations.transformersr   NotImplementedErrorname)r   r    r   r   r   r   r      s   z5LMFormatEnforcerPromptNode._prepare_token_enforcer_fnc                 C   sR   | j jjj}zt|W S  ty(   ddd tjD }td| d| w )N,c                 s   s    | ]}t |jV  qd S )N)strr#   ).0tr   r   r   	<genexpr>'   s    zALMFormatEnforcerPromptNode._resolve_model_type.<locals>.<genexpr>zUnsupported invocation layer: z. Must be one of )r   r   r   r   r   r   
ValueErrorjoin)r   invocation_layer_namesupported_stringsr   r   r   r   "   s   
z.LMFormatEnforcerPromptNode._resolve_model_typec                    s@   t   }| jr| jtjjkrd|vri |d< | j|d d< |S )Ngeneration_kwargsprefix_allowed_tokens_fn)r   _prepare_model_kwargsr   r   r   r   r   )r   model_kwargsr   r   r   r/   +   s   
z0LMFormatEnforcerPromptNode._prepare_model_kwargs)r   r	   r
   __doc__enumEnumr   r   r   r   r   r   r   r/   __classcell__r   r   r   r   r   
   s    			r   )
haystack.nodesr   ImportErrorr2   typingr   r   lmformatenforcerr   r   r   r   r   r   <module>   s    