File size: 3,792 Bytes
c066489 bddc184 13b2053 36c3163 9e98957 5e20594 3b0d04c c054bb7 c066489 afb4c93 fddab77 3b0d04c 633a011 174a913 3b0d04c afb4c93 f2aae0d 451c271 633a011 f2aae0d afb4c93 b5330a0 45be55d c054bb7 45be55d c054bb7 40d7c11 c054bb7 c066489 c054bb7 c066489 87521b4 5b79bde 27916c5 c054bb7 5733138 45be55d c054bb7 c066489 9e98957 c066489 b5330a0 c054bb7 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 |
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']
def localRace(race):
race = race
return race
def localClass(cls):
cls = cls
return cls
def getStatus(msg):
if "Current Status:" in msg:
start_index = msg.index("Current Status:") + len("Current Status:")
end_index = msg.index("Description:")
new_content = msg[start_index:] + msg[:end_index]
return new_content
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}]
init = {"role": "system", "content": "I choose as "+ race + " "+ cls +" in D&D world.\n" + initMsg}
localvar = localvar or {"messages": [init], "race": race, "class": cls, "status":""}
messages = localvar['messages']
if len(messages) == 1:
input = "start"
if input:
message = [init, {"role": "user", "content": defaultMsg + "(I am an "+race+" "+cls+")( My Current status is as follows :" + localvar['status'] + ") " + defaultMsgEnd + ". \n" + input}]
messages.append(message)
chat = openai.ChatCompletion.create(
model="gpt-3.5-turbo", messages=message,#messages[-2:]
max_tokens=2048,n=1,temperature=0.5,
)
reply = chat.choices[0].message.content
logging.info("AI Reply:"+reply)
if len(messages) == 2:
localvar['status'] = reply
else:
localvar['status'] = getStatus(reply)
messages.append({"role": "assistant", "content": reply})
localvar['messages'] = messages
return reply, printMessages(messages), localvar
else:
return "please input words!", 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"], value="Orc", label="Race", info="please choose your race:"),
gr.Dropdown(["Warrior", "Mage", "Priest", "Assassin", "Thief", "Paladin", "Archer", "Guardian"], value="Warrior", 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="Press submit button to start game"), "state"], #Type word 'start game'
outputs=[gr.Textbox(label="DND Game Reply", placeholder="Waiting for you press submit button to start play..."), gr.Textbox(label="History"), "state"], title="DND Game",#, gr.Textbox(label="History"),
description="DND Game",theme="compact")
app.launch(share=False) |