o
    i                     @   s  d dl Z d dlmZmZmZmZmZ d dlZd dlZd dl	m
Z
 d dlm
  mZ d dlmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dl m!Z!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z( d dlm)Z) d dl*Z*ej+ej,ej-dZ.e(/ddG dd de
j0Z1e(/ddG dd de
j0Z2e(/ddG dd de2Z3e(/ddG dd de
j0Z4dS )    N)UnionDictListTupleOptional)autocast)sequence_mask)LabelSmoothingLoss)CTC)add_sos_eos)th_accuracycompute_accuracy)ErrorCalculator)force_gatherable)load_audio_text_image_videoextract_fbank)postprocess_utils)DatadirWriter)tables)	to_device)bf16fp16fp32model_classesLLMASRc                9       sV  e Zd ZdZ																								
					
d=dedededededededededededededededededed ed!ed"ed#ed$ed%ed&ed'ed(ed)ef8 fd*d+Z	d,e
jd-e
jd.e
jd/e
jd0e
jd1e
jd2e
jd3e
jd4e
jd5ee
jeee
jf e
jf fd6d7Zd,e
jd-e
jfd8d9Z				d>d:efd;d<Z  ZS )?r    N      ?P   r                 FT<space><blank>specaugspecaug_conf	normalizenormalize_confaudio_encoderaudio_encoder_confaudio_adaptoraudio_adaptor_confdecoderdecoder_confctcctc_conf
ctc_weightllmllm_conf
input_size
vocab_size	ignore_idblank_idsoseos
lsm_weightlength_normalized_loss
report_cer
report_wer	sym_space	sym_blankshare_embeddingc           -         s  t    |d urtj|}|di |}|d ur'tj|}|di |}|dd } | dkrGddlm}! |!|dd}"|"jj	}#|"jjj
}n| dkrLntj|}$|$dd|i|}| }#|d	d
}%|%rw| D ]\}&}'d|'_qk|  || _|dd} d | _| dkrddlm}(m})m}* |dd}+|(j|+d d d d}"|d	d
}%|%r|" D ]\}&}'d|'_q|"  |"| _tj|},|#|d< |,di |}|| _|| _|d ur|n|d | _|d ur|n|d | _|| _|| _|| _|| _t ||||d| _!d | _"|| _#d | _$d S )Nhubmsr   	AutoModelmastermodelmodel_revisionhfr3   freezeTFAutoModelForCausalLMAutoTokenizer
AutoConfiginit_param_pathvicuna-7b-v1.5load_in_8bit
device_map	use_cacheencoder_dimr   )sizepadding_idx	smoothingnormalize_length )%super__init__r   specaug_classesgetnormalize_classesfunasrrC   rF   encoder_output_sizeencoderencoder_classesoutput_sizenamed_parametersrequires_gradevalr(   r1   transformersrK   rL   rM   from_pretrainedadaptor_classesr*   r6   r7   r8   r4   r5   r$   r&   r	   criterion_atterror_calculatorr:   beam_search)-selfr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   kwargsspecaug_classnormalize_classr@   rC   rF   audio_encoder_output_sizeencoder_classrI   nameparamrK   rL   rM   rN   adaptor_class	__class__rY   O/home/ubuntu/.local/lib/python3.10/site-packages/funasr/models/llm_asr/model.pyr[      sz   
$
zLLMASR.__init__speechspeech_lengthstexttext_lengths	input_idsattention_mask
labels_ids
label_mask
audio_maskreturnc
                 K   s  t | dkr|dddf }t | dkr |dddf }|jd }| ||\}}| |}d||dk< d||dk< t| jjdrM| jj|}nt| jjjdr^| jjj|}n	| jjjj|}|	dur|j\}}}|j\}}}t	j
|ddd|| ddfdd}||	dddddf  |d	|	dddddf    }| j|||d
}|j}i }t * t|jd}t|ddddf |ddddf dd}||d< W d   n1 sw   Y  t| |d< | jrt|d  }t|||f|j\}}}|||fS )Encoder + Decoder + Calc loss
        Args:
                speech: (Batch, Length, ...)
                speech_lengths: (Batch, )
                text: (Batch, Length)
                text_lengths: (Batch,)
        r   Nr   r   embed_tokensr!   )value      ?inputs_embedsr~   labelsignore_labelaccloss)lenrU   shapeencoder*   hasattrr1   rF   r   Fpadr   torchno_gradargmaxlogitsr   clonedetachr:   intsumr   device)rm   ry   rz   r{   r|   r}   r~   r   r   r   rn   
batch_sizeencoder_outencoder_out_lensr   	token_numdims_lencoder_outs_padmodel_outputsr   statspredsacc_attweightrY   rY   rx   forward   sH   

 
.

zLLMASR.forwardc                 K   sR   | ddd}| |}t|ttfr |d |d }}||fS ||}}||fS Nr   r    r   )permuter(   
isinstancelisttuple)rm   ry   rz   rn   resr   r   rY   rY   rx   r      s   

zLLMASR.encodekeyc                 K   sF  | dd}| dddkrtdi }t|tjrC| dddkrC||}	}
t|	jd	k r9|	d d d d d f }	|
d u rB|	jd }
nKt }t	||j
| d
d| dd|d}t }|| d|d< t|| dd|d\}	}
t }|| d|d< |
  |j |j d |d< |	j|d d}	|
j|d d}
| |	|
\}}| |}d|}||}t|}tj|tjd|d }t| jjdr| jj|}nt| jjjdr| jjj|}n	| jjjj|}tj|d d d d d f |fdd}tj| d d tjd|d }| jj|| dd| dd| dd| dd | d!d| d"d#| d$d#| d%d#| d&d#||j|j |j!d'}|j"|d d(d)}|d* #d+d }|$ }d }| d,d urt| d-s|t%| d,| _&| j&d d. }g }|d* |d/}|'| |d ur||d0 |d* < ||fS )1NpromptzTranscribe speech to text.r   r   !batch decoding is not implemented	data_typesoundfbank   fsi>  )r   audio_fsr   	tokenizer0.3f	load_data)r   frontendextract_feat  batch_data_timer   )r   zUSER: 
INSTRUCTION: {}
INPUT: dtyper   )dimr   
max_length   max_new_tokens	num_beams   	do_sampleF
min_lengthtop_pr   repetition_penaltylength_penaltytemperature)r   r   r   r   r   r   r   r   r   r   r~   bos_token_ideos_token_idpad_token_idTadd_special_tokensskip_special_tokensr   z: 
output_dirwriter
best_recog)r   r{   r{   )(r]   NotImplementedErrorr   r   Tensorr   r   timeperf_counterr   r   r   r   itemframe_shiftlfr_ntor   r*   formattensorint64r   r1   rF   r   catonesrU   longgenerater   r   r   batch_decodesplitstripr   r   append)rm   data_indata_lengthsr   r   r   rn   r   	meta_datary   rz   time1audio_sample_listtime2time3r   r   
prompt_pre
prompt_idsprompt_lengthr   r~   r   r{   ibest_writerresultsresult_irY   rY   rx   	inference   s   




















zLLMASR.inferenceNNNNNNNNNNNNr   NNr   r   r   r   r   r    r!   FTTr"   r#   FNNNN)__name__
__module____qualname____doc__strdictfloatr   boolr[   r   r   r   r   r   r   r   r   __classcell__rY   rY   rv   rx   r      s    	
x	

F
LLMASR2c                9       sV  e Zd ZdZ																								
					
d@dedededededededededededededededededed ed!ed"ed#ed$ed%ed&ed'ed(ed)ef8 fd*d+Z	d,e
jd-e
jd.e
jd/e
jd0e
jd1e
jd2e
jd3ee
jeee
jf e
jf fd4d5Zd6d7 Zd8d9 Zi fd:efd;d<Z				dAd=efd>d?Z  ZS )Br  r   Nr   r   r   r   r   r    r!   FTr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   c           3         \  t    |dd }|dkr/ddlm} ||dd} | jj}!t| jdr*| jjjn| jj}n|dkr4nt	j
|}"|"dd	|i|}| }!|d
d}#t|dd}$|#r| D ]8\}%}&|$dkrtd|%}'|'d ur|'jd \}(})t|%|(d |)d  }*|*|$k rd|&_q[d|%vrd|&_q[d|&_q[|  || _d | _ddlm}+m},m}- |dd}.|+j|.d d d d} |d
d}#|#r|  D ]\}%}&d|&_q|   |dd| _| t| j | _|  jjd }/t	j |}0|!|d< |/|d< |0di |}|dd }.|.d ur t!j"|.dd}1|j#|1dd}2t$%d|. d|2  || _&d | _'|| _(d | _)d S  Nr@   rA   r   rB   rD   rE   rF   rH   r3   rI   Tfreeze_layer_numr   z\.\d+\.r   Fzln_post.rJ   rN   rO   rP   	llm_dtyper   rT   llm_dimcpu)map_location)strictzLoading audio_adaptor ckpt: z
, status: rY   *rZ   r[   r]   r_   rC   rF   r`   r   ra   r   rb   rc   r   rd   researchregsre   rf   r(   r1   rg   rK   rL   rM   rh   r	  r   	dtype_mapget_input_embeddingsr   r   ri   r   loadload_state_dictlogginginfor*   rk   r:   rl   3rm   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   rn   r@   rC   rF   rq   rr   rI   r  rs   rt   idxbegendlayer_idrK   rL   rM   rN   r
  ru   	src_stateflagrv   rY   rx   r[   `  z   
$

zLLMASR2.__init__ry   rz   r}   r~   r   	fbank_beg
fbank_maskr   c                 K   s  t | dkr|dddf }|j\}	}
}tjjjdd | ||\}}| ||\}}W d   n1 s9w   Y  d||dk < | j	j
 |}|j\}	}}d||dk < |dtj}t|	D ]}||  }||df  }t||jd | }z||d|ddf ||||| ddf< W qe ty } zUtt| dt   td| d	|j d
| d| d| d|j d||    ||  }t||}||d|ddf ||||| ddf< W Y d}~qed}~ww tjjj| jdkrdndt| j d% d||dk< d||dk < | j	|t| j ||d}|j}W d   n	1 s6w   Y  i }t * t|jd}t|ddddf |ddddf dd}||d< W d   n	1 sow   Y  t |! |d< |	|d< |
|	 |d< |  |d< |d |d  |d< ||	 |d< |  |d< |d |d  |d< | j"rt#|dk }	t$|||	f|j%\}}}|||fS )r   r   Nr   Fenabledr   , batch_idx: , inputs_embeds: , fbank_beg_idx: z, min_len: z, fbank_fake_len: , encoder_out: , encoder_out_lens: r   Tr#  r   r   r   r   r   r   r   batch_size_x_framesbatch_size_real_framespadding_framesbatch_size_x_tokensbatch_size_real_tokenspadding_tokens)&r   rU   r   r   cudaampr   r   r*   r1   rF   r  r   r   int32ranger   min	Exceptionr  errorr   	traceback
format_excr  r	  r  r   r   r   r   r   r   r   r:   r   r   r   )rm   ry   rz   r}   r~   r   r   r!  rn   r   framesr   r   r   r   r   r   fbank_fake_lens	batch_idxfbank_fake_lenfbank_beg_idxmin_lener   r   r   r   r   r   rY   rY   rx   r     s|   8
&
.

zLLMASR2.forwardc                 C   "   |  |ddd|\}}||fS r   r(   r   rm   ry   rz   r   r   rY   rY   rx   r   7     zLLMASR2.encodec           
      C      g g g }}}t |D ])\}}|d }|d }|dkr"|| q|dkr,|| q|dkr5|| q|t| }|||d}	|	S Nrolecontentsystemuser	assistant)rI  rJ  rK  	enumerater   r   
rm   datarI  rJ  rK  ir   rG  rH  contentsrY   rY   rx   data_template=  "   
zLLMASR2.data_templaterQ  c           +      K   s  |d }|d }|d }t d}	g g g g g g g g f\}
}}}}}}}tt|||D ]M\}\}}}d| d| d}|	|}g }g }g }g }t|D ]\}}|dsj||}||7 }|d	gt| 7 }qM|dd
dd
}|drRzt	
 }t|dd  |jd} t	
 }!|!| d|d< W n! ty }" ztdt|" dt   W Y d }"~"nd }"~"ww t| |dd|dd\}#}$t	
 }%|%|! d|d< |$  |j |j d |d< t|dr|js|#d	dd}#|di dddkrd|$d	  d d d  }&d|&d d d  }&n|di dddkr+|$d	  }&|&d |di d d d }'d	g|' }t|g}||7 }|dgt| 7 }qMd!gt| }(| d"}||}|
|| 7 }
||(| 7 }||7 }|| q+tj|
tjd#}
tjdgt|
 tjd#})tj|tjd#}tj|tjd#}tj|tjd#}|#d	d d d d f }|$}tj|tj d#}tj|tjd#}|d d d d d f |d d d f |d d d f |d$ |
d d d f |)d d d f |d d d f |d d d f |d d d f d%	}*|*S )&NrI  rJ  rK  )(<\|startofspeech\|>.*?<\|endofspeech\|>)<|im_start|>system
<|im_end|>
<|im_start|>user
!<|im_end|>
<|im_start|>assistant
<|startofspeech|>r    <|endofspeech|>!r   r   r   r   Loading wav failed! r$  r   r   Tr   r   is_finalr   r   r   r   r    dataset_confaudio_encoder_downsample_rater   r   audio_adaptor_downsample_rater   
<|im_end|>r   N)	ry   rz   r!  r   r}   r~   r   
source_ids
target_ids)!r  compilerM  zipr   
startswithr   r   replacer   r   r   r   r6  r  r7  r   r8  r9  r   r]   r   r   r   r   r   r   r   r   r   r   r3  float32)+rm   rQ  r   r   r   rn   rI  rJ  rK  patternr}   r   re  rf  r   
fbank_lensr!  r   rP  system_promptuser_prompt
target_outsource_inputsplitssource_ids_ifbank_mask_ifbank_beg_ifbank_lens_iksub_str	sub_tokenr   data_srcr   r@  ry   rz   r   olenssub_token_lensource_maskr~   outputrY   rY   rx   data_load_speechS  s   
 


*






zLLMASR2.data_load_speechr   c           '      K   s  i }| dd }| dddkrtd| |d }	| j|	||fd|i|}
t|
|d }|d }|d	 d d df }| d
drJ|tj}n| ddrV|tj}| 	||\}}| 
||\}}|d }|d }| ddsv|}d||dk < | jj |}|j\}}}|d }t|D ]"}||  }|| }||d |d d f ||||| d d f< q| dd}|dkr| d
drd
n|}| ddrdn|}tjjj|dkrdndt| d~ |	d d }| jt| | _|t| }| dds| jj|| ddd}|j|| dddd }d }n=|d }d||dk< | dd } | j|| |d}!t|!jdd d |jd d f }"|j|"d| ddd d }|!j }W d    n	1 sfw   Y  d }#| d!d urt| d"st| d!| _| jd d# }#g }$td$d%|}%|d ||%|d&}&|d ur||&d'< |$|& |#d ur||#d( |d < ||#d) |d < |%|#d* |d < |$|fS )+Nr   r   r   r   r   r   r   ry   rz   r   Fr   r}   re  tearchforingr   r	  r   Tr*  rK  r      r   r   r   r   r   r   r   r~   r   r   r   r   r   [^\w\s\u3000\u4e00-\u9fff]+rY  r   r{   text_tnlabelr   r{   r  r  ) r]   r   rR  r  r   r   r   float16bfloat16r   r*   r1   rF   r  r   r4  r   r1  r2  r   r  r   r   r   r   r   r   r   r   r  subr   )'rm   r   r   r   r   r   rn   r   r   rQ  r~  batchry   rz   r   r   r}   re  r   r   r   r   r   r<  r?  r>  r	  r  generated_idsresponser   r   r~   r   r   r   r   response_cleanr   rY   rY   rx   r     s   
$

'


zLLMASR2.inferencer   r   )r   r   r   r   r   r  r  r   r  r[   r   r   r   r   r   r   rR  r  r   r   r  rY   rY   rv   rx   r  \  s    	
z

]yLLMASR3c                       s(   e Zd ZdZ fddZdd Z  ZS )r  r   c                    s   t  j|i | d S rd  )rZ   r[   )rm   argsrn   rv   rY   rx   r[   A  s   zLLMASR3.__init__c                 C   s   |  ||\}}||fS rd  )r(   rC  rY   rY   rx   r   I  s   zLLMASR3.encode)r   r   r   r   r[   r   r  rY   rY   rv   rx   r  =  s    LLMASR4c                9       sn  e Zd ZdZ																								
					
dBdedededededededededededededededededed ed!ed"ed#ed$ed%ed&ed'ed(ed)ef8 fd*d+Z	d,e
jd-e
jd.e
jd/e
jd0e
jd1e
jd2e
jd3ee
jeee
jf e
jf fd4d5Zd6d7 Zd8d9 Zi fd:efd;d<Z				dCd=efd>d?Z				dCd=efd@dAZ  ZS )Dr  r   Nr   r   r   r   r   r    r!   FTr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   c           3         r  r  r  r  rv   rY   rx   r[   S  r  zLLMASR4.__init__ry   rz   r}   r~   r   r   r!  r   c           #      K   s  t | dkr|dddf }|j\}	}
}|j\}}tjjjdd | ||\}}| ||\}}W d   n1 s>w   Y  d||dk < | j	j
 |}|j\}}}|d}d||dk < d||dk < d}t|D ]}t|jd D ]}|||f  }|dkr	|||f }||d|ddf }z|||||| ddf< W n^ ty } zQtt| dt   td| d	|j d
| d| d|j d| d| d|  ||  }||d|ddf }|||||| ddf< W Y d}~nd}~ww |d7 }qwqntjjj| jdkrdndt| j d% d||dk< d||dk < | j	|t| j ||d}|j}W d   n	1 sHw   Y  i }t * t|jd}t|ddddf |ddddf dd}||d< W d   n	1 sw   Y  t| |d< ||d< |	|d< |
|	 |d< |   |d< |d |d  |d< || |d< |   |d< |d |d  |d < |dk d}t!|"  } |   | }!| |d!< |!|d"< | j#rt"|dk  }t$|||f|j%\}}}"|||"fS )#r   r   Nr   Fr"  fake_token_lenr$  r%  r&  r'  , speech_token_len: r(  r)  , fake_token_len: , speech_lengths: r   Tr*  r   r   r   r   r   r   r   batch_size_speechr+  r,  r-  r.  r/  r0  dialog_turns_maxdialog_turns_avg)&r   rU   r   r   r1  r2  r   r   r*   r1   rF   r  r]   r4  r   r6  r  r7  r   r8  r9  r  r	  r  r   r   r   r   r   r   r   r   r   maxr   r:   r   r   )#rm   ry   rz   r}   r~   r   r   r!  rn   r  r:  r   r   r   r   r   r   r   r  
speech_idxr<  turn_idr>  speech_token_lenspeech_tokenr@  r   r   r   r   r   dialog_turnsr  r  r   rY   rY   rx   r     s   


6
.

zLLMASR4.forwardc                 C   rA  r   rB  rC  rY   rY   rx   r   <  rD  zLLMASR4.encodec           
      C   rE  rF  rL  rN  rY   rY   rx   rR  B  rS  zLLMASR4.data_templaterQ  c           /      K   s  |d }|d }|d }t d}	g g g g g g g f\}
}}}}}}g }tt|||D ]\}\}}}||ddkr> n}t|
|ddkrK np|d	krYd
| d| d}nd| d}|	|}g }g }g }d	}d}g }g g }}t|D ]\} }!|!ds||!}"||"7 }|d	gt|" 7 }qy|!	dd	dd}!|!drl|!dd  }!|!drt
|!dd  }!zt }#t|!|jd}$t }%|%|# d|d< W n! ty }& ztdt|& dt   W Y d }&~&nd }&~&ww t|$|dd|dd\}}t }'|'|% d|d< |  |j |j d |d< |d dr+|d	d!d}||d"d#kr6d}(d|d	  d$ d! d!  })d|)d$ d! d!  })|)d d! d }d	g| }*t|}||*7 }|dgt|* 7 }qy||t|
 g7 }||g7 }d%gt| }+| d&}||},|
| }|
||, 7 }
||+|, 7 }||7 }t|d	kr||d	d d d d f  || q+tj|
tjd'}
tjdgt|
 tjd'}-tj|tjd'}tj|tj d'}tj|tjd'}tj|tjd'}tj|tjd'}tj|,tjd'},t|d	krtj!j"j#j$|dd(d)}tj!j"j#j$|ddd)}ng }g }|||d d d f |d* |d d d f |
d* |-d* ||d d d f |,d d d f d+
}.|.S ),NrI  rJ  rK  rT  multiturn_num_max   max_token_lengthi  r   rU  rV  rW  z<|im_start|>user
r   rX  rY  rZ  r[  r   r\  r   r   r]  r$  r   r   Tr^  r   r   r   r   r    max_source_lengthi|  r   r   rc  r   r!   )batch_firstpadding_valuerd  )
ry   rz   r!  r   r  r}   r~   r   re  rf  )%r  rg  rM  rh  r]   r   r   ri  r   rj  rf   r   r   r   r   r6  r  r7  r   r8  r9  r   r   r   r   r   r   r   r   r   r   r3  rk  nnutilsrnnpad_sequence)/rm   rQ  r   r   r   rn   rI  rJ  rK  rl  r}   r   r   rm  r!  r   r  input_source_idsrP  rn  ro  rp  rq  rr  re  fbank_irt  fake_token_len_iru  rv  ry   rz   rw  rx  ry  r   rz  r   r@  r   badcase_flagr{  
fake_tokenr}  rf  r~   r~  rY   rY   rx   r  X  s   
	 




*








zLLMASR4.data_load_speechr   c                 K   s  i }| dd }| dddkrtd| |d }	| j|	||fd|i|}
t|
|d }|d }t|dkrl|d	 d d df }| d
drP|tj}n| ddr\|tj	}| 
||\}}| ||\}}|d }|d }|d }|d }| dds|}d||dk < | jj |}|j\}}}d||dk < d||dk < d}t|D ]}t|jd D ]}|||f  }|dkrE|||f }||d |d d f }z|||||| d d f< W n^ ty@ } zQtt| dt   td| d|j d| d| d|j d| d| d|  ||  }||d |d d f }|||||| d d f< W Y d }~nd }~ww |d7 }qq||	|||fS )Nr   r   r   r   r   r   r   ry   rz   r   Fr   r}   re  r   r  r  r$  r%  r&  r'  r  r(  r)  r  r  )r]   r   rR  r  r   r   r   r   r  r  r   r*   r1   rF   r  r   r4  r   r6  r  r7  r   r8  r9  r  )rm   r   r   r   r   r   rn   r   r   rQ  r~  r  ry   rz   r   r   r}   re  r   r  r   r   r   r   r  r<  r  r>  r  r  r@  rY   rY   rx   inference_prepare  sp   

6zLLMASR4.inference_preparec                 K   sX  | j |||||fi |\}}}	}
}|dd}|dkr0|ddr$dn|}|ddr.dn|}tjjj|dkr:dndt| d} |d d	 }| jt| | _|t| }|d
dsz| jj	||ddd}|j
||dddd }d }n=|	d }d||d	k< |	dd }| j|||d}t|jd	d d |
jd d f }|j
|d|dddd }|j }W d    n1 sw   Y  d }|dd urt| dst|d| _| jd d }g }tdd|}|d |||d}|d ur||d< || |d ur(|dd|d  |d < |dd|d! |d < ||d" |d < ||fS )#Nr	  r   r   Fr   Tr*  rK  r   r  r   r  r  r   r  r   r   r   r~   r   r   r   r   r   r   r  rY  r  r   
r   r{   r  r  )r  r]   r   r1  r2  r   r  r1   r   r   r   r   r   r   r   r   r   r   r   r  r  r   rj  )rm   r   r   r   r   r   rn   r   rQ  r  re  r   r	  r  r  r  r   r   r~   r   r   r   r   r  r   rY   rY   rx   r   5  st   

$

'


zLLMASR4.inferencer   r   )r   r   r   r   r   r  r  r   r  r[   r   r   r   r   r   r   rR  r  r   r  r   r  rY   rY   rv   rx   r  O  s    	
z

o 
U)5r  typingr   r   r   r   r   r   r   torch.nnr  torch.nn.functional
functionalr   torch.cuda.ampr   r  funasr.models.scama.utilsr   "funasr.losses.label_smoothing_lossr	   funasr.models.ctc.ctcr
   +funasr.models.transformer.utils.add_sos_eosr   funasr.metrics.compute_accr   r   funasr.metrics.commonr   funasr.train_utils.device_funcsr   funasr.utils.load_utilsr   r   funasr.utilsr   funasr.utils.datadir_writerr   funasr.registerr   r   r8  r  r  rk  r  registerModuler   r  r  r  rY   rY   rY   rx   <module>   sF    
  
B   
c
