File size: 4,413 Bytes
c066489 bddc184 13b2053 36c3163 9e98957 5e20594 3b0d04c 9e98957 c066489 afb4c93 fddab77 3b0d04c 633a011 174a913 3b0d04c afb4c93 f2aae0d 451c271 633a011 f2aae0d afb4c93 27916c5 45be55d 27916c5 45be55d c53a1c5 bddc184 c53a1c5 9e98957 c066489 27916c5 36c3163 c066489 9e98957 c066489 87521b4 27916c5 5733138 45be55d c066489 9e98957 c066489 35784f1 36c3163 27916c5 9e98957 c066489 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
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']
defaultMsgEnd = os.environ['defaultMsgEnd']
mod = 3;
def localRace(race):
race = race
return race
def localClass(cls):
cls = cls
return cls
def trimMessages(messages):
# Assuming messages is an array of objects with "role" and "content" properties
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 a") + len("As a")
if start_index >= 0:
end_index = msg.index(",")
str = msg[start_index:] + msg[:end_index]
str = str.strip()
if str.lower() == "dm":
return ""
else:
return str
else:
return ""
def getChooseClass(msg):
full = getChooseRole(msg)
if full != "":
start_index = full.index(" ") + len(" ")
end_index = msg.index(",")
str = full[start_index:] + full[:end_index]
str = str.strip()
return str
else:
return ""
def chatbot(race, cls, input, localvar):
#messages = messages or [{"role": "system", "content": initMsg}]
localvar = localvar or {"messages": [{"role": "system", "content": "I choose as "+ race + " "+ cls +" in D&D world.\n" + initMsg}], "race": race, "class": cls, "status":""}
messages = localvar['messages']
#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:
if len(messages) == 1:
messages.append({"role": "user", "content": input})
else:
messages.append({"role": "user", "content": defaultMsg + "(I am an "+race+" "+cls+")( My Current status is as follows :" + localvar['status'] + ") " + defaultMsgEnd + ". \n" + 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
logging.info("AI Reply:"+reply)
if len(messages) == 1:
localvar['status'] = reply
messages.append({"role": "assistant", "content": reply})
localvar['messages'] = messages
return reply, printMessages(messages), localvar
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.Dropdown(["Orc", "Human", "Elf", "Dwarf", "Halfling", "Goliath", "Dragonborn"], label="Race", info="please choose your race:"),
gr.Dropdown(["Warrior", "Mage", "Priest", "Assassin", "Thief", "Paladin", "Archer", "Guardian"], label="Class", info="please choose the name of the class you wish to play as:"),
gr.Textbox(lines=7, label="You ask and answer questions below", placeholder="Type word 'start game' to play"), "state"],
outputs=[gr.Textbox(label="DND Game Reply", placeholder="Waiting for you start..."), gr.Textbox(label="History"), "state"], title="DND Game",#, gr.Textbox(label="History"),
description="DND Game",theme="compact")
app.launch(share=False) |