o
    Ð¢iÜ
  ã                   @   s¢   d Z ddlZddlm  mZ ddlZddlZddl	m
Z
mZmZm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S )z)Tests for prompt builder and JSON schema.é    N)Úbuild_system_promptÚget_user_promptÚget_json_schemaÚTranscriptionSchemac                  C   sü   t dƒ} d}|| v }|s<t d|fd|| f¡t |¡dt ¡ v s%t | ¡r*t | ¡nddœ }dd|i }tt |¡ƒ‚d  }}d}|| v }|sxt d|fd|| f¡t |¡dt ¡ v sat | ¡rft | ¡nddœ }dd|i }tt |¡ƒ‚d  }}d S )	NÚteÚTelugu©Úin©z%(py1)s in %(py3)sÚprompt©Úpy1Úpy3úassert %(py5)sÚpy5©	r   Ú
@pytest_arÚ_call_reprcompareÚ	_safereprÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚAssertionErrorÚ_format_explanation©r   Ú@py_assert0Ú@py_assert2Ú@py_format4Ú@py_format6© r   ú5/home/ubuntu/transcripts/tests/test_prompt_builder.pyÚ$test_system_prompt_contains_language
   s   x|r!   c                  C   sj  t dƒ} d}|| v }|s<t d|fd|| f¡t |¡dt ¡ v s%t | ¡r*t | ¡nddœ }dd|i }tt |¡ƒ‚d  }}d	}|| v }|sxt d|fd|| f¡t |¡dt ¡ v sat | ¡rft | ¡nddœ }dd|i }tt |¡ƒ‚d  }}d
}|| v }|s´t d|fd|| f¡t |¡dt ¡ v st | ¡r¢t | ¡nddœ }dd|i }tt |¡ƒ‚d  }}d}|| v }|sðt d|fd|| f¡t |¡dt ¡ v sÙt | ¡rÞt | ¡nddœ }dd|i }tt |¡ƒ‚d  }}d}|| v }|s/t d|fd|| f¡t |¡dt ¡ v st | ¡rt | ¡nddœ }dd|i }tt |¡ƒ‚d  }}d S )NÚhizNEVER TRANSLATEr   r
   r   r   r   r   ÚVERBATIMzNO HALLUCINATIONz[UNK]z[NO_SPEECH]r   r   r   r   r    Ú!test_system_prompt_contains_rules   s   xxxx‚r$   c                  C   st  t dƒ} d}|| v }|s<t d|fd|| f¡t |¡dt ¡ v s%t | ¡r*t | ¡nddœ }dd|i }tt |¡ƒ‚d  }}d	}|| v }|sxt d|fd|| f¡t |¡dt ¡ v sat | ¡rft | ¡nddœ }dd|i }tt |¡ƒ‚d  }}d
}|| v }|s´t d|fd|| f¡t |¡dt ¡ v st | ¡r¢t | ¡nddœ }dd|i }tt |¡ƒ‚d  }}d S )NÚenz[laugh]r   r
   r   r   r   r   z[cough]z[noise]r   r   r   r   r    Ú&test_system_prompt_contains_event_tags   s   xx|r&   c                  C   sÐ   ddl m}  | D ]]}t|ƒ}t|ƒ}d}||k}|s_t d|fd||f¡dt ¡ v s/t t¡r4t 	t¡nddt ¡ v s@t |¡rEt 	|¡ndt 	|¡t 	|¡dœ }d	d
|i }t
t |¡ƒ‚d  } }}qd S )Nr   )ÚSUPPORTED_LANGUAGESéÈ   )ú>)z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)sÚlenr   )Úpy0r   r   Úpy6zassert %(py8)sÚpy8)Ú
src.configr'   r   r*   r   r   r   r   r   r   r   r   )r'   Úlangr   r   Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9r   r   r    Ú test_system_prompt_all_languages    s
   °þr4   c                  C   s„   t dƒ} d}|| v }|s<t d|fd|| f¡t |¡dt ¡ v s%t | ¡r*t | ¡nddœ }dd|i }tt |¡ƒ‚d  }}d S )	NÚxxÚEnglishr   r
   r   r   r   r   r   r   r   r   r    Ú0test_system_prompt_unknown_lang_defaults_english'   s   |r7   c                  C   sú   t ƒ } d}|| v }|s;t d|fd|| f¡t |¡dt ¡ v s$t | ¡r)t | ¡nddœ }dd|i }tt |¡ƒ‚d  }}d}|| v }|swt d|fd|| f¡t |¡dt ¡ v s`t | ¡ret | ¡nddœ }dd|i }tt |¡ƒ‚d  }}d S )	NÚ
Transcriber   r
   Úpr   r   r   ÚJSON)	r   r   r   r   r   r   r   r   r   )r9   r   r   r   r   r   r   r    Útest_user_prompt,   s   x|r;   c                  C   s  t ƒ } | d }d}||k}|s2t d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}| d }d	}||v }|stt d
|fd||f¡t |¡dt ¡ v s]t |¡rbt |¡nddœ }dd|i }tt |¡ƒ‚d  }}d}||v }|s°t d
|fd||f¡t |¡dt ¡ v s™t |¡ržt |¡nddœ }dd|i }tt |¡ƒ‚d  }}d}||v }|sìt d
|fd||f¡t |¡dt ¡ v sÕt |¡rÚt |¡nddœ }dd|i }tt |¡ƒ‚d  }}d}||v }|s+t d
|fd||f¡t |¡dt ¡ v st |¡rt |¡nddœ }dd|i }tt |¡ƒ‚d  }}| d }	t	|	ƒ}h d£}
||
k}|s|t d|fd||
f¡dt ¡ v sYt t	¡r^t t	¡ndt |	¡t |¡t |
¡dœ }dd|i }tt |¡ƒ‚d  }	 } }}
d S )NÚtypeÚobject©ú==©z%(py1)s == %(py4)s©r   Úpy4úassert %(py6)sr,   Ú
propertiesÚtranscriptionr   r
   Úpropsr   r   r   ÚtaggedÚspeakerÚdetected_languageÚrequired>   rG   rH   rE   rI   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sÚset)r+   Úpy2rB   Úpy7zassert %(py9)sÚpy9)
r   r   r   r   r   r   r   r   r   rK   )Úschemar   Ú@py_assert3r   Ú@py_format5r2   rF   r   r   Ú@py_assert1Ú@py_assert6r0   Ú@py_format8Ú@py_format10r   r   r    Útest_json_schema_structure2   s   jxxx~®rV   c            
      C   sn  t ƒ } | d d }|d }d}||k}|s8t d|fd||f¡t |¡t |¡dœ }dd	|i }tt |¡ƒ‚d  } }}|d }d
}||v }|szt d|fd||f¡t |¡dt ¡ v sct |¡rht |¡nddœ }dd|i }	tt |	¡ƒ‚d  }}d}||v }|s¶t d|fd||f¡t |¡dt ¡ v sŸt |¡r¤t |¡nddœ }dd|i }	tt |	¡ƒ‚d  }}d}||v }|sòt d|fd||f¡t |¡dt ¡ v sÛt |¡ràt |¡nddœ }dd|i }	tt |	¡ƒ‚d  }}d}||v }|s1t d|fd||f¡t |¡dt ¡ v st |¡rt |¡nddœ }dd|i }	tt |	¡ƒ‚d  }}d S )NrD   rH   r<   r=   r>   r@   rA   rC   r,   Úemotionr   r
   Úspr   r   r   Úspeaking_styleÚpaceÚaccent)	r   r   r   r   r   r   r   r   r   )
rO   rH   r   rP   r   rQ   r2   rX   r   r   r   r   r    Útest_json_schema_speaker_nested=   s   jxxx‚r\   c            	      C   sj  t ƒ } | d d d d }d}||v }|sEt d|fd||f¡t |¡dt ¡ v s.t |¡r3t |¡nddœ }dd	|i }tt |¡ƒ‚d  }}d
}|d }||v }|sxt d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}d}|d }||v }|s­t d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}d S )NrD   rH   rW   Úenumr   r
   r   r   r   Úneutral)z%(py1)s in %(py4)srA   rC   r,   Úhappy)	r   r   r   r   r   r   r   r   r   )	rO   rW   r   r   r   r   rP   rQ   r2   r   r   r    Útest_json_schema_enumsH   s
   xjnr`   c                  C   sb  dddddddœdd	œ} t di | ¤Ž}|j}d}||k}|sRt d
|fd||f¡dt ¡ v s3t |¡r8t |¡ndt |¡t |¡dœ }dd|i }tt 	|¡ƒ‚d  } }}|j
}|j}|j}d}||k}	|	s¥t d
|	fd||f¡dt ¡ v s~t |¡rƒt |¡ndt |¡t |¡t |¡t |¡dœ }
dd|
i }tt 	|¡ƒ‚d  } } } }	}d S )Nzhello worldz[noise] hello worldr^   ÚconversationalÚnormalÚ )rW   rY   rZ   r[   r%   )rE   rG   rH   rI   r>   )z5%(py2)s
{%(py2)s = %(py0)s.transcription
} == %(py5)sÚmodel)r+   rL   r   zassert %(py7)srM   )zg%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.speaker
}.emotion
}.value
} == %(py9)s)r+   rL   rB   r,   rN   zassert %(py11)sÚpy11r   )r   rE   r   r   r   r   r   r   r   r   rH   rW   Úvalue)Údatard   rR   r1   rP   r   rT   r0   Ú@py_assert8Ú@py_assert7rU   Ú@py_format12r   r   r    Útest_pydantic_model_validatesP   s   ü÷Š²rk   c                  C   sˆ   t  tƒ ¡} d}|| v}|s>t d|fd|| f¡t |¡dt ¡ v s't | ¡r,t | ¡nddœ }dd|i }t	t 
|¡ƒ‚d }}dS )	z4Ensure schema has no $ref pointers (fully resolved).z$ref)únot in)z%(py1)s not in %(py3)sÚ
schema_strr   r   r   N)ÚjsonÚdumpsr   r   r   r   r   r   r   r   r   )rm   r   r   r   r   r   r   r    Útest_json_schema_no_refsa   s   |rp   )Ú__doc__Úbuiltinsr   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   rn   ÚpytestÚsrc.prompt_builderr   r   r   r   r!   r$   r&   r4   r7   r;   rV   r\   r`   rk   rp   r   r   r   r    Ú<module>   s    "	