Freddolin's picture
Update app.py
d0afda5 verified
raw
history blame
3.28 kB
import os
import gradio as gr
import requests
import pandas as pd
import subprocess # Needed for runtime pip install
import sys # Needed for runtime pip install
# --- START: Force ddgs installation workaround ---
# This block ensures 'ddgs' (which provides 'duckduckgo_search') is installed
# early, before smolagents tries to use its DuckDuckGoSearchTool.
try:
# Attempt to import duckduckgo_search to check if it's already available
import duckduckgo_search
print("duckduckgo_search (via ddgs) is already installed.")
except ImportError:
print("duckduckgo_search not found. Attempting to install ddgs...")
try:
# Use 'ddgs' as it's the updated package name
subprocess.check_call([sys.executable, "-m", "pip", "install", "ddgs>=4.0.0"])
print("ddgs installed successfully.")
except Exception as e:
print(f"Failed to install ddgs: {e}")
# Critical error: if ddgs can't be installed, the app can't function.
raise RuntimeError(f"CRITICAL: Failed to install ddgs: {e}")
# --- END: Force ddgs installation workaround ---
# Now import the agent, as its dependencies (smolagents, duckduckgo_search) should be ready
from agent import GaiaAgent
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
def run_agent_and_score(task_description: str) -> str:
# Initialize the agent within the function, so it's fresh for each run
# This also helps if the agent initialization is heavy or stateful
gaia_agent = GaiaAgent()
# Process the task
agent_output = gaia_agent.process_task(task_description)
# Send output to the scoring API
try:
response = requests.post(
f"{DEFAULT_API_URL}/score_agent",
json={"task_description": task_description, "agent_response": agent_output}
)
response.raise_for_status() # Raise an HTTPError for bad responses (4xx or 5xx)
scoring_result = response.json()
score_info = f"Scoring Result:\nTotal Score: {scoring_result.get('total_score')}\nCorrectness Score: {scoring_result.get('correctness_score')}\nExplanation: {scoring_result.get('explanation', 'No explanation provided.')}"
return f"Agent Output:\n{agent_output}\n\n---\n\n{score_info}"
except requests.exceptions.RequestException as e:
return f"Agent Output:\n{agent_output}\n\n---\n\nError connecting to scoring API: {e}"
except Exception as e:
return f"Agent Output:\n{agent_output}\n\n---\n\nAn unexpected error occurred during scoring: {e}"
# Gradio Interface setup
with gr.Blocks() as demo:
gr.Markdown("# GAIA Basic Agent Evaluator (Freddolin)")
gr.Markdown("Enter a task description for the agent to process. The agent's output will be displayed, followed by its score from the GAIA scoring API.")
task_input = gr.Textbox(label="Task Description", placeholder="e.g., 'What is the capital of France?'")
output_text = gr.Textbox(label="Agent Output & Score", interactive=False)
run_button = gr.Button("Run Agent & Score")
run_button.click(
fn=run_agent_and_score,
inputs=task_input,
outputs=output_text
)
# Launch the Gradio app
demo.launch(debug=True) # debug=True can provide more info in logs during development