
     `iD                         d dl mZmZmZ 	 d dlZd dlm Z n&# e$ rZ	 G d d          Z
 ed          e	dZ	[	ww xY wddlmZ  G d d          Z
d	ej        d
ej        fdZd	ej        dej        d
ej        fdZdS )    )DictHashableListNc                        e Zd Zd Zd Zd ZdS )FormatEnforcerAnalyzerc                     d S N selfargskwargss      m/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/lmformatenforcer/analyzer.py__init__zFormatEnforcerAnalyzer.__init__       D    c                     d S r	   r
   r   s      r   report_raw_logitsz(FormatEnforcerAnalyzer.report_raw_logits	   r   r   c                     i S r	   r
   r   s      r   generate_report_dictz+FormatEnforcerAnalyzer.generate_report_dict   s    Ir   N)__name__
__module____qualname__r   r   r   r
   r   r   r   r      sA        	 	 		 	 		 	 	 	 	r   r   zoFormatEnforcerAnalyzer not available because numpy is not installed. Please install it with "pip install numpy"   )TokenEnforcerc                   `    e Zd ZdZdefdZdee         dej	        fdZ
dee         defdZd	S )
r   z>A helper class to help analyze the format enforcer's behavior.token_enforcerc                 "    || _         i | _        d S r	   )r   
raw_logits)r   r   s     r   r   zFormatEnforcerAnalyzer.__init__   s    ,9;r   output_tokenslogitsc                 4    || j         t          |          <   dS )zvReport what logits were generated for a specific token sequence. The logits must be before any processing / filtering.N)r   tuple)r   r    r!   s      r   r   z(FormatEnforcerAnalyzer.report_raw_logits   s    06m,,---r   returnc                     g }g }t          t          |                    D ]v}|d|         }t          |          }| j        v rR|                     j        |                    |                     j                            |          j                   wt          j	        |          }t          |          }|                    d          }	t          ||	          }
d  j        j        D             dt          dt          f fdfd|	D             }t          j        |t          j                   }t          |j        d	                   D ]}d	||         ||         <   ||z   }|                    d          }t          ||          }fd
|D             }i }||d<   |                                |d<   |                                |d<   ||d<   |	                                |d<   |
                                |d<   |S )z\Generate a report dict containing the analysis results for a specific output token sequence.Nr   axisc                     i | ]	\  }}}||
S r
   r
   ).0token_id	token_str_s       r   
<dictcomp>z?FormatEnforcerAnalyzer.generate_report_dict.<locals>.<dictcomp>+   s4      -C  -C  -CE[XyZ[Xy  -C  -C  -Cr   r*   r$   c                 R    | v r|          S j                             | g          S r	   )r   decoder)r*   r   single_token_dicts    r   single_token_decoderzIFormatEnforcerAnalyzer.generate_report_dict.<locals>.single_token_decoder,   s3    ,,,(22&..z:::r   c                 &    g | ]} |          S r
   r
   r)   idxr1   s     r   
<listcomp>z?FormatEnforcerAnalyzer.generate_report_dict.<locals>.<listcomp>1   %    QQQ//44QQQr   r   c                 &    g | ]} |          S r
   r
   r3   s     r   r5   z?FormatEnforcerAnalyzer.generate_report_dict.<locals>.<listcomp>;   r6   r   generated_tokengenerated_token_idxgenerated_scoreleading_tokenleading_token_idxleading_score)rangelenr#   r   appendr   get_allowed_tokensallowed_tokensnparray_softmaxargmax_select_arrayregular_tokensintstr	full_likeinfshapetolist)r   r    scores_matrixallowed_tokens_matrixr4   prefixprefix_tupler!   softmax_logitsoriginal_indicesoriginal_scoresoriginal_tokenspenalty_matrixrowenfored_softmax_logitsenforced_indicesenforced_scoresenforced_tokensdf_dictr1   r0   s   `                  @@r   r   z+FormatEnforcerAnalyzer.generate_report_dict   sp   -/13]++,, 	l 	lC"4C4(F ==Lt..$$T_\%BCCC%,,T-@-S-STZ-[-[-jkkk-((!&)))00a088'8HII -C  -C_c_r  `B  -C  -C  -C	;3 	;3 	; 	; 	; 	; 	; 	; 	;
 RQQQ@PQQQnrvg>>-a011 	@ 	@C>?N3 5c :;;!/.!@188a8@@'(>@PQQQQQQ@PQQQ%4!")9)@)@)B)B%&%4%;%;%=%=!"#2 '7'>'>'@'@#$#2#9#9#;#; r   N)r   r   r   __doc__r   r   r   rI   npt	ArrayLiker   dictr   r
   r   r   r   r      s        HH<} < < < <7tCy 7#- 7 7 7 7)$s) ) ) ) ) ) ) )r   arrr$   c                 ^    t          j        |           }|t          j        |dd          z  S )z6Compute softmax values for each sets of scores in arr.r   T)r'   keepdims)rC   expsum)rb   e_arrs     r   rE   rE   F   s+    F3KKE26%a$77777r   index_arrayc                     t          j        | t          j        |d          d                              d          S )Nr&   )rC   take_along_axisexpand_dimssqueeze)rb   rh   s     r   rG   rG   K   s;    c2>+B#G#G#GbQQQYY_aYbbbr   )typingr   r   r   numpyrC   numpy.typingr_   ImportErrorer    r   ndarrayrE   rG   r
   r   r   <module>ru      s`   ' ' ' ' ' ' ' ' ' 'P P P P        +  H  I  I  OP  PP      3 3 3 3 3 3 3 3j8"* 8 8 8 8 8
crz c
 crz c c c c c cs   
 :5: