import gradio as gr # Import generator functions and sample JSONs from concept_map_generator import generate_concept_map from synoptic_chart_generator import generate_synoptic_chart from radial_diagram_generator import generate_radial_diagram from sample_data import CONCEPT_MAP_JSON, SYNOPTIC_CHART_JSON, RADIAL_DIAGRAM_JSON def create_interface(generator_fn, sample_json, title, description): """ Helper function to create a Gradio Interface for a specific generator. """ return gr.Interface( fn=generator_fn, inputs=gr.Textbox( value=sample_json, placeholder="Paste JSON following the documented format", label="Structured JSON Input", lines=25 ), outputs=gr.Image( label="Generated Graph", type="filepath", show_download_button=True ), title=title, description=description ) if __name__ == "__main__": with gr.Blocks( title="Advanced Graph Generator", css=""" .gradio-container { font-family: 'Inter', sans-serif !important; } .gr-tab-item { padding: 10px 20px; font-size: 1.1em; font-weight: bold; } .gr-button { border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); background-color: #4CAF50; /* Green color for buttons */ color: white; padding: 10px 20px; font-size: 1.1em; } .gr-button:hover { background-color: #45a049; } .gr-textbox { border-radius: 8px; padding: 10px; } .gradio-container.dark { /* Tailwind dark mode for overall container if needed */ --tw-bg-opacity: 1; background-color: rgb(24 24 27 / var(--tw-bg-opacity)); /* bg-zinc-900 */ color: #d4d4d8; /* text-zinc-300 */ } .gradio-container.dark .gr-textbox { background-color: rgb(39 39 42 / var(--tw-bg-opacity)); /* bg-zinc-800 */ color: #d4d4d8; border-color: #52525b; /* border-zinc-600 */ } .gradio-container.dark .gr-tab-item { color: #d4d4d8; } .gradio-container.dark .gr-tab-item.selected { background-color: rgb(39 39 42 / var(--tw-bg-opacity)); color: #fff; } """ ) as demo: gr.Markdown( """ # Advanced Graph Generation Suite Choose a graph type and provide your JSON data to generate a visual representation. All graphs maintain a consistent, elegant style with rounded boxes, a dark-to-light color gradient, and a clean white background. """ ) with gr.Tabs(): with gr.TabItem("Concept Map"): concept_map_interface = create_interface( generate_concept_map, CONCEPT_MAP_JSON, "Concept Map Generator (Vertical Hierarchy)", "Creates a hierarchical concept map, ideal for breaking down complex topics." ) # Removed .render() here with gr.TabItem("Synoptic Chart"): synoptic_chart_interface = create_interface( generate_synoptic_chart, SYNOPTIC_CHART_JSON, "Synoptic Chart Generator (Horizontal Hierarchy)", "Generates a horizontal synoptic chart, perfect for outlining processes or structures." ) # Removed .render() here with gr.TabItem("Radial Diagram"): radial_diagram_interface = create_interface( generate_radial_diagram, RADIAL_DIAGRAM_JSON, "Radial Diagram Generator (Central Expansion)", "Creates a diagram expanding from a central idea, visualizing interconnected concepts." ) # Removed .render() here demo.launch( mcp_server=True, share=False, server_port=7860, server_name="0.0.0.0" )