File size: 4,607 Bytes
9d04bc3
ce389e8
 
9d04bc3
bab2378
 
9d04bc3
bab2378
 
 
 
9d04bc3
bab2378
 
 
 
 
 
 
 
 
 
 
 
 
4cf2a82
ce389e8
 
 
bab2378
 
 
 
 
 
 
 
 
 
ce389e8
ab6494d
ce389e8
 
bab2378
ce389e8
bab2378
ce389e8
 
bab2378
 
ce389e8
bab2378
ce389e8
bab2378
9d04bc3
bab2378
ce389e8
bab2378
 
4cf2a82
bab2378
9d04bc3
bab2378
 
 
 
 
 
 
 
 
 
 
 
ce389e8
 
bab2378
 
ce389e8
bab2378
ce389e8
 
bab2378
 
ce389e8
bab2378
 
ce389e8
 
 
 
 
 
 
 
 
 
bab2378
 
 
ce389e8
bab2378
 
ce389e8
 
bab2378
 
ce389e8
bab2378
ce389e8
bab2378
ce389e8
 
bab2378
 
ce389e8
 
bab2378
 
 
 
 
 
 
 
 
 
 
9d04bc3
ce389e8
9d04bc3
ce389e8
 
 
bab2378
 
ce389e8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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
    )