Spaces:
Build error
Build error
File size: 3,716 Bytes
535dab8 c3eb67f 535dab8 016111a 535dab8 016111a 535dab8 |
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 |
import os
import json
import logging
import gradio as gr
from utils.response_manager import ResponseManager
class ChatbotInterface:
def __init__(self, config_path: str = 'config/gradio_config.json'):
"""
Initialize the ChatbotInterface with configuration.
:param config_path: Path to the configuration JSON file.
"""
self.config = self.load_config(config_path)
self.title = self.config["chatbot_title"]
self.description = self.config["chatbot_description"]
self.input_label = self.config["chatbot_input_label"]
self.input_placeholder = self.config["chatbot_input_placeholder"]
self.output_label = self.config["chatbot_output_label"]
self.reset_button = self.config["chatbot_reset_button"]
self.submit_button = self.config["chatbot_submit_button"]
self.response_manager = ResponseManager()
self.conversation = self.response_manager.conversation # Shortcut to the conversation method
logging.info("ChatbotInterface initialized with configuration.")
@staticmethod
def load_config(config_path: str) -> dict:
"""
Load the configuration for Gradio GUI interface from the JSON file.
:param config_path: Path to the configuration JSON file.
:return: Configuration dictionary.
"""
logging.info(f"Loading configuration from {config_path}...")
if not os.path.exists(config_path):
logging.error(f"Configuration file not found: {config_path}")
raise FileNotFoundError(f"Configuration file not found: {config_path}")
with open(config_path, 'r') as config_file:
config = json.load(config_file)
required_keys = [
"chatbot_title", "chatbot_description", "chatbot_input_label",
"chatbot_input_placeholder", "chatbot_output_label",
"chatbot_reset_button", "chatbot_submit_button"
]
for key in required_keys:
if key not in config:
logging.error(f"Missing required configuration key: {key}")
raise ValueError(f"Missing required configuration key: {key}")
logging.info("Configuration loaded successfully.")
return config
def reset_output(self) -> list:
"""
Reset the chatbot output.
:return: An empty list to reset the output.
"""
return []
def create_interface(self) -> gr.Blocks:
"""
Create the Gradio Blocks interface.
:return: A Gradio Blocks interface object.
"""
logging.info("Creating Gradio interface...")
# Define the Gradio Blocks interface
with gr.Blocks() as demo:
gr.Markdown(f"## {self.title}\n{self.description}")
# Chatbot history component
chatbot_output = gr.Chatbot(label=self.output_label, type="messages")
# User input
user_input = gr.Textbox(
lines=2,
label=self.input_label,
placeholder=self.input_placeholder
)
# Buttons
with gr.Row():
reset = gr.Button(self.reset_button, variant="secondary")
submit = gr.Button(self.submit_button, variant="primary")
# Button actions
submit.click(fn=self.conversation, inputs=[user_input, chatbot_output], outputs=chatbot_output)
user_input.submit(fn=self.conversation, inputs=[user_input, chatbot_output], outputs=chatbot_output)
reset.click(fn=self.reset_output, inputs=None, outputs=chatbot_output)
logging.info("Gradio interface created successfully.")
return demo |