|
import openai |
|
import gradio as gr |
|
import os |
|
import logging |
|
import json |
|
|
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') |
|
|
|
openai.api_key = os.environ['key'] |
|
initMsg = os.environ['init'] |
|
roleAns = os.environ['roleAns'] |
|
classAsk = os.environ['classAsk'] |
|
classAns = os.environ['classAns'] |
|
defaultMsg = os.environ['defaultMsg'] |
|
|
|
mod = 3; |
|
|
|
def trimMessages(messages): |
|
|
|
content = {} |
|
for message in messages: |
|
if message["role"] == "assistant": |
|
if "Current Status:" in message["content"]: |
|
content = message["content"] |
|
start_index = message["content"].index("Current Status:") + len("Current Status:") |
|
end_index = message["content"].index("Wielding:") |
|
new_content = message["content"][:start_index] + message["content"][end_index:] |
|
message["content"] = new_content |
|
if content != {}: |
|
messages.append({"role": "assistant", "content": content}) |
|
return messages |
|
|
|
def getChooseRole(msg): |
|
start_index = msg.index("As an ") + len("As an ") |
|
end_index = msg.index(",") |
|
return msg[start_index:] + msg[:start_index] |
|
|
|
def getChooseClass(msg): |
|
full = getChooseRole(msg) |
|
start_index = full.index(" ") + len(" ") |
|
end_index = msg.index(",") |
|
return full[start_index:] + full[:start_index] |
|
|
|
def chatbot(input, messages): |
|
messages = messages or [{"role": "system", "content": initMsg}] |
|
if len(messages) == 1: |
|
|
|
memory = trimMessages(messages) |
|
logging.info("put memory:"+printMessages(memory)) |
|
chat = openai.ChatCompletion.create( |
|
model="gpt-3.5-turbo", messages=memory, |
|
max_tokens=1048,n=1,temperature=0.5, |
|
) |
|
logging.info("put memory return:"+chat.choices[0].message.content) |
|
|
|
if input: |
|
messages.append({"role": "user", "content": input}) |
|
chat = openai.ChatCompletion.create( |
|
model="gpt-3.5-turbo", messages=messages[-2:], |
|
max_tokens=2048,n=1,temperature=0.5, |
|
) |
|
reply = chat.choices[0].message.content |
|
|
|
ans = "" |
|
if len(messages) == 3: |
|
ans = "I choose "+ getChooseRole(reply) +" as my race." + classAsk |
|
logging.info("ChooseRole:"+ans) |
|
if len(messages) == 5: |
|
ans = "My Race is ,I choose "+ getChooseClass(reply) +" as my class." + classAns |
|
logging.info("ChooseClass:"+ans) |
|
messages.append({"role": "assistant", "content": ans}) |
|
return reply, messages |
|
|
|
def printMessages(messages): |
|
delimiter = '\n' |
|
msg_string = delimiter.join([f"{obj['role']}:{obj['content']}" for obj in messages]) |
|
logging.info("messages:"+msg_string) |
|
return msg_string |
|
|
|
app = gr.Interface(fn=chatbot, inputs=[gr.Textbox(lines=7, label="You ask and answer questions below"), "state"], |
|
outputs=[gr.Textbox(label="DND Game Reply", placeholder=roleAns), "state"], title="DND Game", |
|
description="DND Game",theme="compact") |
|
app.launch(share=False) |