o
    lQ³i¸	  ã                   @   sn   d dl Zd dlm  mZ d dlZd dlmZm	Z	m
Z
 ddedeeef fdd„Zdd	„ Zd
d„ Zdd„ ZdS )é    N)ÚOpenRouterVideoTtsClassifierÚnormalize_metadata_rowÚderive_heuristicsÚabc123Úvideo_idÚreturnc                 C   s4   | ddddt  g d¢¡ddddd	d
t  dg¡ddœS )NÚchan1zStudyGuide HubzPsychology Podcast Episode 5z@A long-form educational discussion about happiness and behavior.)ÚpodcastÚ
psychologyÚ	educationÚ22ÚenÚPT6M45SÚ405Úhdz'https://en.wikipedia.org/wiki/EducationÚok)r   Ú
channel_idÚchannel_titleÚtitleÚdescriptionÚtagsÚcategory_idÚdefault_languageÚdefault_audio_languageÚdurationÚduration_secondsÚ
definitionÚtopic_categoriesÚfetch_status)ÚjsonÚdumps)r   © r!   ú;/home/ubuntu/transcripts/tests/test_video_tts_classifier.pyÚ_sample_row
   s   
òr#   c                  C   s¾  t tƒ ƒ} t| ƒ}| d }d}||k}|s8t d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}|d }d	}||u }|smt 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 }d}||k}|s×t d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}d S )NÚcategory_labelzPeople & Blogs©ú==©z%(py1)s == %(py4)s©Úpy1Úpy4úassert %(py6)sÚpy6Úpodcast_likeT©Úis©z%(py1)s is %(py4)sr	   Úpositive_title_hits©Úin©z%(py1)s in %(py4)sÚduration_minutesg      @)r   r#   r   Ú
@pytest_arÚ_call_reprcompareÚ	_safereprÚAssertionErrorÚ_format_explanation)ÚmetadataÚ
heuristicsÚ@py_assert0Ú@py_assert3Ú@py_assert2Ú@py_format5Ú@py_format7r!   r!   r"   Ú4test_normalize_and_heuristics_detect_podcast_signals   s   
jjjnrB   c                  C   sZ  t dƒ} |  tƒ g¡}|d }d}||k}|s:t d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}|d	 d
 }d}||u }|sqt d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}|d d }d}||k}|s¨t d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}|d d d d d d }d}||k}|sçt d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}d}|d d d d d }||v }|s%t d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}d S )Nzfake-keyÚmodelzgoogle/gemini-3.1-pro-previewr%   r'   r(   r+   r,   ÚproviderÚrequire_parametersTr.   r0   Ú	reasoningÚeffortÚlowÚmessagesé   ÚcontentÚcache_controlÚtypeÚ	ephemeralÚvideo_metadataé   r   Útextr2   r4   )r   Úbuild_request_bodyr#   r6   r7   r8   r9   r:   )Ú
classifierÚbodyr=   r>   r?   r@   rA   r!   r!   r"   Ú+test_request_body_uses_cached_static_prefix'   s   jnn~€rU   c                  C   sæ   d} t  | ¡}|d }d}||k}|s6t d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}|d	 }d
}||k}|skt d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}d S )Na  ```json
{
  "recommended_action": "keep",
  "likely_content_type": "podcast",
  "tts_suitability_score": 85,
  "spoken_word_score": 95,
  "clean_speech_likelihood_score": 85,
  "single_speaker_likelihood_score": 70,
  "metadata_confidence_score": 90,
  "hard_reject": false,
  "hard_reject_reasons": [],
  "positive_signals": ["clear_podcast_or_interview_signal"],
  "risk_signals": ["panel_or_multi_speaker"],
  "short_rationale": "Clear podcast metadata with strong spoken-word cues.",
  "needs_audio_validation": true
}
```Úrecommended_actionÚkeepr%   r'   r(   r+   r,   Úlikely_content_typer	   )r   Úparse_response_jsonr6   r7   r8   r9   r:   )rK   Úparsedr=   r>   r?   r@   rA   r!   r!   r"   Ú,test_parse_response_json_handles_code_fences2   s   
jnr[   )r   )ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriter6   r   Úsrc.video_tts_classifierr   r   r   ÚstrÚdictr#   rB   rU   r[   r!   r!   r!   r"   Ú<module>   s   " 
