Tobias Geisler
load chatbot: Check for empty chatbot ID
8845a3f
import gradio as gr
import logging
from database import get_chatbot
import concurrent.futures
# Setup logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def load_chatbot(chatbot_id):
logger.info(f"Attempting to load chatbot with ID: {chatbot_id}")
if chatbot_id is None or chatbot_id == "":
return (
gr.update(value="# Chatbot\n\nWillkommen beim Chatbot"),
gr.update(value="", visible=True),
gr.update(value=""),
gr.update(value="Bitte gib eine Chatbot-ID ein.")
)
try:
chatbot = get_chatbot(chatbot_id)
except Exception as e:
logger.error(f"Error loading chatbot {chatbot_id}: {str(e)}")
return (
gr.update(value="# Chatbot\n\nWillkommen beim Chatbot"),
gr.update(value="", visible=True),
gr.update(value=""),
gr.update(value=f"Ein Fehler ist aufgetreten: {str(e)}")
)
try:
if chatbot:
logger.info(f"Chatbot {chatbot_id} loaded successfully")
return (
gr.update(value=f"# {chatbot.name}\n\nWillkommen bei {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}"),
gr.update(value="Chatbot erfolgreich geladen.")
)
logger.warning(f"Chatbot {chatbot_id} not found or inactive")
return (
gr.update(value="# Chatbot\n\nWillkommen beim Chatbot"),
gr.update(value="", visible=True),
gr.update(value=""),
gr.update(value="Ungültige Chatbot-ID oder Chatbot nicht aktiv.")
)
except Exception as e:
logger.error(f"Error filling chatbot fields for {chatbot_id}: {str(e)}")
return (
gr.update(value="# Chatbot\n\nWillkommen beim Chatbot"),
gr.update(value="", visible=True),
gr.update(value=""),
gr.update(value=f"Ein Fehler ist aufgetreten: {str(e)}")
)
def load_chatbot_with_timeout(chatbot_id, timeout=5):
with concurrent.futures.ThreadPoolExecutor() as executor:
future = executor.submit(load_chatbot, chatbot_id)
try:
result = future.result(timeout=timeout)
return result
except concurrent.futures.TimeoutError:
logger.error(f"Timeout while loading chatbot {chatbot_id}")
result = (
gr.update(value="# Chatbot\n\nWillkommen beim Chatbot"),
gr.update(value="", visible=True),
gr.update(value=""),
gr.update(value="Zeitüberschreitung beim Laden des Chatbots.")
)
gr.refresh() # Force UI refresh
return result
except Exception as e:
logger.error(f"Unexpected error while loading chatbot {chatbot_id}: {str(e)}")
return (
gr.update(value="# Chatbot\n\nWillkommen beim Chatbot"),
gr.update(value="", visible=True),
gr.update(value=""),
gr.update(value=f"Ein unerwarteter Fehler ist aufgetreten: {str(e)}")
)
def create_chat_tab():
chatbot_id_input = gr.Textbox(label="Chatbot-ID eingeben")
# Add examples right below the chatbot ID input field
examples = gr.Examples(
examples=["courteous-duckling-628", "delightful-red-panda-273", "glowing-toucan-982", "mellow-toucan-512", "upbeat-elephant-433", "shiny-platypus-699"],
inputs=chatbot_id_input,
label="Beispiel-Chatbots"
)
load_button = gr.Button("Chatbot laden")
load_message = gr.Textbox(label="Lademeldung", interactive=False)
chatbot_title = gr.Markdown("# Chatbot\n\nWillkommen beim Chatbot")
chat_interface = gr.ChatInterface(
chat_with_bot,
additional_inputs=[chatbot_id_input],
)
share_link = gr.Textbox(label="Link zum Teilen", interactive=False, elem_id="share_link")
load_button.click(
fn=load_chatbot_with_timeout,
inputs=[chatbot_id_input],
outputs=[chatbot_title, chatbot_id_input, share_link, load_message]
)
# Add a custom HTML button for copying the share URL to the clipboard
copy_button = gr.HTML("""
<button onclick="copyToClipboard('share_link')">In die Zwischenablage kopieren</button>
""")
return {
"chatbot_id_input": chatbot_id_input,
"load_button": load_button,
"load_message": load_message,
"title": chatbot_title,
"interface": chat_interface,
"share_link": share_link,
"copy_button": copy_button,
"examples": examples
}
def chat_with_bot(message, history, chatbot_id):
from utils.openai_utils import chat_with_bot as openai_chat_with_bot
return openai_chat_with_bot(message, history, chatbot_id)