o
    wiO                  	   @   s   d dl mZ d dl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 G dd	 d	eZeeed
ededeeejf fddZee	ede	defddZdS )    )defaultdictN)MonoCut)CutMixedCut)SourceTargetTextExample)registered_prompt_format_fn)ModalityPromptFormatterc                	       sf   e Zd ZdZdZdZddejejddedd	ejidiZd
e	de
de
dee f fddZ  ZS )T5NMTPromptFormattera  
    The default prompt format for Megatron T5 based neural machine translation models.
    Based on: https://github.com/NVIDIA/NeMo/blob/ad5ef750e351edbb5eeb7eb6df2d0c804819600f/nemo/collections/nlp/models/machine_translation/megatron_nmt_model.py#L790
    t5nmt	assistantuserz|target_lang| |message|target_langmessage)templateslotsz	|message|r   prompt_templateexpected_slotsslot_valuesreturnc                    sH   | d }d ur|dr|dsd| d|d< t j|||dS )Nr   <>)r   r   r   )get
startswithendswithsuperencode_turn)selfr   r   r   val	__class__ b/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/nemo/collections/common/prompts/t5nmt.pyr   3   s   z T5NMTPromptFormatter.encode_turn)__name__
__module____qualname____doc__NAMEOUTPUT_ROLEr   TextTEMPLATEstrdictlistintr   __classcell__r"   r"   r    r#   r
      s"    *r
   cutpromptr   c                 C   s   t t}t| tr| j} t| tstd| dt| dr"| j}nt| dr+| j	}nt
dtd|ddd	g}t| jd
krX| jd
 jd urX|t|jd| jd
 jid	 ||S )Nz_Expected input audio to have a single channel (required MonoCut/MixedCut, but we received: cut=)contextdefault_contextz:Missing context/default_context custom field in cut: {cut}r    r   roler   r   r   )r   r.   
isinstancer   _first_non_padding_cutr   	TypeErrorhasattrr4   r5   RuntimeErrorr-   lensupervisionstextappendr)   encode_dialog)r1   r2   ansr4   turnsr"   r"   r#   r   >   s2   





r   examplec                 C   sX   d| j j d}| dr| d| j }|d| jj|dd|jd| j jidgS )	Nr   r   extra_prompt r   )r   r   r7   r   )targetlanguage
has_customrF   rB   sourcer@   r)   )rE   r2   ctxr"   r"   r#   t5nmt_src_tgt_text_example`   s   
rM   )collectionsr   torchlhotser   
lhotse.cutr   r   1nemo.collections.common.data.lhotse.text_adaptersr   &nemo.collections.common.data.prompt_fnr   )nemo.collections.common.prompts.formatterr   r	   r
   r-   r,   Tensorr   rM   r"   r"   r"   r#   <module>   s   #"!