cnshdd commited on
Commit
f9206c0
·
verified ·
1 Parent(s): 0f1d0e7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +87 -62
app.py CHANGED
@@ -1,72 +1,97 @@
 
 
1
  import gradio as gr
2
- from huggingface_hub import InferenceClient, HfApi
3
- import minijinja
4
- import sys
5
- import traceback
 
 
 
6
 
7
- # Ensure minijinja is installed
8
- try:
9
- import minijinja
10
- except ImportError:
11
- subprocess.check_call([sys.executable, "-m", "pip", "install", "minijinja"])
12
- import minijinja
13
 
14
- """
15
- For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
16
- """
17
- client = InferenceClient("cnshdd/Phi-3-medium-128k-instruct-YM0606")
18
 
19
- def respond(
20
- message,
21
- history: list[tuple[str, str]],
22
- system_message,
23
- max_tokens,
24
- temperature,
25
- top_p,
26
- ):
27
- messages = [{"role": "system", "content": system_message}]
28
 
29
- for val in history:
30
- if val[0]:
31
- messages.append({"role": "user", "content": val[0]})
32
- if val[1]:
33
- messages.append({"role": "assistant", "content": val[1]})
34
 
35
- messages.append({"role": "user", "content": message})
 
 
 
36
 
37
- response = ""
 
 
 
 
 
38
 
39
- try:
40
- for message in client.chat_completion(
41
- messages,
42
- max_tokens=max_tokens,
43
- stream=True,
44
- temperature=temperature,
45
- top_p=top_p,
46
- ):
47
- token = message.choices[0].delta.content
48
- response += token
49
- yield response
50
- except Exception as e:
51
- error_message = f"An error occurred: {e}\n"
52
- error_message += ''.join(traceback.format_exception(None, e, e.__traceback__))
53
- yield error_message
54
 
55
- demo = gr.ChatInterface(
56
- respond,
57
- additional_inputs=[
58
- gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
59
- gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
60
- gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
61
- gr.Slider(
62
- minimum=0.1,
63
- maximum=1.0,
64
- value=0.95,
65
- step=0.05,
66
- label="Top-p (nucleus sampling)",
67
- ),
68
- ],
69
- )
 
 
 
 
 
 
 
 
 
 
70
 
71
- if __name__ == "__main__":
72
- demo.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ os.system('pip install dashscope mlx-lm')
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
+ from mlx_lm import load, generate
11
 
12
+ default_system = 'You are a helpful assistant.'
 
 
 
 
 
13
 
14
+ YOUR_API_TOKEN = os.getenv('YOUR_API_TOKEN')
15
+ dashscope.api_key = YOUR_API_TOKEN
 
 
16
 
17
+ History = List[Tuple[str, str]]
18
+ Messages = List[Dict[str, str]]
 
 
 
 
 
 
 
19
 
20
+ def clear_session() -> History:
21
+ return '', []
 
 
 
22
 
23
+ def modify_system_session(system: str) -> str:
24
+ if system is None or len(system) == 0:
25
+ system = default_system
26
+ return system, system, []
27
 
28
+ def history_to_messages(history: History, system: str) -> Messages:
29
+ messages = [{'role': Role.SYSTEM, 'content': system}]
30
+ for h in history:
31
+ messages.append({'role': Role.USER, 'content': h[0]})
32
+ messages.append({'role': Role.ASSISTANT, 'content': h[1]})
33
+ return messages
34
 
35
+ def messages_to_history(messages: Messages) -> Tuple[str, History]:
36
+ assert messages[0]['role'] == Role.SYSTEM
37
+ system = messages[0]['content']
38
+ history = []
39
+ for q, r in zip(messages[1::2], messages[2::2]):
40
+ history.append([q['content'], r['content']])
41
+ return system, history
 
 
 
 
 
 
 
 
42
 
43
+ def model_chat(query: Optional[str], history: Optional[History], system: str
44
+ ) -> Tuple[str, str, History]:
45
+ if query is None:
46
+ query = ''
47
+ if history is None:
48
+ history = []
49
+ messages = history_to_messages(history, system)
50
+ messages.append({'role': Role.USER, 'content': query})
51
+ gen = generate(
52
+ model='cnshdd/Qwen2-7B-Instruct-YM0606',
53
+ tokenizer=None, # Replace with appropriate tokenizer if needed
54
+ prompt=query,
55
+ verbose=True
56
+ )
57
+ for response in gen:
58
+ if response.status_code == HTTPStatus.OK:
59
+ role = response.output.choices[0].message.role
60
+ response = response.output.choices[0].message.content
61
+ system, history = messages_to_history(messages + [{'role': role, 'content': response}])
62
+ yield '', history, system
63
+ else:
64
+ raise ValueError('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
65
+ response.request_id, response.status_code,
66
+ response.code, response.message
67
+ ))
68
 
69
+ with gr.Blocks() as demo:
70
+ gr.Markdown("""<center><font size=8>Qwen2-7B-Instruct-YM0606 Chat Bot Preview👾</center>""")
71
+
72
+ with gr.Row():
73
+ with gr.Column(scale=3):
74
+ system_input = gr.Textbox(value=default_system, lines=1, label='System')
75
+ with gr.Column(scale=1):
76
+ modify_system = gr.Button("🛠️ Set system prompt and clear history", scale=2)
77
+ system_state = gr.Textbox(value=default_system, visible=False)
78
+ chatbot = gr.Chatbot(label='cnshdd/Qwen2-7B-Instruct-YM0606')
79
+ textbox = gr.Textbox(lines=2, label='Input')
80
+
81
+ with gr.Row():
82
+ clear_history = gr.Button("🧹 Clear history")
83
+ submit = gr.Button("🚀 Send")
84
+
85
+ submit.click(model_chat,
86
+ inputs=[textbox, chatbot, system_state],
87
+ outputs=[textbox, chatbot, system_input],
88
+ concurrency_limit=5)
89
+ clear_history.click(fn=clear_session,
90
+ inputs=[],
91
+ outputs=[textbox, chatbot])
92
+ modify_system.click(fn=modify_system_session,
93
+ inputs=[system_input],
94
+ outputs=[system_state, system_input, chatbot])
95
+
96
+ demo.queue(api_open=False)
97
+ demo.launch(max_threads=5)