import gradio as gr import httpx import os # Use the container's base URL (relative path works inside the same app) BASE_URL = os.environ.get("BASE_URL", "") # "" means same host:port as Gradio def query_agent(agent: str, message: str): url = f"{BASE_URL}/api/{agent}" try: r = httpx.post(url, json={"text": message}) return r.json().get("response", "No response") except Exception as e: return str(e) def query_all(message: str): url = f"{BASE_URL}/api/run_all" try: r = httpx.post(url, json={"text": message}) return [resp["response"] for resp in r.json()["responses"]] except Exception as e: return [str(e)] def build_ui(): with gr.Blocks() as demo: gr.Markdown("## Multi-Agent Control Panel") with gr.Tab("Single Agent"): msg = gr.Textbox(label="Message") agent = gr.Dropdown(["agent1", "agent2", "agent3", "agent4"], label="Choose Agent") output = gr.Textbox(label="Agent Response") btn = gr.Button("Send") btn.click(fn=lambda m, a: query_agent(a, m), inputs=[msg, agent], outputs=output) with gr.Tab("All Agents"): msg_all = gr.Textbox(label="Message for All Agents") outputs_all = gr.JSON(label="All Responses") btn_all = gr.Button("Broadcast") btn_all.click(fn=query_all, inputs=msg_all, outputs=outputs_all) return demo