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 )