Spaces:
Sleeping
Sleeping
File size: 4,927 Bytes
5e64bf4 800a0b9 5e64bf4 4a49001 5e64bf4 a50b135 5e64bf4 800a0b9 e97f221 800a0b9 e97f221 048dc25 60c8df4 e97f221 800a0b9 a50b135 800a0b9 a50b135 800a0b9 a50b135 800a0b9 a50b135 5e64bf4 a50b135 5e64bf4 a50b135 5e64bf4 a50b135 800a0b9 a50b135 800a0b9 a50b135 800a0b9 a50b135 5e64bf4 a50b135 5e64bf4 8d470a5 7a09345 61c0d04 8d470a5 628f4e2 7a09345 8d470a5 ffde5bb 628f4e2 a50b135 5e64bf4 628f4e2 a50b135 5e64bf4 a77a456 | 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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | import gradio as gr
import whisper
from openai import OpenAI
from langdetect import detect
import os
import time
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
whisper_model = whisper.load_model("tiny")
LANGUAGES = ["Turkish", "Arabic", "Kurdish", "Japanese", "English"]
LANG_CODES = {
"Turkish": "tr",
"Arabic": "ar",
"Kurdish": "ku",
"Japanese": "ja",
"English": "en"
}
SUMMARY_PROMPTS = {
"Turkish": "Lütfen aşağıdaki metni açık ve öz bir şekilde özetle:\n\n{text}",
"Arabic": "يرجى تلخيص النص التالي بطريقة واضحة وموجزة:\n\n{text}",
"Kurdish": "Ji kerema xwe nivîsa jêr bi awayekê zelal û kurt re kurt bike:\n\n{text}",
"Japanese": "以下の文章を簡潔に要約してください:\n\n{text}",
"English": "Please summarize the following text clearly and briefly:\n\n{text}"
}
QUIZ_PROMPTS = {
"Turkish": "Aşağıdaki özetten yola çıkarak 2 adet çoktan seçmeli soru üret (her biri 4 şıklı):\n\n{text}",
"Arabic": "استنادًا إلى الملخص التالي، أنشئ سؤالين من نوع الاختيار من متعدد (لكل منهما 4 خيارات):\n\n{text}",
"Kurdish": """Ji bo vê kurtkirinê, 2 pirsyarên bijartinê (her yek bi 4 vebijêrk) binivîse. Her pirsyar divê bi awayekê zelal were nivîsîn û vebijêrkên wê bi (a), (b), (c), (d) were nîşandan. Vebijêrkên rast û çewt li hev biguherînin.
Ev kurtkirinê:
{text}""",
"Japanese": "以下の要約に基づいて、4つの選択肢を持つ選択式の質問を2つ作成してください:\n\n{text}",
"English": "Based on the following summary, generate 2 multiple choice questions (each with 4 options):\n\n{text}"
}
def translate_text(text, target_lang):
prompt = f"""Translate the following text into {target_lang}:\n\n{text}"""
start = time.time()
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
max_tokens=1000
)
print(f"⏱️ Translate time: {time.time() - start:.2f}s")
return response.choices[0].message.content.strip()
def transcribe_audio(audio):
if audio is None:
return "No audio uploaded", ""
start = time.time()
result = whisper_model.transcribe(audio)
print(f"⏱️ Transcription time: {time.time() - start:.2f}s")
return result["text"], result["text"]
def summarize_text(text, summary_lang):
start = time.time()
detected = detect(text)
target_code = LANG_CODES[summary_lang]
translated = translate_text(text, summary_lang) if detected != target_code else text
prompt = SUMMARY_PROMPTS[summary_lang].format(text=translated)
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
max_tokens=500
)
print(f"⏱️ Summarization time: {time.time() - start:.2f}s")
return response.choices[0].message.content.strip()
def generate_quiz(summary, lang):
start = time.time()
prompt = QUIZ_PROMPTS[lang].format(text=summary)
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
max_tokens=500
)
print(f"⏱️ Quiz generation time: {time.time() - start:.2f}s")
return response.choices[0].message.content.strip()
custom_css = """
.audio-col {width: 320px !important;}
.lang-col {width: 200px !important; margin-left: 16px;}
.trans-box, .sum-box, .quiz-box {min-height: 60px; max-height: 210px; font-size: 1rem;}
#output_row .gr-box {margin-bottom: 10px;}
"""
with gr.Blocks(css=custom_css) as demo:
gr.Markdown("# 🧠 Multilingual Audio Summarizer + Quiz Generator")
with gr.Row():
with gr.Column(elem_classes="audio-col"):
audio_input = gr.Audio(type="filepath", label="🎙️ Upload audio")
with gr.Column(elem_classes="lang-col"):
summary_lang = gr.Dropdown(choices=LANGUAGES, value="Turkish", label="🌐 Output Language")
with gr.Row(elem_id="output_row"):
transcribed_text = gr.Textbox(label="📄 Transcription", lines=7, elem_classes="trans-box")
summary_output = gr.Textbox(label="✂️ Summary", lines=7, elem_classes="sum-box")
quiz_output = gr.Textbox(label="📘 Quiz", lines=7, elem_classes="quiz-box")
with gr.Row():
transcribe_btn = gr.Button("🎧 Transcribe")
summarize_btn = gr.Button("✂️ Summarize")
quiz_btn = gr.Button("📘 Generate Quiz")
transcribe_btn.click(fn=transcribe_audio, inputs=[audio_input], outputs=[transcribed_text, transcribed_text])
summarize_btn.click(fn=summarize_text, inputs=[transcribed_text, summary_lang], outputs=summary_output)
quiz_btn.click(fn=generate_quiz, inputs=[summary_output, summary_lang], outputs=quiz_output)
demo.launch() |