Spaces:
Running
Running
import os, threading | |
import gradio as gr | |
from crew import run_crew | |
from utils import get_questions | |
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: | |
raise gr.Error("Question is required.") | |
if not openai_api_key: | |
raise gr.Error("OpenAI API Key is required.") | |
if not gemini_api_key: | |
raise gr.Error("Gemini API Key is required.") | |
if not anthropic_api_key: | |
raise gr.Error("Anthropic API Key is required.") | |
if file_name: | |
file_name = f"data/{file_name}" | |
lock = threading.Lock() | |
with lock: | |
answer = "" | |
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 | |
answer = run_crew(question, file_name) | |
except Exception as e: | |
raise gr.Error(e) | |
finally: | |
del os.environ["OPENAI_API_KEY"] | |
del os.environ["GEMINI_API_KEY"] | |
del os.environ["MODEL_API_KEY"] | |
return answer | |
gr.close_all() | |
with gr.Blocks() as grady: | |
gr.Markdown("## Grady - General AI Assistant") | |
with gr.Tab("Solution"): | |
gr.Markdown(os.environ.get("DESCRIPTION")) | |
with gr.Row(): | |
with gr.Column(scale=3): | |
with gr.Row(): | |
question = gr.Textbox( | |
label="Question *", | |
placeholder="In the 2025 Gradio Agents & MCP Hackathon, what percentage of participants submitted a solution during the last 24 hours?", | |
interactive=True | |
) | |
with gr.Row(): | |
level = gr.Radio( | |
choices=[1, 2, 3], | |
label="GAIA Benchmark Level", | |
interactive=True, | |
scale=1 | |
) | |
ground_truth = gr.Textbox( | |
label="Ground Truth", | |
interactive=True, | |
scale=1 | |
) | |
file_name = gr.Textbox( | |
label="File Name", | |
interactive=True, | |
scale=2 | |
) | |
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, level, ground_truth, file_name] | |
) | |
submit_btn = gr.Button("Submit", variant="primary") | |
with gr.Column(scale=1): | |
answer = gr.Textbox( | |
label="Answer", | |
lines=1, | |
interactive=False | |
) | |
submit_btn.click( | |
fn=ask, | |
inputs=[question, openai_api_key, gemini_api_key, anthropic_api_key, file_name], | |
outputs=answer | |
) | |
QUESTION_FILE_PATH = "data/gaia_validation.jsonl" | |
gr.Examples( | |
label="GAIA Benchmark Level 1 Problems", | |
examples=get_questions(QUESTION_FILE_PATH, 1), | |
inputs=[question, level, ground_truth, file_name, openai_api_key, gemini_api_key, anthropic_api_key], | |
outputs=answer, | |
cache_examples=False | |
) | |
gr.Examples( | |
label="GAIA Benchmark Level 2 Problems", | |
examples=get_questions(QUESTION_FILE_PATH, 2), | |
inputs=[question, level, ground_truth, file_name, openai_api_key, gemini_api_key, anthropic_api_key], | |
outputs=answer, | |
cache_examples=False | |
) | |
gr.Examples( | |
label="GAIA Benchmark Level 3 Problems", | |
examples=get_questions(QUESTION_FILE_PATH, 3), | |
inputs=[question, level, ground_truth, file_name, openai_api_key, gemini_api_key, anthropic_api_key], | |
outputs=answer, | |
cache_examples=False | |
) | |
with gr.Tab("Documentation"): | |
gr.Markdown(os.environ.get("DOCUMENTATION")) | |
grady.launch(mcp_server=True) |