official.ghost.logic
Fix Gradio version compatibility - remove theme parameter
ddf162a
"""
Main Application Orchestrator for D'n'D Campaign Manager
Assembles all modular tabs into the complete Gradio interface
"""
import gradio as gr
from src.agents.character_agent import CharacterAgent
from src.agents.campaign_agent import CampaignAgent
from src.ui.components.dropdown_manager import DropdownManager
from src.ui.tabs import (
AboutTab,
CharacterCreateTab,
CharacterLoadTab,
CharacterManageTab,
CharacterPortraitTab,
CharacterExportTab,
CampaignCreateTab,
CampaignManageTab,
CampaignAddCharsTab,
CampaignSynthesizeTab,
SessionTrackingTab,
)
class DnDCampaignManagerApp:
"""Main application class that orchestrates all UI components"""
def __init__(self):
# Initialize agents
self.character_agent = CharacterAgent()
self.campaign_agent = CampaignAgent()
# Initialize dropdown manager
self.dropdown_manager = DropdownManager(
character_agent=self.character_agent,
campaign_agent=self.campaign_agent
)
# Initialize tabs
self.about_tab = AboutTab()
self.character_create_tab = CharacterCreateTab(
character_agent=self.character_agent
)
self.character_load_tab = CharacterLoadTab(
character_agent=self.character_agent,
dropdown_manager=self.dropdown_manager
)
self.character_manage_tab = CharacterManageTab(
character_agent=self.character_agent,
dropdown_manager=self.dropdown_manager
)
self.character_portrait_tab = CharacterPortraitTab(
character_agent=self.character_agent,
dropdown_manager=self.dropdown_manager
)
self.character_export_tab = CharacterExportTab(
character_agent=self.character_agent,
dropdown_manager=self.dropdown_manager
)
self.campaign_create_tab = CampaignCreateTab(
campaign_agent=self.campaign_agent
)
self.campaign_manage_tab = CampaignManageTab(
campaign_agent=self.campaign_agent,
dropdown_manager=self.dropdown_manager
)
self.campaign_add_chars_tab = CampaignAddCharsTab(
character_agent=self.character_agent,
campaign_agent=self.campaign_agent,
dropdown_manager=self.dropdown_manager
)
self.campaign_synthesize_tab = CampaignSynthesizeTab(
character_agent=self.character_agent,
campaign_agent=self.campaign_agent,
dropdown_manager=self.dropdown_manager
)
self.session_tracking_tab = SessionTrackingTab(
campaign_agent=self.campaign_agent,
dropdown_manager=self.dropdown_manager
)
def create_interface(self) -> gr.Blocks:
"""Create and assemble the complete Gradio interface"""
with gr.Blocks(title="D'n'D Campaign Manager - Character Creator") as interface:
gr.Markdown("""
# 🎲 D'n'D Campaign Manager
## Complete D&D Character Creator
Create and manage complete D&D 5e characters for your campaigns!
""")
with gr.Tabs():
# Character tabs
self.character_create_tab.create()
character_dropdown = self.character_load_tab.create()
delete_character_dropdown = self.character_manage_tab.create()
portrait_character_dropdown = self.character_portrait_tab.create()
export_character_dropdown = self.character_export_tab.create()
# Campaign Management tab with sub-tabs
with gr.Tab("Campaign Management"):
gr.Markdown("""
### 🎲 Campaign Management
Create and manage your D&D campaigns, track sessions, and record events!
""")
with gr.Tabs():
self.campaign_synthesize_tab.create()
self.campaign_create_tab.create()
manage_campaign_dropdown = self.campaign_manage_tab.create()
add_char_campaign_dropdown, add_char_character_dropdown = self.campaign_add_chars_tab.create()
session_campaign_dropdown, auto_session_campaign_dropdown, notes_campaign_dropdown, event_campaign_dropdown = self.session_tracking_tab.create()
# About tab
self.about_tab.create()
gr.Markdown("""
---
### Tips
- Enable "Use AI" options for more creative and detailed characters
- Use Standard Array for balanced characters
- Use Roll for random variation
- Save your character ID to load it later
- Check the character list to find previously created characters
""")
# Auto-populate dropdowns on interface load
def populate_all_dropdowns():
"""Populate all dropdowns when interface loads"""
campaign_choices = self.dropdown_manager.get_campaign_dropdown_choices()
character_choices = self.dropdown_manager.get_character_dropdown_choices()
return [
gr.update(choices=character_choices), # character_dropdown
gr.update(choices=character_choices), # delete_character_dropdown
gr.update(choices=character_choices), # portrait_character_dropdown
gr.update(choices=character_choices), # export_character_dropdown
gr.update(choices=campaign_choices), # manage_campaign_dropdown
gr.update(choices=campaign_choices), # add_char_campaign_dropdown
gr.update(choices=character_choices), # add_char_character_dropdown
gr.update(choices=campaign_choices), # session_campaign_dropdown
gr.update(choices=campaign_choices), # auto_session_campaign_dropdown
gr.update(choices=campaign_choices), # notes_campaign_dropdown
gr.update(choices=campaign_choices), # event_campaign_dropdown
]
interface.load(
fn=populate_all_dropdowns,
inputs=[],
outputs=[
character_dropdown,
delete_character_dropdown,
portrait_character_dropdown,
export_character_dropdown,
manage_campaign_dropdown,
add_char_campaign_dropdown,
add_char_character_dropdown,
session_campaign_dropdown,
auto_session_campaign_dropdown,
notes_campaign_dropdown,
event_campaign_dropdown,
]
)
return interface
def launch_ui():
"""Launch the Gradio interface"""
app = DnDCampaignManagerApp()
interface = app.create_interface()
interface.launch(
server_name="0.0.0.0",
server_port=7860,
share=False,
show_error=True
)
if __name__ == "__main__":
launch_ui()