ButterM40's picture
Fix HF Space: update SDK version, add error handling, improve README
7f7c489
import gradio as gr
import os
import sys
# Add backend to path for imports
backend_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'backend')
sys.path.insert(0, backend_path)
from backend.models.character_manager import CharacterManager
import asyncio
# Global character manager
character_manager = None
def initialize_models():
"""Initialize the character manager"""
global character_manager
if character_manager is None:
print("πŸ”„ Initializing character manager...")
try:
character_manager = CharacterManager()
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(character_manager.initialize())
loop.close()
print("βœ… Models loaded successfully!")
except Exception as e:
print(f"❌ Error initializing models: {e}")
import traceback
traceback.print_exc()
raise
def chat_function(message, character_id, history):
"""Handle chat with character - returns updated history and empty message"""
if not message or not message.strip():
return history, ""
# Initialize if needed
if character_manager is None:
initialize_models()
try:
# Convert history for context
conversation_history = []
if history:
for user_msg, bot_msg in history[-3:]:
if user_msg:
conversation_history.append({"role": "user", "content": user_msg})
if bot_msg:
conversation_history.append({"role": "assistant", "content": bot_msg})
# Generate response
response = character_manager.generate_response(
character_id=character_id,
user_message=message,
conversation_history=conversation_history
)
# Update history
if history is None:
history = []
history.append((message, response))
return history, ""
except Exception as e:
error_msg = f"❌ Error: {str(e)}"
if history is None:
history = []
history.append((message, error_msg))
return history, ""
# Ultra-simple interface to avoid schema issues
with gr.Blocks() as demo:
gr.Markdown("# 🎭 Roleplay Chat Box")
character_dropdown = gr.Dropdown(
choices=["moses", "samsung_employee", "jinx"],
value="moses",
label="Choose Character"
)
chatbot = gr.Chatbot()
msg = gr.Textbox(label="Message", placeholder="Type here...")
with gr.Row():
submit = gr.Button("Send")
clear = gr.Button("Clear")
# Event handlers - simple format
submit.click(
chat_function,
inputs=[msg, character_dropdown, chatbot],
outputs=[chatbot, msg]
)
msg.submit(
chat_function,
inputs=[msg, character_dropdown, chatbot],
outputs=[chatbot, msg]
)
clear.click(
lambda: [],
outputs=[chatbot]
)
if __name__ == "__main__":
demo.launch(
share=True,
server_name="0.0.0.0",
server_port=7860
)