o
    'ß®i†	  ã                   @   sT   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!   ú"tests/test_video_tts_classifier.pyÚ_sample_row
   s   
òr#   c                  C   sV   t tƒ ƒ} t| ƒ}| d dksJ ‚|d du sJ ‚d|d v s!J ‚|d dks)J ‚d S )	NÚcategory_labelzPeople & BlogsÚpodcast_likeTr	   Úpositive_title_hitsÚduration_minutesg      @)r   r#   r   )ÚmetadataÚ
heuristicsr!   r!   r"   Ú4test_normalize_and_heuristics_detect_podcast_signals   s   
r*   c                  C   s€   t dƒ} |  tƒ ¡}|d dksJ ‚|d d du sJ ‚|d d d	 d d
 d dks.J ‚d|d d d	 d d v s>J ‚d S )Nzfake-keyÚmodelzgoogle/gemini-3.1-pro-previewÚproviderÚrequire_parametersTÚmessagesé   ÚcontentÚcache_controlÚtypeÚ	ephemeralÚvideo_metadataé   r   Útext)r   Úbuild_request_bodyr#   )Ú
classifierÚbodyr!   r!   r"   Ú+test_request_body_uses_cached_static_prefix'   s   $$r:   c                  C   s2   d} t  | ¡}|d dksJ ‚|d dksJ ‚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ÚkeepÚlikely_content_typer	   )r   Úparse_response_json)r0   Úparsedr!   r!   r"   Ú,test_parse_response_json_handles_code_fences1   s   
r@   )r   )r   Úsrc.video_tts_classifierr   r   r   ÚstrÚdictr#   r*   r:   r@   r!   r!   r!   r"   Ú<module>   s    

