File size: 6,429 Bytes
89a31dd 63b2df0 89a31dd 63b2df0 66877e4 89a31dd 66877e4 89a31dd 66877e4 |
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 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
import gradio as gr
#from huggingface_hub import InferenceClient
"""
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
"""
#from new_chat import Conversation, ChatgptAPI
from pathlib import Path
from openai import OpenAI
class ChatgptAPI:
def __init__(self, ):
self.client = OpenAI(
api_key = "sk-u8YI0ArRHFRRdMEdboouRAXVc3PpR6EhZOfxO4tST5Ua9147",
base_url = "https://api.moonshot.cn/v1",
)
def get_single_round_completion(self, file_path, prompt, conversation):
file_object = client.files.create(file=Path(file_path), purpose="file-extract")
file_content = client.files.content(file_id=file_object.id).text
messages = [
{
"role": "system",
"content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。",
},
{
"role": "system",
"content": file_content,
},
{"role": "user", "content": prompt},
]
completion = self.client.chat.completions.create(
model="moonshot-v1-32k",
messages=messages,
temperature=0.3,
)
return completion.choices[0].message
def get_multi_round_completion(self, prompt, conversation, model='gpt-3.5-turbo'):
conversation.append_question(prompt)
prompts = conversation.get_prompts()
response = openai.ChatCompletion.create(
model=model,
messages=prompts,
temperature=0,
max_tokens=2048,
top_p=1,
)
message = response.choices[0].message['content']
conversation.append_answer(message)
return message, conversation
class Conversation:
def __init__(self, system_prompt='', num_of_round = 5):
self.num_of_round = num_of_round
self.history = []
self.initialized = False
self.history.append({"role": "system", "content": system_prompt})
if len(system_prompt) > 0:
logger.info(f'Conversation initialized with system prompt: {system_prompt}')
self.initialized = True
def is_initialized(self):
return self.initialized
def append_question(self, question):
self.history.append({"role": "user", "content": question})
def append_answer(self, answer):
self.history.append({"role": "assistant", "content": answer})
if len(self.history) > self.num_of_round * 2:
del self.history[1:3]
def clear(self):
self.history.clear()
self.initialized = False
def get_prompts(self):
return self.history
def round_size(self):
return 0 if len(self.history) < 2 else len(self.hitory) - 1
def get_history_messages(self):
return [(u['content'], b['content']) for u,b in zip(self.history[1::2], self.history[2::2])]
chat_api = ChatgptAPI()
def predict(system_input, password_input, user_in_file, user_input, conversation):
if password_input != '112233':
return [(None, "Wrong password!")], conversation, user_input
if conversation.is_initialized() == False:
conversation = Conversation(system_input, 5)
conversation = chat_api.get_single_round_completion(user_in_file, user_input, conversation)
return conversation, conversation, None
#_, conversation = chat_api.get_multi_round_completion(user_input, conversation)
#return conversation.get_history_messages(), conversation, None
def clear_history(conversation):
conversation.clear()
return None, conversation
with gr.Blocks(css="#chatbot{height:350px} .overflow-y-auto{height:600px}") as demo:
chatbot = gr.Chatbot(elem_id="chatbot")
conversation = gr.State(value=Conversation())
with gr.Row():
system_in_txt = gr.Textbox(lines=1, label="System role content:", placeholder="Enter system role content")
password_in_txt = gr.Textbox(lines=1, label="Password:", placeholder="Enter password")
with gr.Row():
user_in_file = gr.File(label="Upload File")
user_in_txt = gr.Textbox(lines=3, label="User role content:", placeholder="Enter text...").style(container=False)
with gr.Row():
submit_button = gr.Button("Submit")
reset_button = gr.Button("Reset")
submit_button.click(predict, [system_in_txt, password_in_txt, user_in_file, user_in_txt, conversation], [chatbot, conversation, user_in_txt])
reset_button.click(clear_history, [conversation], [chatbot, conversation], queue=False)
'''
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
def respond(
message,
history: list[tuple[str, str]],
system_message,
max_tokens,
temperature,
top_p,
):
messages = [{"role": "system", "content": system_message}]
for val in history:
if val[0]:
messages.append({"role": "user", "content": val[0]})
if val[1]:
messages.append({"role": "assistant", "content": val[1]})
messages.append({"role": "user", "content": message})
response = ""
for message in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
token = message.choices[0].delta.content
response += token
yield response
"""
For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
"""
demo = gr.ChatInterface(
respond,
additional_inputs=[
gr.Textbox(value="You are a friendly Chatbot.", 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()
|