|
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'] |
|
role = os.environ['role'] |
|
aclass = os.environ['class'] |
|
|
|
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 chatbot(input, messages): |
|
messages = messages or [{"role": "system", "content": initMsg}] |
|
if len(messages) % mod == 0 or 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 |
|
messages.append({"role": "assistant", "content": reply}) |
|
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=role), "state"], title="DND Game", |
|
description="DND Game",theme="compact") |
|
app.launch(share=False) |