File size: 3,085 Bytes
5df5de8
0877c16
5df5de8
f25bc2b
0877c16
5df5de8
f25bc2b
da7db39
 
 
 
 
 
5df5de8
da7db39
 
 
5df5de8
f25bc2b
a532daf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3c9e9a9
0877c16
a532daf
 
 
 
 
 
0877c16
 
 
a532daf
0877c16
 
 
 
3c9e9a9
0877c16
a532daf
0877c16
 
 
1187ba7
3c9e9a9
a532daf
f25bc2b
0877c16
 
f25bc2b
0877c16
 
 
 
 
 
 
 
 
 
da7db39
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 gradio as gr
from huggingface_hub import InferenceClient

# تحميل نموذج LLaMA من Hugging Face
client = InferenceClient("meta-llama/Llama-2-7b-chat-hf")

# قائمة السيناريوهات المتاحة
scenarios = {
    "restaurant": "You are in a restaurant. Help the user order food in English.",
    "airport": "You are at an airport. Help the user check in and find their gate.",
    "hotel": "You are in a hotel. Help the user book a room.",
    "shopping": "You are in a store. Help the user ask for prices and sizes.",
}

# دالة لاختيار السيناريو المناسب
def scenario_prompt(choice):
    return scenarios.get(choice, "You are a language tutor AI. Help users practice real-life conversations.")

# دالة للمحادثة مع الذكاء الاصطناعي
def respond(*args):
    """
    نتوقع أن يتم تمرير 7 معاملات بالترتيب التالي:
    0: message
    1: history
    2: scenario (من قائمة الاختيارات)
    3: system_message (قيمة مُدخلة، لكن سنستخدم scenario لتحديدها)
    4: max_tokens
    5: temperature
    6: top_p
    """
    # التأكد من وجود العدد الكافي من المعاملات:
    if len(args) < 7:
        return "Insufficient arguments provided."
    
    message = args[0]
    history = args[1]
    scenario = args[2]
    # تجاهل system_message المُمرر واستبداله بالرسالة المناسبة للسيناريو:
    system_message = scenario_prompt(scenario)
    max_tokens = args[4]
    temperature = args[5]
    top_p = args[6]

    messages = [{"role": "system", "content": system_message}]
    # إذا كان history يحتوي على محادثات سابقة:
    for user_msg, assistant_msg in history:
        if user_msg:
            messages.append({"role": "user", "content": user_msg})
        if assistant_msg:
            messages.append({"role": "assistant", "content": assistant_msg})
    messages.append({"role": "user", "content": message})

    response = ""
    for m in client.chat_completion(
        messages,
        max_tokens=max_tokens,
        stream=True,
        temperature=temperature,
        top_p=top_p,
    ):
        token = m.choices[0].delta.content
        response += token
        yield response




# واجهة `Gradio` للتفاعل مع المستخدم
demo = gr.ChatInterface(
    respond,
    chatbot=gr.Chatbot(type="messages"),  # إصلاح التحذير باستخدام `type="messages"`
    additional_inputs=[
        gr.Dropdown(choices=list(scenarios.keys()), label="Choose a scenario", value="restaurant"),
        gr.Textbox(value=scenario_prompt("restaurant"), label="System message"),
        gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
        gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
        gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"),
    ],
)

if __name__ == "__main__":
    demo.launch()