Spaces:
Runtime error
Runtime error
File size: 3,029 Bytes
22e8001 09131b8 45a8b80 4ee8f27 cc7c091 4ee8f27 22e8001 2d161b2 45a8b80 481f3ca 45a8b80 b849449 45a8b80 22e8001 45a8b80 22e8001 fa531c0 22e8001 be59c7a 09131b8 2d161b2 22e8001 09131b8 22e8001 ee10cd9 22e8001 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import gradio as gr
from langchain_community.document_loaders import YoutubeLoader
from langchain.text_splitter import TokenTextSplitter
from fastapi import FastAPI
max_textboxes = 10
def process_youtube_url(url, language):
try:
loader = YoutubeLoader.from_youtube_url(
youtube_url=url,
add_video_info=True,
language=[language],
)
docs = loader.load()
text = str(docs)
char_count = len(text)
text_splitter = TokenTextSplitter(chunk_size=10000, chunk_overlap=0)
chunks = text_splitter.split_text(text)
max_textboxes = 10
output_textboxes = [gr.Textbox(label=f"Chunk {i+1}", value=chunk, show_copy_button=True, visible=i < len(chunks)) for i, chunk in enumerate(chunks[:max_textboxes])]
output_textboxes += [gr.Textbox(visible=False) for _ in range(max_textboxes - len(chunks))]
return output_textboxes, [], "", char_count
except Exception as e:
error_msg = str(e)
available_languages = extract_available_languages(error_msg)
recommended_language = extract_recommended_language(error_msg)
return [gr.Textbox(label="Error", value=error_msg, show_copy_button=True)], available_languages, recommended_language, 0
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",value="ja",choices=["en","en-US", "ja", "fr","de","it"],allow_custom_value=True),
],
outputs=[
[gr.Textbox(f"chunk{ind}") for ind in range(max_textboxes)],
gr.Dropdown(label="Available Languages", allow_custom_value=True),
gr.Textbox(label="Recommended Language"),
gr.Number(label="Character Count")
],
examples = [["https://youtu.be/6Af6b_wyiwI?si=zqD9-kjw24lpRJw3","ja"],["https://youtu.be/9kxL9Cf46VM?si=ADgUmDXb6riA-lgb","ja"]],
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() |