import gradio as gr # Import your existing functions from src import search_on_web, search_custom_sites, search_custom_domain def run_search_on_web(query: str): try: result = search_on_web(query) return result.response_str, [item.model_dump() for item in result.citation] except Exception as e: return str(e), [] def run_search_custom_sites(query: str, sites: str): try: site_list = [s.strip() for s in sites.split(",") if s.strip()] result = search_custom_sites(query, site_list) return result.response_str, [item.model_dump() for item in result.citation] except Exception as e: return str(e), [] def run_search_custom_domains(query: str, domains: str): try: domain_list = [d.strip() for d in domains.split(",") if d.strip()] result = search_custom_domain(query, domain_list) return result.response_str, [item.model_dump() for item in result.citation] except Exception as e: return str(e), [] with gr.Blocks() as demo: gr.Markdown("# 🔎 MCP Search Panel") with gr.Tab("General Web Search"): query_input_web = gr.Textbox(label="Query") output_web_str = gr.Textbox(label="Answer") output_web_cite = gr.JSON(label="Citations") search_btn_web = gr.Button("Search") search_btn_web.click( fn=run_search_on_web, inputs=query_input_web, outputs=[output_web_str, output_web_cite], ) with gr.Tab("Custom Sites Search"): query_input_sites = gr.Textbox(label="Query") sites_input = gr.Textbox(label="Sites (comma-separated)") output_sites_str = gr.Textbox(label="Answer") output_sites_cite = gr.JSON(label="Citations") search_btn_sites = gr.Button("Search") search_btn_sites.click( fn=run_search_custom_sites, inputs=[query_input_sites, sites_input], outputs=[output_sites_str, output_sites_cite], ) with gr.Tab("Custom Domains Search"): query_input_domains = gr.Textbox(label="Query") domains_input = gr.Textbox(label="Domains (comma-separated, e.g., edu, gov)") output_domains_str = gr.Textbox(label="Answer") output_domains_cite = gr.JSON(label="Citations") search_btn_domains = gr.Button("Search") search_btn_domains.click( fn=run_search_custom_domains, inputs=[query_input_domains, domains_input], outputs=[output_domains_str, output_domains_cite], ) if __name__ == "__main__": demo.launch(mcp_server=True)