astramind-chat / app.py
kawkabelaloom's picture
Update app.py
bab2378 verified
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
)