Ë
    )BæjÛ  ã                  óÖ   — d Z ddlmZ ddlmZ ddlmZmZ dZed   Z	ed   Z
ed   Z G d	„ d
e«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zy)zDStructured output contract. This is what the dubbing agent consumes.é    )Úannotations)ÚLiteral)Ú	BaseModelÚFieldz
dubeval.v2)ÚcriticalÚmajorÚminor)ÚtimingÚvisualÚaudioÚsemanticÚvideoÚsubtitleÚlanguage)ÚMISSING_DUBÚ
LATE_STARTÚEARLY_CUTOFFÚMID_LINE_GAPÚEARLY_STARTÚOVERRUNÚUNMATCHED_SPEECHÚ
SYNC_DRIFTÚFAST_SPEECHÚBACKGROUND_DROPOUTÚENERGY_MISMATCHÚMEANING_MISMATCHÚMISSING_CONTENTÚADDED_CONTENTÚTONE_MISMATCHÚNAME_OR_TERM_ERRORÚUNTRANSLATEDÚSCRIPT_DEVIATIONÚWRONG_LANGUAGEÚSUBTITLE_AUDIO_DESYNCÚVIDEO_MISMATCHÚDURATION_MISMATCHc                  óv   — e Zd ZU ded<   ded<    ed¬«      Zded<    ed¬«      Zded	<    ed
¬«      Zded<   y)ÚVisualEvidenceÚintÚframes_analyzedÚface_framesz+Largest face box as a fraction of the frame©ÚdescriptionÚfloatÚmax_face_areaz6Std-dev of mouth opening ratio on the most active faceÚmouth_activityz"None when no usable face was foundzbool | NoneÚspeaking_likelyN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   r/   r0   r1   © ó    ú2/root/repos/pocs/video-evals/src/dubeval/schema.pyr(   r(   *   s>   … ØÓØÓÙ Ð-ZÔ[€M�5Ó[Ù!Ð.fÔg€N�EÓgÙ#(Ð5YÔ#Z€O�[ÔZr7   r(   c                  óÂ   — e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   d	ed<   d	ed<   ded<   ded<   ded<   dZded<   dZded<   ded<    ee¬«      Zded<   dZ	ded<   y)ÚIssueÚstrÚidÚCategoryÚcategoryÚSourceÚsourceÚSeverityÚseverityr.   Ú
confidenceÚstartÚendÚstart_tcÚend_tcr-   Nú
str | NoneÚoriginal_textÚdubbed_textÚfix_hint©Údefault_factoryÚdictÚevidencezVisualEvidence | Noner   )
r2   r3   r4   r5   rI   rJ   r   rN   rO   r   r6   r7   r8   r:   r:   2   sk   … ØƒGØÓØƒNØÓØÓØƒLØ	ƒJØƒMØƒKØÓØ $€M�:Ó$Ø"€K�Ó"ØƒMÙ¨4Ô0€HˆdÓ0Ø$(€FÐ!Ô(r7   r:   c                  óÄ   — e Zd ZU dZded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<    edd¬«      Zded<    edd¬«      Zded<    ee¬«      Z	ded<   y)ÚAlignedLinezSOne original utterance and what the dub put against it, for the regenerating agent.r)   Úindexr.   Ú
orig_startÚorig_endúfloat | NoneÚ	dub_startÚdub_endÚonset_deltaÚdub_coverager;   rI   rJ   Nz*LLM English rendering of the original line)Údefaultr-   rH   Úoriginal_enz'LLM English back-translation of the dubÚ	dubbed_enrL   ú	list[str]Ú	issue_ids)
r2   r3   r4   Ú__doc__r5   r   r[   r\   Úlistr^   r6   r7   r8   rQ   rQ   D   sl   … Ù]ØƒJØÓØƒOØÓØÓØÓØÓØÓØÓÙ#¨DÐ>jÔk€K�ÓkÙ!¨$Ð<eÔf€IˆzÓfÙ °Ô6€IˆyÔ6r7   rQ   c                  ó²   — e Zd ZU ded<   ded<   ded<    ed¬«      Zded<    ed¬«      Zded	<   d
ed<   d
ed<   d
ed<   ded<   ded<    ed¬«      Zded<   y)ÚSummaryr.   ÚdurationÚorig_speech_secondsÚdub_speech_secondsz>Fraction of original speech time also covered by dubbed speechr,   Úspeech_overlap_ratioz6Fraction of dubbed speech time outside original speechÚunmatched_dub_ratiorU   Úmedian_onset_deltaÚp90_abs_onset_deltaÚbackground_offset_mszdict[str, int]Úissue_countsÚseverity_countsz80-100 heuristic quality score (100 = no detected issues)ÚscoreN)r2   r3   r4   r5   r   rf   rg   rm   r6   r7   r8   rb   rb   T   sc   … ØƒOØÓØÓÙ"'Ð4tÔ"uÐ˜%ÓuÙ!&Ð3kÔ!lÐ˜ÓlØ$Ó$Ø%Ó%Ø&Ó&Ø Ó Ø#Ó#ÙÐ%_Ô`€Eˆ5Ô`r7   rb   c                  óÌ   — e Zd ZU dZeZded<    ed¬«      Zded<    ed¬«      Z	ded	<    ed
¬«      Z
ded<   ded<   ded<   ded<   ded<   ded<   ded<    ee¬«      Zded<   y)ÚReportz.One (original track, dub track) language pair.r;   Úschema_versionz)'<src tag>-><tgt tag>', e.g. 'hi->es-419'r,   ÚpairzGOriginal track: file, stream, container tag, detected/declared languagerN   r@   zBDub track: file, stream, container tag, detected/declared languageÚtargetÚinputsÚconfigrb   Úsummaryzlist[Issue]Úissueszlist[AlignedLine]Úaligned_lineszdict[str, float]Ústage_timingsrL   r]   ÚwarningsN)r2   r3   r4   r_   ÚSCHEMA_VERSIONrp   r5   r   rq   r@   rr   r`   ry   r6   r7   r8   ro   ro   b   sp   … Ù8Ø(€N�CÓ(ÙÐ"MÔN€Dˆ#ÓNÙÐ%nÔo€FˆDÓoÙÐ%iÔj€FˆDÓjØƒLØƒLØÓØÓØ$Ó$Ø#Ó#Ù°Ô5€HˆiÔ5r7   ro   c                  óp   — e Zd ZU dZeZded<   ded<   ded<    eed¬	«      Z	d
ed<    eed¬	«      Z
d
ed<   y)ÚBatchReportz_All dub tracks evaluated against one original (m sources x n targets = one batch per original).r;   rp   rN   Úoriginalzlist[Report]Úreportsz,Audio streams not evaluated, with the reason)rM   r-   z
list[dict]Úskipped_tracksz Pairs that crashed: {dub, error}ÚfailedN)r2   r3   r4   r_   rz   rp   r5   r   r`   r   r€   r6   r7   r8   r|   r|   q   sD   … ÙiØ(€N�CÓ(ØƒNØÓÙ!&°tØ3aô"c€N�Jó cá¨tÐAcÔd€FˆJÔdr7   r|   N)r_   Ú
__future__r   Útypingr   Úpydanticr   r   rz   rA   r?   r=   r(   r:   rQ   rb   ro   r|   r6   r7   r8   ú<module>r„      s‰   ðÙ JÝ "å ç %à€àÐ/Ñ0€Ø	ÐYÑ	Z€Øðñ€ô<[�Yô [ô)ˆIô )ô$7�)ô 7ô aˆiô aô6ˆYô 6ôe�)õ er7   