Spaces:
Sleeping
Sleeping
import gradio as gr | |
import os | |
from openai import OpenAI | |
from utils import get_secret | |
from database import create_chatbot, get_chatbot, update_chatbot, delete_chatbot, get_all_chatbots, filter_profanity | |
CREATE_APP_PW = get_secret("CREATE_APP_PW") | |
ADMIN_PW = get_secret("ADMIN_PW") | |
OPENAI_API_KEY = get_secret("OPENAI_API_KEY") | |
client = OpenAI(api_key=OPENAI_API_KEY) | |
def create_chatbot_interface(name, custom_instruction, password): | |
if password != CREATE_APP_PW: | |
return "Invalid password. Chatbot creation failed." | |
filtered_name = filter_profanity(name) | |
filtered_instruction = filter_profanity(custom_instruction) | |
chatbot = create_chatbot(filtered_name, filtered_instruction) | |
return f"Chatbot created with ID: {chatbot.chatbot_id}" | |
def chat_with_bot(message, history, chatbot_id): | |
chatbot = get_chatbot(chatbot_id) | |
if not chatbot: | |
return "Invalid chatbot ID or chatbot not active" | |
# Prepare the conversation history for OpenAI | |
conversation = [ | |
{"role": "system", "content": chatbot.custom_instruction}, | |
] | |
for human, assistant in history: | |
conversation.append({"role": "user", "content": human}) | |
conversation.append({"role": "assistant", "content": assistant}) | |
conversation.append({"role": "user", "content": message}) | |
try: | |
response = client.chat.completions.create(model="gpt-3.5-turbo", | |
messages=conversation) | |
return response.choices[0].message.content | |
except Exception as e: | |
return f"An error occurred: {str(e)}" | |
def admin_view(password): | |
if password != ADMIN_PW: | |
return "Invalid admin password." | |
chatbots = get_all_chatbots() | |
return gr.Dataframe( | |
headers=["ID", "Name", "Custom Instruction", "Is Active"], | |
data=[[c.chatbot_id, c.name, c.custom_instruction, c.is_active] for c in chatbots] | |
) | |
def admin_action(action, chatbot_id, name, custom_instruction, is_active, password): | |
if password != ADMIN_PW: | |
return "Invalid admin password." | |
if action == "Edit": | |
update_chatbot(chatbot_id, name, custom_instruction, is_active) | |
return "Chatbot updated successfully." | |
elif action == "Delete": | |
delete_chatbot(chatbot_id) | |
return "Chatbot deleted successfully." | |
else: | |
return "Invalid action." | |
with gr.Blocks() as demo: | |
chatbot_id_input = gr.Textbox(label="Enter Chatbot ID", visible=False) | |
with gr.Tab("Chat"): | |
chatbot_title = gr.Markdown("Welcome to the Chatbot") | |
chat_interface = gr.ChatInterface( | |
chat_with_bot, | |
additional_inputs=[chatbot_id_input], | |
) | |
share_link = gr.Textbox(label="Share Link", interactive=False) | |
with gr.Tab("Create Chatbot"): | |
name = gr.Textbox(label="Chatbot Name") | |
instructions = gr.Textbox(label="Enter custom instructions for your chatbot") | |
create_password = gr.Textbox(label="Creation Password", type="password") | |
create_button = gr.Button("Create Chatbot") | |
create_output = gr.Textbox(label="Creation Result") | |
create_button.click(create_chatbot_interface, inputs=[name, instructions, create_password], outputs=create_output) | |
with gr.Tab("Admin"): | |
admin_password = gr.Textbox(label="Admin Password", type="password") | |
admin_button = gr.Button("View Chatbots") | |
admin_output = gr.Dataframe(headers=["ID", "Name", "Custom Instruction", "Is Active"]) | |
admin_button.click(admin_view, inputs=[admin_password], outputs=admin_output) | |
with gr.Row(): | |
admin_action_dropdown = gr.Dropdown(["Edit", "Delete"], label="Action") | |
admin_chatbot_id = gr.Textbox(label="Chatbot ID") | |
admin_name = gr.Textbox(label="Name") | |
admin_instruction = gr.Textbox(label="Custom Instruction") | |
admin_is_active = gr.Checkbox(label="Is Active") | |
admin_action_button = gr.Button("Perform Action") | |
admin_action_output = gr.Textbox(label="Action Result") | |
admin_action_button.click( | |
admin_action, | |
inputs=[admin_action_dropdown, admin_chatbot_id, admin_name, admin_instruction, admin_is_active, admin_password], | |
outputs=admin_action_output | |
) | |
def load_chatbot(chatbot_id, request: gr.Request): | |
# Check if there's a chatbot_id in the URL parameters | |
params = request.query_params | |
if "chatbot_id" in params: | |
chatbot_id = params["chatbot_id"] | |
chatbot = get_chatbot(chatbot_id) | |
if chatbot: | |
return ( | |
gr.update(value=f"Welcome to {chatbot.name}"), | |
gr.update(value=chatbot_id, visible=True), | |
gr.update(value=f"https://huggingface.co/spaces/codora/ai-app-creator?chatbot_id={chatbot_id}") | |
) | |
return ( | |
gr.update(value="Welcome to the Chatbot"), | |
gr.update(value="", visible=True), | |
gr.update(value="") | |
) | |
if __name__ == "__main__": | |
demo.launch() |