import os import time import openai import gradio as gr alice_prefix = 'Alice: ' bob_prefix = 'Bob: ' def seed_submit(seed, history): if seed == '': seed = 'Hi Bob!' return "", history + [[f'{alice_prefix}{seed}', None]] def bot_update(history, key, alice_system, alice_temp, alice_model, bob_system, bob_temp, bob_model): while True: if history[-1][1] is None: # Bob's turn messages = [ {"role": "system", "content": bob_system}, ] for [msg, resp] in history: messages.append({"role": "user", "content": msg.replace(alice_prefix, '', 1)}) if resp: messages.append({"role": "assistant", "content": resp.replace(bob_prefix, '', 1)}) resp = openai.ChatCompletion.create( api_key=key, model=bob_model, messages=messages, temperature=bob_temp ) bob_response = resp['choices'][0]['message']['content'] history[-1][1] = f'{bob_prefix}{bob_response}' else: # Alice's turn messages = [ {"role": "system", "content": alice_system}, ] for n, [msg, resp] in enumerate(history): if n > 0: # skip the conversation opener messages.append({"role": "assistant", "content": msg.replace(alice_prefix, '', 1)}) if resp: messages.append({"role": "user", "content": resp.replace(bob_prefix, '', 1)}) resp = openai.ChatCompletion.create( api_key=key, model=alice_model, messages=messages, temperature=alice_temp ) alice_response = resp['choices'][0]['message']['content'] history.append([f'{alice_prefix}{alice_response}', None]) if len(messages) >= 10: return history else: yield history with gr.Blocks() as demo: key = gr.Textbox(placeholder='Enter your OpenAI API Key') with gr.Row(): with gr.Column(): with gr.Row(): with gr.Column(): alice_system = gr.Textbox(label='Alice\'s Prompt', value='Your name is Alice, you love to talk, and give your opinion', lines=5, interactive=True) alice_temp = gr.Slider(value=1, minimum=0, maximum=1, step=0.1, label='Temperature') alice_model = gr.Radio(choices=['gpt-4', 'gpt-3.5-turbo'], value='gpt-4') with gr.Row(): with gr.Column(): bob_system = gr.Textbox(label='Bob\'s Prompt', value='Your name is Bob, you love to listen, and ask for opinions', lines=5, interactive=True) bob_temp = gr.Slider(value=1, minimum=0, maximum=1, step=0.1, label='Temperature') bob_model = gr.Radio(choices=['gpt-4', 'gpt-3.5-turbo'], value='gpt-4') with gr.Column(): chatbot = gr.Chatbot() seed = gr.Textbox(placeholder="How does Alice open the conversation?") start = gr.Button('Start conversation') start.click(seed_submit, [seed, chatbot], [seed, chatbot], queue=False).then( bot_update, [chatbot, key, alice_system, alice_temp, alice_model, bob_system, bob_temp, bob_model], [chatbot] ) demo.queue(concurrency_count=1) demo.launch(show_error=True)