import gradio as gr from langchain.document_loaders import YoutubeLoader def process_youtube_url(url, language): try: loader = YoutubeLoader.from_youtube_url( youtube_url=url, add_video_info=True, language=[language], ) docs = loader.load() return str(docs), [], "" except Exception as e: error_msg = str(e) available_languages = extract_available_languages(error_msg) recommended_language = extract_recommended_language(error_msg) return f"Error: {error_msg}", available_languages, recommended_language def extract_available_languages(error_msg): languages = [] generated_section = False for line in error_msg.split("\n"): if line.startswith("(GENERATED)"): generated_section = True elif generated_section and line.startswith(" - "): lang_code, lang_name = line[3:].split(" (", 1) languages.append(f"{lang_name[:-1]} ({lang_code})") return languages def extract_recommended_language(error_msg): generated_section = False for line in error_msg.split("\n"): if line.startswith("(GENERATED)"): generated_section = True elif generated_section and line.startswith(" - ") and "[TRANSLATABLE]" in line: lang_code, lang_name = line[3:].split(" (", 1) return f"{lang_name[:-1]} ({lang_code})" return "" iface = gr.Interface( fn=process_youtube_url, inputs=[ gr.Textbox(label="YouTube URL", placeholder="https://youtu.be/example"), gr.Dropdown(label="Language", choices=["en", "ja", "fr","de","it"],allow_custom_value=True), ], outputs=[ gr.Textbox(label="Loaded Documents / Error Message",show_copy_button=True), gr.Dropdown(label="Available Languages"), gr.Textbox(label="Recommended Language") ], title="YouTube Transcript Loader", description="Enter a YouTube URL and select the language to load the transcript using LangChain's YoutubeLoader.[buy me a coffee](https://www.buymeacoffee.com/regulusle04)", ) if __name__ == "__main__": iface.launch()