File size: 2,832 Bytes
5b96546
 
 
445514f
05de030
faf59a3
5b96546
05de030
d1667c4
 
05de030
faf59a3
5b96546
05de030
800ec69
5b96546
445514f
faf59a3
800ec69
 
d1667c4
faf59a3
 
d1667c4
800ec69
 
faf59a3
d1667c4
faf59a3
5b96546
05de030
d1667c4
 
faf59a3
 
d1667c4
faf59a3
 
 
d1667c4
faf59a3
d1667c4
 
faf59a3
05de030
 
800ec69
d1667c4
faf59a3
05de030
d1667c4
faf59a3
 
d1667c4
faf59a3
d1667c4
05de030
faf59a3
445514f
faf59a3
5b96546
 
faf59a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5b96546
 
faf59a3
d1667c4
 
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
import os
from dotenv import load_dotenv
from huggingface_hub import InferenceClient
import gradio as gr

# تحميل متغيرات البيئة
load_dotenv()
api_key = os.getenv("FIREWORKS_API_KEY")
if not api_key:
    raise ValueError("❌ لم يتم العثور على FIREWORKS_API_KEY في ملف .env")

# إعداد عميل InferenceClient
client = InferenceClient(
    provider="fireworks-ai",
    api_key=api_key
)

# إعداد رسالة النظام
system_message = {
    "role": "system",
    "content": (
        "أنت مساعد ذكي متخصص في مجال الأشعة الطبية. "
        "تقدم إجابات دقيقة وواضحة في تفسير الصور الشعاعية والاستشارات المرتبطة بها فقط."
    )
}

MAX_HISTORY_TURNS = 6

# دالة المحادثة
def chat_fn(message, history):
    try:
        messages = [system_message]

        # الاحتفاظ بآخر الرسائل فقط
        if history:
            history = history[-MAX_HISTORY_TURNS:]
            for user_msg, bot_msg in history:
                messages.append({"role": "user", "content": user_msg})
                messages.append({"role": "assistant", "content": bot_msg})

        # إضافة الرسالة الحالية
        messages.append({"role": "user", "content": message})

        # استدعاء النموذج
        completion = client.chat.completions.create(
            model="deepseek-ai/DeepSeek-R1",
            messages=messages,
            max_tokens=4096,
            temperature=0.7,
        )

        if not completion or not completion.choices or not completion.choices[0].message.content.strip():
            return "❌ لم يتم استلام رد من النموذج. حاول مرة أخرى أو تحقق من الاتصال."

        return completion.choices[0].message.content.strip()

    except Exception as e:
        return f"❌ خطأ: {e}"

# إعداد واجهة Gradio بشكل جميل
chat_interface = gr.ChatInterface(
    fn=chat_fn,
    title="🧠 RAY AI Chat - متخصص في الأشعة",
    description="مرحبًا بك في مساعد الذكاء الاصطناعي الخاص بتفسير الأشعة. يرجى طرح سؤالك الطبي المتعلق بالتصوير الشعاعي 👇",
    theme=gr.themes.Base(
        primary_hue="blue",
        secondary_hue="slate",
        font=["Cairo", "sans-serif"]
    ),
    submit_btn="أرسل 📨",
    retry_btn="🔁 إعادة",
    clear_btn="🧹 مسح",
    textbox=gr.Textbox(
        placeholder="اكتب سؤالك هنا... مثال: ما معنى وجود تكلسات في الغدة الدرقية؟",
        container=True,
        scale=7
    ),
)

# إطلاق التطبيق
if __name__ == "__main__":
    chat_interface.launch()