DHEIVER commited on
Commit
eb0d490
·
verified ·
1 Parent(s): d3b3b84

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +111 -0
app.py ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ os.system('pip install dashscope')
3
+ import gradio as gr
4
+ from http import HTTPStatus
5
+ import dashscope
6
+ from dashscope import Generation
7
+ from dashscope.api_entities.dashscope_response import Role
8
+ from typing import List, Optional, Tuple, Dict
9
+ from urllib.error import HTTPError
10
+
11
+ default_system = 'You are a helpful assistant.'
12
+
13
+ YOUR_API_TOKEN = os.getenv('YOUR_API_TOKEN')
14
+ dashscope.api_key = YOUR_API_TOKEN
15
+
16
+ History = List[Tuple[str, str]]
17
+ Messages = List[Dict[str, str]]
18
+
19
+ def clear_session() -> History:
20
+ return '', []
21
+
22
+ def modify_system_session(system: str) -> str:
23
+ if system is None or len(system) == 0:
24
+ system = default_system
25
+ return system, system, []
26
+
27
+ def history_to_messages(history: History, system: str) -> Messages:
28
+ messages = [{'role': Role.SYSTEM, 'content': system}]
29
+ for h in history:
30
+ messages.append({'role': Role.USER, 'content': h[0]})
31
+ messages.append({'role': Role.ASSISTANT, 'content': h[1]})
32
+ return messages
33
+
34
+ def messages_to_history(messages: Messages) -> Tuple[str, History]:
35
+ assert messages[0]['role'] == Role.SYSTEM
36
+ system = messages[0]['content']
37
+ history = []
38
+ for q, r in zip(messages[1::2], messages[2::2]):
39
+ history.append([q['content'], r['content']])
40
+ return system, history
41
+
42
+ def model_chat(query: Optional[str], history: Optional[History], system: str) -> Tuple[str, str, History]:
43
+ if query is None:
44
+ query = ''
45
+ if history is None:
46
+ history = []
47
+ messages = history_to_messages(history, system)
48
+ messages.append({'role': Role.USER, 'content': query})
49
+ gen = Generation.call(
50
+ model='qwen-max-0125',
51
+ messages=messages,
52
+ result_format='message',
53
+ stream=True
54
+ )
55
+ for response in gen:
56
+ if response.status_code == HTTPStatus.OK:
57
+ role = response.output.choices[0].message.role
58
+ response = response.output.choices[0].message.content
59
+ system, history = messages_to_history(messages + [{'role': role, 'content': response}])
60
+ yield '', history, system
61
+ else:
62
+ raise ValueError('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
63
+ response.request_id, response.status_code,
64
+ response.code, response.message
65
+ ))
66
+
67
+ with gr.Blocks() as demo:
68
+ gr.Markdown("""<center><font size=8>Qwen2.5-Max👾</center>""")
69
+
70
+ with gr.Row():
71
+ with gr.Column(scale=3):
72
+ system_input = gr.Textbox(value=default_system, lines=2, label='System Prompt', placeholder="Enter your system prompt here...")
73
+ with gr.Column(scale=1):
74
+ modify_system = gr.Button("🛠️ Set System Prompt", scale=2)
75
+ system_state = gr.Textbox(value=default_system, visible=False)
76
+
77
+ chatbot = gr.Chatbot(label='Chat with Qwen2.5-Max', height=400)
78
+ textbox = gr.Textbox(lines=2, label='Your Message', placeholder="Type your message here...")
79
+
80
+ with gr.Row():
81
+ clear_history = gr.Button("🧹 Clear History", variant="secondary")
82
+ submit = gr.Button("🚀 Send", variant="primary")
83
+
84
+ with gr.Accordion("Advanced Settings", open=False):
85
+ with gr.Row():
86
+ temperature = gr.Slider(minimum=0.1, maximum=1.0, value=0.7, label="Temperature")
87
+ max_tokens = gr.Slider(minimum=50, maximum=500, value=150, label="Max Tokens")
88
+ top_p = gr.Slider(minimum=0.1, maximum=1.0, value=0.9, label="Top-p")
89
+
90
+ textbox.submit(model_chat,
91
+ inputs=[textbox, chatbot, system_state],
92
+ outputs=[textbox, chatbot, system_input],
93
+ concurrency_limit=40)
94
+
95
+ submit.click(model_chat,
96
+ inputs=[textbox, chatbot, system_state],
97
+ outputs=[textbox, chatbot, system_input],
98
+ concurrency_limit=40)
99
+
100
+ clear_history.click(fn=clear_session,
101
+ inputs=[],
102
+ outputs=[textbox, chatbot],
103
+ concurrency_limit=40)
104
+
105
+ modify_system.click(fn=modify_system_session,
106
+ inputs=[system_input],
107
+ outputs=[system_state, system_input, chatbot],
108
+ concurrency_limit=40)
109
+
110
+ demo.queue(api_open=False)
111
+ demo.launch(max_threads=40)