""" BioMCP Gradio App — Main entry point. Assembles all tabs into one cohesive application. """ import gradio as gr from core.config import load_env_keys from tabs.settings import create_settings_tab from tabs.discover import create_discover_tab from tabs.search import create_search_tab from tabs.get_detail import create_get_tab from tabs.helpers import create_helpers_tab from tabs.enrichment import create_enrichment_tab from tabs.batch import create_batch_tab DESCRIPTION = """ # 🧬 BioMCP Explorer **One interface. Every biomedical entity. Evidence from the sources you trust.** Explore genes, variants, articles, trials, drugs, diseases, pathways, proteins, adverse events, PGx, GWAS, and phenotypes — all powered by [BioMCP](https://biomcp.org/) across 30+ upstream APIs. > **Tip:** Start with the **⚙️ Settings** tab to configure API keys, then explore any entity tab. """ def create_app(): with gr.Blocks(title="BioMCP Explorer") as app: gr.Markdown(DESCRIPTION) # Session state lives outside tabs so every tab can share it session_keys = gr.State(load_env_keys()) with gr.Tabs(): # Settings tab first — pass session_keys in create_settings_tab(session_keys) # All feature tabs, sharing the same session_keys create_discover_tab(session_keys) create_search_tab(session_keys) create_get_tab(session_keys) create_helpers_tab(session_keys) create_enrichment_tab(session_keys) create_batch_tab(session_keys) return app if __name__ == "__main__": import os is_hf = os.environ.get("SPACE_ID") is not None app = create_app() app.launch( server_name="0.0.0.0" if is_hf else "127.0.0.1", server_port=7860 if is_hf else 7865, share=False, show_error=True, theme=gr.themes.Soft( primary_hue="blue", secondary_hue="cyan", neutral_hue="slate", ), css=""" .gradio-container { max-width: 1400px !important; } footer { display: none !important; } """, )