
    4Aj                    z    d Z ddlmZ ddl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  G d de          ZdS )zYouTube transcript fetcher tool wrapping youtube-transcript-api.

Extracts transcripts/captions from YouTube videos without downloading the video.
Instant, free, no API key needed. Falls back to yt-dlp subtitle download.
    )annotationsN)Any)	BaseToolDeterminismExecutionModeResourceProfile
ToolResultToolStability
ToolStatusToolTierToolRuntimec                  P   e Zd ZdZdZej        ZdZdZ	e
j        Zej        Zej        Zej        ZdgZdZg ZddgZg d	Zg d
ZddgddddddidgddddddddZdddddiddiddidddddiddiddiddiddid dZ ed!d"d#d$d%          Zdd&gZ g Z!d'Z"d(gZ#d2d,Z$d3d0Z%d1S )4TranscriptFetchertranscript_fetcherz0.1.0analysiszyoutube-transcript-apizpython:youtube_transcript_apizBInstall youtube-transcript-api: pip install youtube-transcript-apifetch_transcriptlist_transcripts)z"fast YouTube transcript extractionz-caption-based analysis without video downloadz,getting timestamped text from YouTube videos)z)non-YouTube platforms (Instagram, TikTok)zvideos without any captionsz2speaker diarization (use transcriber tool instead)objecturl_or_video_idstringzYouTube URL or video ID)typedescriptionarrayr   enz%Preferred languages in priority order)r   itemsdefaultr   booleanTz*Whether to include auto-generated captions)r   r   r   )r   	languagesinclude_auto_generated)r   required
propertiesnumbertextstartduration)r   r!   )r   r   integer)
transcript	full_textlanguageis_auto_generated
word_countsource      r   
   )	cpu_coresram_mbvram_mbdisk_mbnetwork_requiredr   transcriberz2Spot-check transcript accuracy against video audio	url_or_idstrreturnc                    t          j        d|          r|S dg}|D ]0}t          j        ||          }|r|                    d          c S 1|                                S )zCExtract YouTube video ID from URL or return as-is if already an ID.z^[A-Za-z0-9_-]{11}$zc(?:youtube\.com/watch\?.*v=|youtu\.be/|youtube\.com/embed/|youtube\.com/shorts/)([A-Za-z0-9_-]{11})r.   )rematchsearchgroupstrip)selfr7   patternspatternr<   s        P/app/working/workspaces/default/OpenMontage/tools/analysis/transcript_fetcher.py_extract_video_idz#TranscriptFetcher._extract_video_ids   s     8*I66 	 s
   	& 	&GIgy11E &{{1~~%%%&        inputsdict[str, Any]r	   c                   |                      |d                   }|                    ddg          }|                    dd          }t          j                    }	 ddlm}  |            }|                    ||          }g }	g }
|j        D ]`}|	                    |j        t          |j
        d	          t          |j        d	          d
           |
                    |j                   ad                    |
          }t          |                                          }t          |dd          }t          |d|d                   }t!          |d          r|j        }nt%          |t&                    s|d         }t          j                    |z
  }t)          d|	||||d|t          |	          dt          |d                    S # t*          $ r t)          dd          cY S t,          $ r}t          j                    |z
  }t'          |          }d|v sd|v r-t)          dd| d|ddt          |d                    cY d }~S t)          dd| d|it          |d                    cY d }~S d }~ww xY w)Nr   r   r   r   Tr   )YouTubeTranscriptApi)r      r#    is_generatedFr*   codeyoutube_captions)r(   r)   r*   r+   r,   r-   video_idsegment_count   )successdataduration_secondszMyoutube-transcript-api not installed. Run: pip install youtube-transcript-api)rR   errorzCould not retrieveTranscriptsDisabledz No captions available for video z. This video may not have captions enabled. Fallback: download the video and use the transcriber tool with Whisper for local transcription.r6   )rO   fallback_suggested)rR   rU   rS   rT   zTranscript fetch failed: rO   )rD   gettimeyoutube_transcript_apirI   fetchsnippetsappendr$   roundr%   r&   joinlensplitgetattrhasattrrM   
isinstancer8   r	   ImportError	Exception)r@   rF   rO   r   include_autor%   rI   ytttranscript_resultsegmentsfull_text_partssnippetr)   r,   is_autodetected_langelapsede	error_strs                      rC   executezTranscriptFetcher.execute   s?   ))&1B*CDDJJ{TF33	zz":DAA	L	CCCCCC&&((C !$		(i	 H H H O,5 5 5#L"7=!44 %g&6 : :! !   
  &&w|444411IY__..//J /GGG#$5z9Q<PPM}f-- - - 2s33 - )!ikkE)G"*!* -)0",0 (%(]]	 	 "'w!2!2     	 	 	e       	 	 	ikkE)GAI $y004IY4V4V!!@8 @ @ @
 '/mTT%*7A%6%6
 
 
 
 
 
 
 
 
 =)== (+!&w!2!2	        %	s2   E1G I?,	I?5AI:	I?%I:4I?:I?N)r7   r8   r9   r8   )rF   rG   r9   r	   )&__name__
__module____qualname__nameversionr   ANALYZEtier
capabilityproviderr
   
PRODUCTION	stabilityr   SYNCexecution_moder   DETERMINISTICdeterminismr   LOCALruntimedependenciesinstall_instructionsagent_skillscapabilitiesbest_fornot_good_forinput_schemaoutput_schemar   resource_profileidempotency_key_fieldsside_effectsfallbackuser_visible_verificationrD   rr    rE   rC   r   r      s       DGDJ'H(I"'N+KG34LL  L 	L
  H  L &' !8   
   (+ 6F	  "K' '
 
 L.   $!' 2"((!3%+X$6# # 
 
 !(+*"()!4!9-x(!
 
 M, 'CB   0=LH<!! ! ! !$S S S S S SrE   r   )__doc__
__future__r   r;   rY   typingr   tools.base_toolr   r   r   r   r	   r
   r   r   r   r   r   rE   rC   <module>r      s     # " " " " " 				       
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
~ ~ ~ ~ ~ ~ ~ ~ ~ ~rE   