# References: # https://www.gradio.app/guides/quickstart import os import gradio as gr from agents.crew import run_crew from utils.utils import get_questions # MCP server functions def ask(question, openai_api_key, gemini_api_key, anthropic_api_key, file_name = ""): """ Ask General AI Assistant a question to answer. Args: question (str): The question to answer openai_api_key (str): OpenAI API key gemini_api_key (str): Gemini API key anthropic_api_key (str): Anthropic API key file_name (str): Optional file name Returns: str: The answer to the question """ if not question: gr.Warning("Question is required.") return "" if not openai_api_key: gr.Warning("OpenAI API Key is required.") return "" if not gemini_api_key: gr.Warning("Gemini API Key is required.") return "" if not anthropic_api_key: gr.Warning("Anthropic API Key is required.") return "" if file_name: file_name = f"files/{file_name}" try: os.environ["OPENAI_API_KEY"] = openai_api_key os.environ["GEMINI_API_KEY"] = gemini_api_key os.environ["MODEL_API_KEY"] = anthropic_api_key return run_crew(question, file_name) except Exception as e: gr.Warning(str(e)) return "" finally: for key in ["OPENAI_API_KEY", "GEMINI_API_KEY", "MODEL_API_KEY"]: os.environ.pop(key, None) # Helper functions def update_file_link(file_name): if file_name: space_id = os.environ.get("SPACE_ID", "bstraehle/gaia") base_url = f"https://huggingface.co/spaces/{space_id}/blob/main/files" return f'Open File' return "" # Graphical user interface QUESTION_FILE_PATH_GAIA = "files/gaia_validation.jsonl" QUESTION_FILE_PATH_HLE = "files/hle_validation.jsonl" DEFAULT_QUESTION = "In MCP's 1st Birthday Hackathon, hosted by Anthropic and Gradio, what percentage of participants submitted a solution so far?" CSS_FULL_WIDTH = """ html, body, #root, #root > div, main { margin: 0 !important; padding: 0 !important; width: 100% !important; } .full-width-app, .full-width-app > .gradio-block, .full-width-app > .gradio-block > .gradio-container { max-width: 100% !important; width: 100% !important; margin: 0 !important; padding-left: 0 !important; padding-right: 0 !important; } .content-padding { padding-left: 1.5rem; padding-right: 1.5rem; } .full-width-tabs { width: 100%; } .full-width-tabs .gradio-block { max-width: 100%; width: 100%; } """ with gr.Blocks(elem_classes=["full-width-app"]) as gaia: gr.HTML(f"") with gr.Column(elem_classes=["content-padding"]): gr.Markdown("## General AI Assistant") gr.Markdown(os.environ.get("DESCRIPTION")) with gr.Row(): with gr.Column(scale=3): with gr.Row(): question = gr.Textbox( label="Question *", placeholder=DEFAULT_QUESTION, interactive=True, lines=1, max_lines=3 ) with gr.Row(): ground_truth = gr.Textbox( label="Ground Truth", interactive=True, lines=1, max_lines=2 ) file_name = gr.Textbox( label="File Name", interactive=True, scale=2, lines=1, max_lines=2 ) file_link = gr.HTML( label="File Link", value="" ) with gr.Row(): openai_api_key = gr.Textbox( label="OpenAI API Key *", type="password", placeholder="sk‑...", interactive=True ) gemini_api_key = gr.Textbox( label="Gemini API Key *", type="password", interactive=True ) anthropic_api_key = gr.Textbox( label="Anthropic API Key *", type="password", placeholder="sk-ant-...", interactive=True ) with gr.Row(): clear_btn = gr.ClearButton( components=[question, ground_truth, file_name, file_link] ) submit_btn = gr.Button("Submit", variant="primary") with gr.Column(scale=1): answer = gr.Textbox( label="Answer", interactive=False, lines=1, max_lines=3 ) submit_btn.click( fn=ask, inputs=[question, openai_api_key, gemini_api_key, anthropic_api_key, file_name], outputs=answer ) file_name.change( fn=update_file_link, inputs=[file_name], outputs=[file_link] ) with gr.Tabs(elem_classes=["full-width-tabs"]): with gr.TabItem("GAIA Benchmark Level 1"): gr.Examples( examples=get_questions(QUESTION_FILE_PATH_GAIA, 1), inputs=[question, ground_truth, file_name, openai_api_key, gemini_api_key, anthropic_api_key], examples_per_page=3, cache_examples=False ) with gr.TabItem("GAIA Benchmark Level 2"): gr.Examples( examples=get_questions(QUESTION_FILE_PATH_GAIA, 2), inputs=[question, ground_truth, file_name, openai_api_key, gemini_api_key, anthropic_api_key], examples_per_page=3, cache_examples=False ) with gr.TabItem("GAIA Benchmark Level 3"): gr.Examples( examples=get_questions(QUESTION_FILE_PATH_GAIA, 3), inputs=[question, ground_truth, file_name, openai_api_key, gemini_api_key, anthropic_api_key], examples_per_page=3, cache_examples=False ) with gr.TabItem("Humanity's Last Exam"): gr.Examples( examples=get_questions(QUESTION_FILE_PATH_HLE, 0), inputs=[question, ground_truth, file_name, openai_api_key, gemini_api_key, anthropic_api_key], examples_per_page=3, cache_examples=False ) gaia.launch(mcp_server=True, share=False, ssr_mode=False)