| |
|
| | import openai |
| | import os |
| | import gradio as gr |
| | openai.api_key = os.environ.get("OPENAI_API_KEY") |
| |
|
| |
|
| | class Conversation: |
| | def __init__(self, prompt, num_of_round): |
| | self.prompt = prompt |
| | self.num_of_round = num_of_round |
| | self.messages = [] |
| | self.messages.append({"role": "system", "content": self.prompt}) |
| | |
| | def ask(self, question): |
| | try: |
| | self.messages.append({"role": "user", "content": question}) |
| | response = openai.ChatCompletion.create( |
| | model="gpt-3.5-turbo", |
| | messages=self.messages, |
| | temperature=0.5, |
| | max_tokens=256, |
| | top_p=1, |
| | ) |
| | except Exception as e: |
| | print(e) |
| | return e |
| | message = response["choices"][0]["message"]["content"] |
| | self.messages.append({"role": "assistant", "content": message}) |
| | if len(self.messages) > 3: |
| | del self.messages[1:3] |
| | return message |
| |
|
| | def add_text(history, text): |
| | history = history + [(text, None)] |
| | return history, gr.update(value="", interactive=False) |
| |
|
| | def add_file(history, file): |
| | history = history + [((file.name,), None)] |
| | return history |
| | |
| | def bot(history, chatbot): |
| | prompt = ". ".join([m["content"] for m in history if m["role"] == "user"]) |
| | response = openai.Completion.create( |
| | engine="davinci", |
| | prompt=prompt, |
| | temperature=0.5, |
| | max_tokens=100, |
| | top_p=1.0 |
| | ) |
| | message = response["choices"][0]["text"] |
| | chatbot.add_message(content=message, role="assistant") |
| |
|
| | def answer(question, history=None): |
| | if history is None: |
| | history = [] |
| | history.append(question) |
| | response = conv.ask(question) |
| | history.append(response) |
| | responses = [(u,b) for u,b in zip(history[::2], history[1::2])] |
| | return responses, history |
| |
|
| | def on_text_submit(chatbot, txt): |
| | prompt = ". ".join([m[0] for m in history if m[1] == "user"]) |
| | response = openai.Completion.create( |
| | engine="davinci", |
| | prompt=prompt, |
| | temperature=0.5, |
| | max_tokens=100, |
| | top_p=1.0 |
| | ) |
| | message = response["choices"][0]["text"] |
| | chatbot.add(message, "assistant") |
| |
|
| | def on_file_upload(chatbot, btn): |
| | chatbot.add((btn.uploaded_file.name,), "user") |
| |
|
| | with gr.Blocks(css="#chatbot{height:300px} .overflow-y-auto{height:500px}") as demo: |
| | chatbot = gr.Chatbot([], elem_id="chatbot").style(height=750) |
| |
|
| |
|
| | prompt = """假如你是GPT-4,你可以回答用户提问的任何问题""" |
| | conv = Conversation(prompt, 10) |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| | with gr.Blocks(css="#chatty{height:800px} .overflow-y-auto{height:500px}") as demo: |
| | chatty = gr.Chatbot([], name="Chatty", elem_id="chatbot").style(height=800, width=800) |
| |
|
| | with gr.Row(): |
| | with gr.Column(scale=0.85): |
| | txt = gr.Textbox( |
| | show_label=False, |
| | placeholder="Enter text and press enter, or upload an image", |
| | ).style(container=False) |
| | with gr.Column(scale=0.15, min_width=0): |
| | btn = gr.UploadButton("📁", file_types=["image", "video", "audio"]) |
| |
|
| | txt_msg = txt.submit(add_text, [chatty, txt], [chatty, txt], queue=False).then( |
| | bot, chatty, chatty |
| | ) |
| | txt_msg.then(lambda: gr.update(interactive=True), None, [txt], queue=False) |
| | file_msg = btn.upload(add_file, [chatty, btn], [chatty], queue=False).then( |
| | bot, chatty, chatty |
| | ) |
| | demo.launch() |
| |
|