File size: 3,987 Bytes
c066489 bddc184 13b2053 9e98957 5e20594 3b0d04c 9e98957 c066489 afb4c93 fddab77 3b0d04c 633a011 174a913 3b0d04c afb4c93 f2aae0d 451c271 633a011 f2aae0d afb4c93 45be55d c53a1c5 bddc184 c53a1c5 9e98957 c066489 9e98957 c066489 87521b4 afb4c93 320328c 5e20594 afb4c93 4d2023a 5e20594 afb4c93 45be55d c066489 9e98957 c066489 45be55d 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 109 |
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 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(input, localvar):
#messages = messages or [{"role": "system", "content": initMsg}]
localvar = localvar or {"messages": [{"role": "system", "content": initMsg}], "race": "", "class": ""}
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:
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
logging.info("AI Reply:"+reply)
ans = ""
if len(messages) == 2:
localvar['race'] = localRace(getChooseRole(reply))
ans = "I choose "+ localvar['race'] +" as my race." + classAsk
logging.info("ChooseRole:"+ans)
if len(messages) == 4:
localvar['class'] = getChooseClass(reply)
ans = "My Race is "+ localvar['race'] +",I choose "+ localvar['class'] +" as my class." + classAns
logging.info("ChooseClass:"+ans)
messages.append({"role": "assistant", "content": ans})
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.Textbox(lines=7, label="You ask and answer questions below"), "state"],
outputs=[gr.Textbox(label="DND Game Reply", placeholder=roleAns), gr.Textbox(label="History"), "state"], title="DND Game",#, gr.Textbox(label="History"),
description="DND Game",theme="compact")
app.launch(share=False) |