dy2dx2's picture
Update app.py
f938d75
raw
history blame contribute delete
No virus
2.61 kB
import os
from dotenv import load_dotenv
import openai
import gradio as gr
# Load environment variables from the .env file
load_dotenv()
openai.api_key = os.getenv("openai_api_key")
openai.organization = os.getenv("openai_organization_id")
message_history = [{"role": "system", "content":"You are a physics assistant chatbot and reject to answer anything unrealted to the physics."},
{"role": "assistant", "content":"Hi, I am a physics assistant. I can help you with your physics questions."}]
def predict(input):
global message_history
message_history.append({"role": "user", "content": f"{input}"})
completion = openai.ChatCompletion.create(
model="gpt-4",
messages=message_history
)
reply_content = completion.choices[0].message.content
if check_in_role(reply_content):
message_history.append({"role": "assistant", "content": f"{reply_content}"})
else:
message_history.append({"role": "assistant", "content": "I'm sorry, but the question you have asked seems to be unrelated to the context of this conversation, and unfortunately, I'm not able to provide an answer. If you have any questions related to physics, I would be happy to try and assist you."})
response = [(message_history[i]["content"], message_history[i+1]["content"]) for i in range(2, len(message_history)-1, 2)] # convert to tuples of list
return response
def check_in_role(reply_content):
p = "Is the following question related to physics? Answer it using only 'yes' or 'no'.\n\n" + reply_content + "\n\n---\nLabel:"
q = [{"role": "user", "content":f"{p}"}]
res = openai.ChatCompletion.create(
model="gpt-4",
messages=q
)
label = res.choices[0].message.content.lower()
print(label)
if "yes" in label:
return True
return False
with gr.Blocks(theme=gr.themes.Soft(), title="Physics Assistant") as demo:
with gr.Row():
gr.Markdown("Get instant physics help with our chatbot! Ask any physics-related questions and receive accurate and reliable answers in seconds. Perfect for students, researchers, and anyone interested in the laws of the universe.")
bot = gr.Chatbot().style(height=500)
with gr.Row():
with gr.Column(scale=0.85):
txt = gr.Textbox(
show_label=False,
placeholder="Enter a physics related text",
).style(container=False)
with gr.Column(scale=0.15, min_width=0):
send = gr.Button("Send")
send.click(predict, inputs=[txt], outputs=bot)
demo.launch()