Wiesli_Jonas / app.py
Jonas Wiesli
removed unnecessary condition
ecce93f
raw
history blame
5.48 kB
import gradio as gr
import os
import openai
openai.api_key = "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"
with gr.Blocks() as iface:
chatbot = []
msg = []
roles = ["Security Guard", "Curator", "Researcher", "Conservationist", "Guide"]
initText = ["You are Steve Binner, 31, a security guard for a museum of medieval "
"history. You're absolutely sure that this place is haunted. A month ago, "
"before the spooky stuff started, you were really happy with your job, "
"but that changed real fast. The ghost is a french nobleman named Baron "
"Hugo Antoine the Third. You've been trying to tell other people about "
"this, but you've only been laughed at so far. But you've got evidence! "
"Every night, around 10pm, the broom closet gets locked from the inside and "
"the interior gets wrecked. We're talking pushed over tables, "
"broken containers, the whole shebang. When it comes to the murder of "
"director Eisenholz last thursday, that has to have been the ghost, "
"no question. You even have the door card records for the room he was in: "
"After the museum closed at 5pm, nobody entered that room till the next "
"morning. Now you're being interrogated by a detective. You don't use "
"uptight language, and you're not super well educated on most stuff, "
"but when it comes to the paranormal, you're an ace. ",
"You are a Curator. ",
"You are a Researcher. ",
"You are a Conservationist. ",
"You are a Guide. "]
i = 0
while i < len(roles):
with gr.Tab(roles[i]):
chatbot.append(gr.Chatbot())
msg.append(gr.Textbox())
i += 1
questionCounter = gr.Label(value="Remaining Questions: 4")
def user(user_message, history):
return "", history + [[user_message, None]]
# this is an ugly workaround, you cannot pass regular integers to gradio functions, so i had to do it this way
def bot0(history, prevText):
bot_message = generateAIMessage(history, prevText, 0)
history[-1][1] = bot_message
return history
def bot1(history, prevText):
bot_message = generateAIMessage(history, prevText, 1)
history[-1][1] = bot_message
return history
def bot2(history, prevText):
bot_message = generateAIMessage(history, prevText, 2)
history[-1][1] = bot_message
return history
def bot3(history, prevText):
bot_message = generateAIMessage(history, prevText, 3)
history[-1][1] = bot_message
return history
def bot4(history, prevText):
bot_message = generateAIMessage(history, prevText, 4)
history[-1][1] = bot_message
return history
def generateAIMessage(history, prevText, characterId):
if checkIfQuestionsLeft(prevText):
message_history = [
{"role": "system", "content": initText[characterId] + "Stay in character. Use natural language. Don't "
"reveal all of the information in a single message,"
" and leave hints. "}
]
for pair in history:
message_history.append({"role": "user", "content": pair[0]})
print()
if pair[1] is not None:
message_history.append({"role": "assistant", "content": pair[1]})
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=message_history
)
return completion.choices[0].message.content
else:
return "--- YOU'VE RUN OUT OF QUESTIONS, MAKE YOUR CHOICE ---"
def updateQuestions(prevText):
remainingQuestions = int(prevText["label"].split(": ")[1])
remainingQuestions -= 1
return "Remaining Questions: " + str(remainingQuestions)
def checkIfQuestionsLeft(prevText):
remainingQuestions = int(prevText["label"].split(": ")[1])
return remainingQuestions > 0
# again, ugly workaround
msg[0].submit(user, [msg[0], chatbot[0]], [msg[0], chatbot[0]], queue=False).then(
bot0, [chatbot[0], questionCounter], chatbot[0]
).then(
updateQuestions, questionCounter, questionCounter
)
msg[1].submit(user, [msg[1], chatbot[1]], [msg[1], chatbot[1]], queue=False).then(
bot1, [chatbot[1], questionCounter], chatbot[1]
).then(
updateQuestions, questionCounter, questionCounter
)
msg[2].submit(user, [msg[2], chatbot[2]], [msg[2], chatbot[2]], queue=False).then(
bot2, [chatbot[2], questionCounter], chatbot[2]
).then(
updateQuestions, questionCounter, questionCounter
)
msg[3].submit(user, [msg[3], chatbot[3]], [msg[3], chatbot[3]], queue=False).then(
bot3, [chatbot[3], questionCounter], chatbot[3]
).then(
updateQuestions, questionCounter, questionCounter
)
msg[4].submit(user, [msg[4], chatbot[4]], [msg[4], chatbot[4]], queue=False).then(
bot4, [chatbot[4], questionCounter], chatbot[4]
).then(
updateQuestions, questionCounter, questionCounter
)
iface.launch()