import gradio as gr from transformers import AutoTokenizer, AutoModelForSeq2SeqLM from gtts import gTTS import os # 1. استخدام نموذج خفيف وسريع متوافق تماماً مع البيئات المجانية print("Loading light-weight model and tokenizer...") model_name = "sshleifer/distilbart-cnn-12-6" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSeq2SeqLM.from_pretrained(model_name) def process_text(text): if not text.strip(): return "الرجاء إدخال نص صالح للتلخيص.", None try: # 2. تحويل النص إلى تنسيق يفهمه النموذج inputs = tokenizer([text], max_length=1024, return_tensors="pt", truncation=True) # 3. توليد التلخيص مباشرة ببارامترات مستقرة 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) # 4. تحويل التلخيص النصي إلى ملف صوتي 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()