Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import requests | |
| import os | |
| # 🔒 احصل على Token من Environment Variables (آمن) | |
| HF_TOKEN = os.environ.get("HF_TOKEN") | |
| # تأكد من وجود Token | |
| if not HF_TOKEN: | |
| print("⚠️ تحذير: لم يتم العثور على HF_TOKEN في Environment Variables") | |
| print("🔧 الرجاء إضافة HF_TOKEN في Space → Settings → Repository secrets") | |
| def chat_with_model(message): | |
| """استخدام النموذج بشكل آمن""" | |
| if not HF_TOKEN: | |
| return "❌ خطأ: لم يتم تكوين Token. الرجاء التحقق من الإعدادات." | |
| # URL النموذج | |
| MODEL = "kawkabelaloom/astramind" | |
| API_URL = f"https://api-inference.huggingface.co/models/{MODEL}" | |
| headers = {"Authorization": f"Bearer {HF_TOKEN}"} | |
| # تنسيق الرسالة | |
| prompt = f"سؤال: {message}\nجواب:" | |
| try: | |
| response = requests.post( | |
| API_URL, | |
| headers=headers, | |
| json={ | |
| "inputs": prompt, | |
| "parameters": { | |
| "max_new_tokens": 200, | |
| "temperature": 0.7, | |
| "top_p": 0.9, | |
| "return_full_text": False | |
| } | |
| }, | |
| timeout=30 | |
| ) | |
| if response.status_code == 200: | |
| result = response.json() | |
| if isinstance(result, list) and len(result) > 0: | |
| answer = result[0].get('generated_text', '') | |
| # تنظيف الرد | |
| if prompt in answer: | |
| answer = answer.replace(prompt, "").strip() | |
| return f"🤖 {answer}" if answer else "⚠️ لم أتلق رداً واضحاً." | |
| else: | |
| return f"⚠️ تنسيق غير متوقع: {result}" | |
| else: | |
| return f"❌ خطأ {response.status_code} من API" | |
| except requests.exceptions.Timeout: | |
| return "⏳ النموذج يأخذ وقتاً، جرب مرة أخرى بعد قليل..." | |
| except Exception as e: | |
| return f"❌ حدث خطأ: {str(e)}" | |
| # واجهة Gradio | |
| with gr.Blocks(theme=gr.themes.Soft(), title="Astramind Chatbot") as demo: | |
| gr.Markdown(""" | |
| # 🤖 Astramind - مساعد الدردشة العربي | |
| ### اسأل أي سؤال وسأحاول الإجابة عليه باستخدام الذكاء الاصطناعي | |
| """) | |
| # حالة Token | |
| if not HF_TOKEN: | |
| gr.Markdown("### ⚠️ تحذير: Token غير موجود") | |
| gr.Markdown("الرجاء إضافته في Space → Settings → Repository secrets") | |
| with gr.Row(): | |
| with gr.Column(scale=3): | |
| input_box = gr.Textbox( | |
| label="اكتب سؤالك هنا", | |
| placeholder="مثال: السلام عليكم، كيف حالك؟", | |
| lines=3 | |
| ) | |
| send_btn = gr.Button("🚀 إرسال", variant="primary", size="lg") | |
| with gr.Column(scale=4): | |
| output_box = gr.Textbox( | |
| label="رد المساعد", | |
| lines=8, | |
| interactive=False | |
| ) | |
| # أمثلة | |
| gr.Examples( | |
| examples=[ | |
| ["السلام عليكم"], | |
| ["ما هو اسمك؟"], | |
| ["كيف يمكنني التسجيل؟"], | |
| ["أخبرني قصة قصيرة"], | |
| ["ما هي عاصمة فرنسا؟"] | |
| ], | |
| inputs=input_box, | |
| label="امثلة للبداية" | |
| ) | |
| def process_input(message): | |
| """معالجة المدخلات""" | |
| if not message.strip(): | |
| return "الرجاء كتابة سؤال أولاً." | |
| return chat_with_model(message) | |
| # ربط الأحداث | |
| send_btn.click(process_input, inputs=input_box, outputs=output_box) | |
| input_box.submit(process_input, inputs=input_box, outputs=output_box) | |
| # زر المسح | |
| clear_btn = gr.Button("🧹 مسح", variant="secondary") | |
| clear_btn.click(lambda: ("", ""), None, [input_box, output_box]) | |
| # تعليمات | |
| gr.Markdown(""" | |
| --- | |
| ### 💡 نصائح: | |
| - اكتب سؤالاً واضحاً | |
| - يمكنك سؤال عن أي موضوع | |
| - الرد قد يستغرق بضع ثواني | |
| """) | |
| # التشغيل | |
| if __name__ == "__main__": | |
| demo.launch( | |
| server_name="0.0.0.0", | |
| server_port=7860, | |
| share=False, | |
| debug=False | |
| ) |