Spaces:
Running
Running
changes
Browse files- __pycache__/app.cpython-312.pyc +0 -0
- __pycache__/clean.cpython-312.pyc +0 -0
- __pycache__/transcribe.cpython-312.pyc +0 -0
- __pycache__/utils.cpython-312.pyc +0 -0
- app.py +31 -26
- clean.py +27 -8
- utils.py +8 -7
__pycache__/app.cpython-312.pyc
CHANGED
Binary files a/__pycache__/app.cpython-312.pyc and b/__pycache__/app.cpython-312.pyc differ
|
|
__pycache__/clean.cpython-312.pyc
ADDED
Binary file (1.96 kB). View file
|
|
__pycache__/transcribe.cpython-312.pyc
CHANGED
Binary files a/__pycache__/transcribe.cpython-312.pyc and b/__pycache__/transcribe.cpython-312.pyc differ
|
|
__pycache__/utils.cpython-312.pyc
CHANGED
Binary files a/__pycache__/utils.cpython-312.pyc and b/__pycache__/utils.cpython-312.pyc differ
|
|
app.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1 |
import gradio as gr
|
2 |
import utils
|
|
|
3 |
import transcribe
|
4 |
|
5 |
with gr.Blocks(theme="base") as demo:
|
@@ -18,26 +19,27 @@ with gr.Blocks(theme="base") as demo:
|
|
18 |
source_component = gr.Textbox(placeholder="https://www.youtube.com/watch?v=44vi31hehw4")
|
19 |
preview = gr.HTML(label="Video preview")
|
20 |
source_component.change(utils.convert_to_embed_url, source_component, preview)
|
21 |
-
# transcribe_btn.click(
|
22 |
-
# lambda : gr.Tabs(selected="result"),
|
23 |
-
# None,
|
24 |
-
# tabs
|
25 |
-
# ).then(
|
26 |
-
# utils.generate_audio,
|
27 |
-
# [source, source_component],
|
28 |
-
# [download_audio],
|
29 |
-
# show_progress="minimal"
|
30 |
-
# ).then(
|
31 |
-
# transcribe.transcribe,
|
32 |
-
# [download_audio],
|
33 |
-
# [preliminary_transcript],
|
34 |
-
# show_progress="hidden"
|
35 |
-
# )
|
36 |
|
37 |
-
|
38 |
-
|
39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
|
|
|
|
|
|
|
|
|
|
|
41 |
|
42 |
source.change(utils.transcribe_button, source, transcribe_btn)
|
43 |
|
@@ -51,15 +53,18 @@ with gr.Blocks(theme="base") as demo:
|
|
51 |
cleanup_options,
|
52 |
llm_prompt
|
53 |
)
|
|
|
|
|
|
|
54 |
|
55 |
with gr.Column():
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
|
65 |
demo.launch()
|
|
|
1 |
import gradio as gr
|
2 |
import utils
|
3 |
+
import clean
|
4 |
import transcribe
|
5 |
|
6 |
with gr.Blocks(theme="base") as demo:
|
|
|
19 |
source_component = gr.Textbox(placeholder="https://www.youtube.com/watch?v=44vi31hehw4")
|
20 |
preview = gr.HTML(label="Video preview")
|
21 |
source_component.change(utils.convert_to_embed_url, source_component, preview)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
|
23 |
+
transcribe_btn.click(
|
24 |
+
utils.generate_audio,
|
25 |
+
[source, source_component],
|
26 |
+
[download_audio],
|
27 |
+
show_progress="minimal"
|
28 |
+
).then(
|
29 |
+
transcribe.transcribe,
|
30 |
+
[download_audio],
|
31 |
+
[preliminary_transcript],
|
32 |
+
).then(
|
33 |
+
lambda : [gr.Button(interactive=True), gr.CheckboxGroup(interactive=True)],
|
34 |
+
None,
|
35 |
+
[clean_btn, cleanup_options]
|
36 |
+
)
|
37 |
|
38 |
+
with gr.Column():
|
39 |
+
with gr.Row():
|
40 |
+
transcribe_btn = gr.Button("Transcribe audio 📜", variant="primary")
|
41 |
+
download_audio = gr.DownloadButton("Download .mp3 File 📥", interactive=False)
|
42 |
+
preliminary_transcript = gr.Textbox(info="Raw transcript", lines=10, max_lines=10, show_copy_button=True, show_label=False, interactive=False)
|
43 |
|
44 |
source.change(utils.transcribe_button, source, transcribe_btn)
|
45 |
|
|
|
53 |
cleanup_options,
|
54 |
llm_prompt
|
55 |
)
|
56 |
+
with gr.Row():
|
57 |
+
clean_btn = gr.Button("Clean transcript ✨", variant="primary")
|
58 |
+
download_md = gr.DownloadButton("Download .md 📥", interactive=False)
|
59 |
|
60 |
with gr.Column():
|
61 |
+
final_transcript = gr.Markdown("*Final transcript will appear here*", height=400)
|
62 |
+
|
63 |
+
clean_btn.click(
|
64 |
+
clean.clean_transcript,
|
65 |
+
[download_audio, cleanup_options, llm_prompt, preliminary_transcript],
|
66 |
+
[final_transcript, download_md],
|
67 |
+
show_progress="minimal"
|
68 |
+
)
|
69 |
|
70 |
demo.launch()
|
clean.py
CHANGED
@@ -1,12 +1,31 @@
|
|
1 |
from huggingface_hub import InferenceClient
|
|
|
|
|
2 |
|
3 |
MODEL_NAME = "meta-llama/Meta-Llama-3-70b-Instruct"
|
4 |
|
5 |
-
def
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
from huggingface_hub import InferenceClient
|
2 |
+
from pathlib import Path
|
3 |
+
import gradio as gr
|
4 |
|
5 |
MODEL_NAME = "meta-llama/Meta-Llama-3-70b-Instruct"
|
6 |
|
7 |
+
def split_text_into_chunks(text, chunk_size=600):
|
8 |
+
words = text.split()
|
9 |
+
chunks = [' '.join(words[i:i + chunk_size]) for i in range(0, len(words), chunk_size)]
|
10 |
+
return chunks
|
11 |
+
|
12 |
+
def clean_transcript(audio_file, options, prompt, transcript: str):
|
13 |
+
text = f"### {Path(audio_file).with_suffix('').name}\n\n"
|
14 |
+
if options == []:
|
15 |
+
text += transcript
|
16 |
+
else:
|
17 |
+
chunks = split_text_into_chunks(transcript)
|
18 |
+
for chunk in chunks:
|
19 |
+
messages = [
|
20 |
+
{"role": "user", "content": prompt + "\n" + chunk}
|
21 |
+
]
|
22 |
+
client = InferenceClient(model=MODEL_NAME)
|
23 |
+
for c in client.chat_completion(messages, max_tokens=1000, stream=True):
|
24 |
+
token = c.choices[0].delta.content
|
25 |
+
text += token
|
26 |
+
yield text, None
|
27 |
+
|
28 |
+
# write text to md file
|
29 |
+
md_file = Path(audio_file).with_suffix('.md')
|
30 |
+
md_file.write_text(text)
|
31 |
+
return text, gr.DownloadButton(interactive=True, value=md_file)
|
utils.py
CHANGED
@@ -56,15 +56,16 @@ def generate_audio(source, source_file):
|
|
56 |
else:
|
57 |
gr.Info("Downloading audio from YouTube...")
|
58 |
audio_file = download_audio_from_youtube(source_file)
|
59 |
-
return gr.DownloadButton(
|
60 |
|
61 |
def generate_prompt(cleanup):
|
|
|
62 |
if not cleanup:
|
63 |
return gr.Textbox(visible=False)
|
64 |
-
elif
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
|
|
|
56 |
else:
|
57 |
gr.Info("Downloading audio from YouTube...")
|
58 |
audio_file = download_audio_from_youtube(source_file)
|
59 |
+
return gr.DownloadButton(value=audio_file, interactive=True)
|
60 |
|
61 |
def generate_prompt(cleanup):
|
62 |
+
prompt = "The following is a raw transcript from an automatic transcription system. "
|
63 |
if not cleanup:
|
64 |
return gr.Textbox(visible=False)
|
65 |
+
elif "Remove typos" in cleanup:
|
66 |
+
prompt += "Fix the minor typos (e.g. misspellings, homophones) in the transcript so that the transcript reads more logically. "
|
67 |
+
if "Separate into paragraphs" in cleanup:
|
68 |
+
prompt += "Separate the transcript into paragraphs to make it more readable. "
|
69 |
+
prompt += "Don't add any extra words in your response, like 'Here is the corrected transcript:' just return the final transcript."
|
70 |
+
return gr.Textbox(visible=True, value=prompt)
|
71 |
|