o
    }oij,                     @   s|  d dl Z d dlmZ d dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZ ejdd Zejdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd  Z&d!d" Z'd#d$ Z(d%d& Z)d'd( Z*d)d* Z+d+d, Z,d-d. Z-d/d0 Z.d1d2 Z/d3d4 Z0d5d6 Z1d7d8 Z2d9d: Z3d;d< Z4d=d> Z5d?d@ Z6dAdB Z7dS )C    N)patch)Image)ConversationSeparatorStyleconv_chatml_directconv_gemma_instructconv_llama_2conv_llava_llama_3conv_llava_plainconv_llava_v0conv_llava_v1conv_mistral_directconv_mistral_orcaconv_mistral_vilaconv_mistral_zephyrconv_mptconv_nv_dpo
conv_nvgpt	conv_qwenc                  C   s   t jdddd} | S )NRGB)d   r   red)color)r   new)img r   e/home/ubuntu/.local/lib/python3.10/site-packages/tests/collections/vlm/neva/data/test_conversation.pysample_image*   s   r   c                   C   s   t ddg dtjddS )NTest systemUser	Assistantr   ###)systemrolesmessagesoffset	sep_stylesep)r   r   SINGLEr   r   r   r   basic_conversation1   s   r*   c                  C   sj   t ddg dd} | jdksJ | jdksJ | jg ksJ | jdks$J | jtjks,J | jdks3J d S )Nr   r   r   r#   r$   r%   r&   r"   )	r   r#   r$   r%   r&   r'   r   r)   r(   convr   r   r    test_conversation_initialization=   s   r.   c                 C   sH   |  dd |  dd |  }d|v sJ d|v sJ d|v s"J d S )Nr    Hellor!   Hi therezTest system###zUser: Hello###Assistant: Hi there###)append_message
get_prompt)r*   promptr   r   r   test_get_prompt_single_styleG   s   r5   c               	   C   s`   t ddg dtjddd} | dd | d	d
 |  }d|v s"J d|v s(J d|v s.J d S )Nr   r   r    z</s>)r#   r$   r%   r&   r'   r(   sep2r    r/   r!   r0   zTest system zUser: HellozAssistant: Hi there</s>)r   r   TWOr2   r3   r-   r4   r   r   r   test_get_prompt_two_styleP   s   	r:   c                  C   s8   t  } | dd | dd |  }d|v sJ d S )NUSERr/   	ASSISTANTr0   z<s>)r   copyr2   r3   r9   r   r   r   test_get_prompt_mistral_vilab   s
   r>   c                  C   P   t  } | dd | dd |  }d|v sJ d|v s J d|v s&J d S Nr    r/   r!   r0   System)r   r=   r2   r3   r9   r   r   r   test_get_prompt_nvgpt|      rB   c                  C   sD   t  } | dd | dd |  }d|v sJ d|v s J d S )N r/   r0   )r
   r=   r2   r3   r9   r   r   r   test_get_prompt_plain      rE   c                  C   D   t  } | dd | dd |  }d|v sJ d|v s J d S )NHumanr/   r!   r0   zHuman: Hello###r1   )r   r=   r2   r3   r9   r   r   r   test_get_prompt_v0   rF   rI   c                  C   rG   )Nr;   r/   r<   r0   zUSER: HellozASSISTANT: Hi there)r   r=   r2   r3   r9   r   r   r   test_get_prompt_v1   rF   rJ   c                  C   P   t  } | dd | dd |  }d|v sJ d|v s J d|v s&J d S )N<|im_start|>user
r/   <|im_start|>assistant
r0   zYou are MistralOrca)r   r=   r2   r3   r9   r   r   r   test_get_prompt_mistral_orca   rC   rN   c                  C   rK   )Nz	<|user|>
r/   z<|assistant|>
r0   zYou are a helpful AI assistant)r   r=   r2   r3   r9   r   r   r   test_get_prompt_mistral_zephyr   rC   rO   c                  C   rK   NrL   r/   rM   r0   zAnswer the questions)r   r=   r2   r3   r9   r   r   r   test_get_prompt_mistral_direct   rC   rQ   c                  C   rK   rP   )r   r=   r2   r3   r9   r   r   r   test_get_prompt_chatml_direct   rC   rR   c                  C   rK   )NrL   r/   rM   r0   zA conversation between a user)r   r=   r2   r3   r9   r   r   r   test_get_prompt_mpt   rC   rS   c                  C   rK   )Nz<|im_start|>userr/   z<|im_start|>assistantr0   zYou are a helpful assistant)r   r=   r2   r3   r9   r   r   r   test_get_prompt_qwen   rC   rT   c                  C   sD   t  } | dd | dd |  }d|v sJ d|v s J d S )Nz<start_of_turn>user
r/   z<start_of_turn>model
r0   )r   r=   r2   r3   r9   r   r   r   test_get_prompt_gemma   rF   rU   c                  C   r?   r@   )r   r=   r2   r3   r9   r   r   r   test_get_prompt_nv_dpo   rC   rV   c                 C   sL   t ddg dd}|j| ddd}t|tjsJ |jd |jd ks$J d S )	NTestr   r   r+   PadT
return_pil   r   process_image
isinstancer   sizer   r-   	processedr   r   r   test_process_image_pad   s   rb   c                 C   sB   t ddg dd}|j| ddd}t|tjsJ |jdksJ d S )	NrW   r   r   r+   ResizeTrY   )P  rd   r\   r`   r   r   r   test_process_image_resize   s   re   c                 C   s4   t ddg dd}|j| ddd}t|tjsJ d S )NrW   r   r   r+   DefaultTrY   )r   r]   r^   r   r`   r   r   r   test_process_image_default   s   rg   c                 C   s^   t ddg dd}|j| ddd}t|tsJ zt| W d S  ty.   td Y d S w )	NrW   r   r   r+   rf   FrY   zNot a valid base64 string)	r   r]   r^   strbase64	b64decode	Exceptionpytestfailr`   r   r   r   test_process_image_base64  s   rn   c                 C   F   |  dd|df | jdd}t|dksJ t|d tjs!J d S )Nr    r/   rf   TrY   r[   r   r2   
get_imageslenr^   r   r*   r   imagesr   r   r   test_get_images     ru   c                 C   ro   )Nr    r/   rf   T)return_pathr[   r   rp   rs   r   r   r   test_get_images_return_path  rv   rx   c                 C   s   |  dd|df |  dd |  }t|dksJ t|d ts$J t|d dks.J d|d d v s8J d|d d ksBJ d S )	Nr    r/   rf   r!   r0   r[   r      )r2   to_gradio_chatbotrr   r^   list)r*   r   chatbotr   r   r   test_to_gradio_chatbot  s   r}   c                  C   s   t ddddggdd} |  }|j| jksJ |j| jksJ |j| jks'J |j| jks/J |j| jks7J |j| jks?J |j| jksGJ d S )NrW   r   r    r/   r   r+   )	r   r=   r#   r$   r%   r&   r'   r(   r7   )r-   copiedr   r   r   	test_copy(  s   r   c                  C   sx   t ddddggdd} |  }|d dksJ |d dksJ |d	 ddggks*J |d
 dks2J |d dks:J d S )NrW   r   r    r/   r   r+   r#   r$   r%   r&   r(   r"   )r   dict)r-   	conv_dictr   r   r   	test_dict4  s   r   c                 C   s4   |  dd|df |  }|d ddggksJ d S )Nr    r/   rf   r%   )r2   r   )r*   r   r   r   r   r   test_dict_with_images>  s   r   c                  C   sv   t ddg dtjd} ddg}td}d|jj_| d	|}|dks$J |d	 W d    d S 1 s4w   Y  d S )
Nr   )user	assistantr   r#   r$   r%   r&   r'   )r   r/   )r   r0   z*transformers.AutoTokenizer.from_pretrainedzTest templateztest-tokenizer)r   r   LLAMA_2r   return_valueapply_chat_templateprocess_chat_templateassert_called_once_with)r-   r%   mock_tokenizerresultr   r   r   test_process_chat_templateD  s   

"r   c                  C   sJ   t ddg ddd} tt |   W d    d S 1 sw   Y  d S )NrW   r   r   INVALIDr   )r   rl   raises
ValueErrorr3   r,   r   r   r   test_invalid_sep_styleP  s   

"r   c                  C   sL   t ddg dd} tt | d d W d    d S 1 sw   Y  d S )NrW   r   r   r+   InvalidMode)r   rl   r   r   r]   r,   r   r   r   test_invalid_image_process_modeX  s   "r   )8ri   unittest.mockr   rl   PILr   +nemo.collections.vlm.neva.data.conversationr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   fixturer   r*   r.   r5   r:   r>   rB   rE   rI   rJ   rN   rO   rQ   rR   rS   rT   rU   rV   rb   re   rg   rn   ru   rx   r}   r   r   r   r   r   r   r   r   r   r   <module>   sL   L


	
			





	

