
     `i                         	 d dl mZ d dlmZ n# e$ r  ed          w xY wd dlZd dlmZmZm	Z	m
Z
mZ d dlmZ  G d dej                  Ze G d	 d
                      ZdS )    )	component)	Componentzihaystack is not installed. Please install it with "pip install farm-haystack" or "pip install haystack-aiN)AnyCallableDictListOptional)CharacterLevelParserc                       e Zd ZdZdS )
_ModelTypeHuggingFaceLocalGeneratorN)__name__
__module____qualname__HUGGINGFACE     |/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/lmformatenforcer/integrations/haystackv2.pyr   r      s        -KKKr   r   c            	           e Zd ZdZddedee         fdZ ej	        e
e                   ddedeeeef                  fd	            Zd
 Zdee         fdZdefdZd Zd ZdS )LMFormatEnforcerLocalGeneratorzA generator component for Haystack V2 API that activates the LMFormatEnforcer on the generated text. 
    It wraps a local generator, and should be added to the pipeline instead of itNmodel_componentcharacter_level_parserc                 b    || _         || _        |                                 | _        d| _        dS )zInitialize the generator component
        :param model_component: A local generator component to wrap
        :param character_level_parser: A CharacterLevelParser that will be used to enforce the format of the generatedN)r   r   _resolve_model_type_model_typetoken_enforcer_fn)selfr   r   s      r   __init__z'LMFormatEnforcerLocalGenerator.__init__   s6      /&<#335559r   )repliespromptgeneration_kwargsc                     	 |                                   i }|r||d<    | j        j        |fi ||                                  S # |                                  w xY w)Nr!   )_inject_enforcer_into_modelr   run_release_model_injection)r   r    r!   kwargss       r   r$   z"LMFormatEnforcerLocalGenerator.run   sz    	,,,...F  @.?*++4'+F==f==))++++D))++++s   /A Ac                     t          | j        d          r| j                                         |                                 | _        d S )Nwarm_up)hasattrr   r(   _prepare_token_enforcer_fnr   r   s    r   r(   z&LMFormatEnforcerLocalGenerator.warm_up(   sF    4'33 	+ ((***!%!@!@!B!Br   returnc                     | j         sd S | j        t          j        k    r(| 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   pipeline	tokenizer*lmformatenforcer.integrations.transformersr.   NotImplementedErrorname)r   r0   r.   s      r   r*   z9LMFormatEnforcerLocalGenerator._prepare_token_enforcer_fn-   sw    * 	4z555,5?Innnnnn>>y$Jefff!"jSWScSh"j"jkkkr   c                     | j         j        j        }	 t          |          S # t          $ r: d                    d t          D                       }t	          d| d|           w xY w)N,c              3   >   K   | ]}t          |j                  V  d S N)strr3   ).0ts     r   	<genexpr>zELMFormatEnforcerLocalGenerator._resolve_model_type.<locals>.<genexpr>;   s*      (I(IQV(I(I(I(I(I(Ir   z-Unsupported local generator component layer: z. Must be one of )r   	__class__r   r   
ValueErrorjoin)r   generator_component_namesupported_stringss      r   r   z2LMFormatEnforcerLocalGenerator._resolve_model_type6   s    #'#7#A#J 	D6777 	D 	D 	D #(I(Ij(I(I(I I I CMe C C/@C C D D D	Ds
   " AA&c                 n    | j         sd S | j        t          j        k    r| j         | j        j        d<   d S d S Nprefix_allowed_tokens_fnr   r   r   r   r   r!   r+   s    r   r#   z:LMFormatEnforcerLocalGenerator._inject_enforcer_into_model?   sE    % 	Fz555QUQgD 23MNNN 65r   c                 `    | j         sd S | j        t          j        k    r| j        j        d= d S d S rB   rD   r+   s    r   r%   z7LMFormatEnforcerLocalGenerator._release_model_injectionF   s@    % 	Fz555$67QRRR 65r   r7   )r   r   r   __doc__r   r	   r
   r   r   output_typesr   r8   r   r   r$   r(   r   r*   r   r   r#   r%   r   r   r   r   r      s       U U: :	 :8ThKi : : : : YDI..., ,# ,(4S>2J , , , /.,C C C
lHX,> l l l lDZ D D D Dh h hS S S S Sr   r   )haystackr   canalsr   ImportErrorenumtypingr   r   r   r   r	   lmformatenforcerr
   Enumr   r   r   r   r   <module>rO      s)  C""""""        C C C
+  B  C  C  CC  6 6 6 6 6 6 6 6 6 6 6 6 6 6 1 1 1 1 1 1. . . . . . . . 9S 9S 9S 9S 9S 9S 9S 9S 9S 9Ss     