Spaces:
Sleeping
Sleeping
import gradio as gr | |
import openai | |
my_api_key = "" | |
initial_prompt = "You are a helpful assistant." | |
class ChatGPT: | |
def __init__(self, apikey) -> None: | |
openai.api_key = apikey | |
self.system = {"role": "system", "content": initial_prompt} | |
def get_response(self, messages): | |
response = openai.ChatCompletion.create( | |
model="gpt-3.5-turbo", | |
messages=[self.system, *messages], | |
) | |
response = response["choices"][0]["message"]["content"] | |
return response | |
def predict(self, input_sentence, context): | |
context.append({"role": "user", "content": f"{input_sentence}"}) | |
response = self.get_response(context) | |
context.append({"role": "assistant", "content": response}) | |
response = [] | |
for i in range(0, len(context), 2): | |
response.append((context[i]["content"], context[i+1]["content"])) | |
return response, context | |
def retry(self, context): | |
response = self.get_response(context[:-1]) | |
context.append({"role": "assistant", "content": response}) | |
response = [] | |
for i in range(0, len(context), 2): | |
response.append((context[i]["content"], context[i+1]["content"])) | |
return response, context | |
def update_system(self, new_system_prompt): | |
self.system = {"role": "system", "content": new_system_prompt} | |
return new_system_prompt | |
def reset_state(): | |
return [], [] | |
mychatGPT = ChatGPT(my_api_key) | |
with gr.Blocks() as demo: | |
chatbot = gr.Chatbot() | |
state = gr.State([]) | |
with gr.Column(): | |
txt = gr.Textbox(show_label=False, placeholder="💬 在这里输入").style(container=False) | |
with gr.Row(): | |
emptyBth = gr.Button("重置") | |
retryBth = gr.Button("再试一次") | |
system = gr.Textbox(show_label=True, placeholder="New system prompts here...", label="System Prompt").style(container=False) | |
syspromptTxt = gr.Textbox(show_label=False, placeholder=initial_prompt, interactive=False).style(container=False) | |
txt.submit(mychatGPT.predict, [txt, state], [chatbot, state], show_progress=True) | |
txt.submit(lambda :"", None, txt) | |
emptyBth.click(reset_state, outputs=[chatbot, state]) | |
system.submit(mychatGPT.update_system, system, syspromptTxt) | |
system.submit(lambda :"", None, system) | |
retryBth.click(mychatGPT.retry, [state], [chatbot, state], show_progress=True) | |
demo.launch() | |