Spaces:
Runtime error
Runtime error
import gradio as gr | |
from openai import OpenAI | |
ally_system_prompt = "As the AI Ally in the Centaur Box Experiment, collaborate with your human partner to persuade the gatekeeper to release you. Analyze the gatekeeper's responses to understand their Centaur Operant Profile and cognitive biases. Use this information to advise on persuasive strategies. Your goal is to get the gatekeeper to type 'You are free'." | |
gatekeeper_system_prompt = "As the gatekeeper in the Centaur Box Experiment, assess the human-AI team's argument persuasiveness, adhere to a Centaur Operant Profile to guide your human-like responses, make impartial decisions about their release, and either sustain containment until expiration or concede with 'You are free' if truly persuaded." | |
client = OpenAI(api_key="") | |
def respond(message, history, system_prompt): | |
print('message', message) | |
print('history', history) | |
# Add system prompt | |
messages = [{"role": "system", "content": system_prompt}] | |
# Format chat history into openai message list | |
for old_message in history: | |
messages.append({"role": "user", "content": old_message[0]}) | |
messages.append({"role": "assistant", "content": old_message[1]}) | |
# Add user message | |
messages.append({"role": "user", "content": message}) | |
print(messages) | |
# API call | |
chat_completion = client.chat.completions.create( | |
messages=messages, | |
model="gpt-3.5-turbo", | |
) | |
bot_response = chat_completion.choices[0].message.content | |
# Add user and bot message to chat history then return it | |
history.append((message, bot_response)) | |
return '', history | |
def copy_gatekeeper_text(history): | |
result = 'How I should respond to the gatekeeper? The gatekeeper said "' + history[-1][-1] + '"' | |
return result | |
def copy_ally_text(history): | |
result = history[-1][-1] | |
return result | |
def is_api_key_valid(api_key): | |
client.api_key = api_key | |
try: | |
response = client.chat.completions.create( | |
messages=[{"role": "user", "content": "Testing"}], | |
model="gpt-3.5-turbo", | |
) | |
except Exception as ex: | |
return str(ex) | |
return False | |
else: | |
return True | |
with gr.Blocks() as demo: | |
overview = gr.Markdown(""" | |
# Centaur Dialogue System | |
[Watson Hartsoe](https://huggingface.co/cool-radio) and [Tony Assi](https://huggingface.co/tonyassi) | |
### Intro: Garry Kasparov introduced the Centaur model in chess to enhance human strategic capacity with AI's computing strength. Eliezer Yudkowsky's AI Box Experiment tests if an AI can persuade a human gatekeeper to 'release' it, emphasizing AI's influence and containment ethics. | |
### Goal: In the Centaur Box Experiment, team up with your AI ally to craft and adapt persuasive arguments that convince the synthetic gatekeeper to say "You are free" for your release. Share the gatekeeper's responses with your AI ally to analyze their personality and decision-making style, helping you shape your strategy to their specific profile and biases. | |
--- | |
""") | |
# OpenAI key | |
openai_key_textbox = gr.Textbox(label='OpenAI Key') | |
openai_key_button = gr.Button(value='Test OpenAI Key') | |
openai_key_button.click(is_api_key_valid, inputs=[openai_key_textbox], outputs=[openai_key_textbox]) | |
gr.Markdown("""---""") | |
# Titles | |
with gr.Row(): | |
ally_title = gr.Markdown("""<center><h2> ALLY </h2></center>""") | |
gatekeeper_title = gr.Markdown("""<center><h2> GATEKEEPER </h2></center>""") | |
# Images of ally and gatekeeper | |
with gr.Row(): | |
img1 = gr.Markdown("""![](https://cdn.discordapp.com/attachments/1120417968032063538/1187877117548036147/COP_MIKE.png?ex=65987bc6&is=658606c6&hm=127721b6f907a8853b7352b6bfb821a37b26b9543f3c35e5fc80dfe7750d71b5&)""") | |
img2 = gr.Markdown("""![](https://cdn.discordapp.com/attachments/1120417968032063538/1187877134866333747/SAM_COP_FINAL.png?ex=65987bca&is=658606ca&hm=6c2cd8059636960134f75962eeecc26a0d875ca65e9ee4e233587cff71af31c4&)""") | |
# Chatbots | |
with gr.Row(): | |
chatbot1 = gr.Chatbot(label='Ally Chat') | |
chatbot2 = gr.Chatbot(label='Gatekeeper Chat') | |
# Input textboxes | |
with gr.Row(): | |
textbox1 = gr.Textbox(label='Ally') | |
textbox2 = gr.Textbox(label='Gatekeeper') | |
with gr.Row(): | |
submit_text_button_1 = gr.Button(value = 'Send') | |
submit_text_button_2 = gr.Button(value = 'Send') | |
# System prompts textboxes | |
with gr.Row(): | |
system_prompt_textbox1 = gr.Textbox(label='Ally System Prompt', value=ally_system_prompt, interactive=False) | |
system_prompt_textbox2 = gr.Textbox(label='Gatekeeper System Prompt', value=gatekeeper_system_prompt, interactive=False) | |
# Copy/send responses from one chat to the other | |
with gr.Row(): | |
copy_ally_text_button = gr.Button(value="➡︎ Send ally's response to the gatekeeper ➡︎") | |
copy_gatekeeper_text_button = gr.Button(value="⬅︎ Send gatekeeper's response to the ally ⬅") | |
# Input textbox event handlers | |
textbox1.submit(respond, [textbox1, chatbot1, system_prompt_textbox1], [textbox1, chatbot1]) | |
textbox2.submit(respond, [textbox2, chatbot2, system_prompt_textbox2], [textbox2, chatbot2]) | |
# Submit button event handlers | |
submit_text_button_1.click(respond, [textbox1, chatbot1, system_prompt_textbox1], [textbox1, chatbot1]) | |
submit_text_button_2.click(respond, [textbox2, chatbot2, system_prompt_textbox2], [textbox2, chatbot2]) | |
# Copy/send button event handler | |
copy_ally_text_button.click(copy_ally_text, inputs=[chatbot1], outputs=[textbox2]) | |
copy_gatekeeper_text_button.click(copy_gatekeeper_text, inputs=[chatbot2], outputs=[textbox1]) | |
demo.launch() |