Mohammed Ali Taher Mohammed
Create app.py
c2b5117 verified
Raw
History Blame Contribute Delete
2.79 kB
import gradio as gr
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
from gtts import gTTS
import os
import torch
import spaces # المكتبة الخاصة بـ Hugging Face Spaces لإدارة الـ GPU
print("Loading model and tokenizer...")
model_name = "sshleifer/distilbart-cnn-12-6"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
# استخدام دالة الجلب المخصصة لبيئة ZeroGPU وتحديد مسار برمجيات torch
if torch.cuda.is_available():
model = model.to("cuda")
# إضافة الـ Decorator لكي يتعرف نظام تشغيل الموقع على الدالة ويسمح ببنائها
@spaces.GPU
def process_text(text):
if not text.strip():
return "الرجاء إدخال نص صالح للتلخيص.", None
try:
# نقل المدخلات إلى الـ GPU إذا كان متاحاً
device = "cuda" if torch.cuda.is_available() else "cpu"
inputs = tokenizer([text], max_length=1024, return_tensors="pt", truncation=True).to(device)
# توليد التلخيص
summary_ids = model.generate(
inputs["input_ids"],
num_beams=2,
max_length=140,
min_length=30,
early_stopping=True
)
summary_text = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
# توليد الملف الصوتي
tts = gTTS(text=summary_text, lang='en')
audio_path = "summary_audio.mp3"
tts.save(audio_path)
return summary_text, audio_path
except Exception as e:
return f"حدث خطأ أثناء معالجة النص: {str(e)}", None
# بناء واجهة Gradio
theme = gr.themes.Soft(primary_hue="blue", secondary_hue="indigo")
with gr.Blocks(theme=theme) as demo:
gr.Markdown("# 🤖 AI Text Summarizer & Audio Generator")
gr.Markdown("قم بلصق أي نص إنجليزي طويل للحصول على تلخيص ذكي وملف صوتي للملخص تلقائياً.")
with gr.Row():
with gr.Column():
input_text = gr.Textbox(label="Input Text (النص الأصلي)", lines=10, placeholder="Enter or paste your long text here...")
submit_btn = gr.Button("Generate Summary & Audio", variant="primary")
with gr.Column():
output_summary = gr.Textbox(label="AI Summary (التلخيص الذكي)", lines=5)
output_audio = gr.Audio(label="Audio Playback (الملف الصوتي)", type="filepath")
submit_btn.click(fn=process_text, inputs=input_text, outputs=[output_summary, output_audio])
if __name__ == "__main__":
demo.launch()