First_agent / app.py
uru
refactoring
a4fcb76
from __future__ import annotations
import os
import shutil
from pathlib import Path
import gradio as gr
import yaml
from smolagents import CodeAgent, HfApiModel, load_tool
from tools.final_answer import FinalAnswerTool
from tools.web_search import DuckDuckGoSearchTool
from tools.visit_webpage import VisitWebpageTool
from tools.disk_free import disk_free
from tools.timezone_time import get_current_time_in_timezone
from src.first_agent.ui import GradioUI
print("Gradio version:", gr.__version__)
# --- Load .env locally (HF Spaces will use Settings → Secrets instead) ---
try:
from dotenv import load_dotenv
load_dotenv()
except Exception:
pass
# --- Required env ---
if not os.getenv("HF_TOKEN"):
raise RuntimeError(
"HF_TOKEN is not set. "
"Create a .env file locally or configure it in Hugging Face Spaces → Settings → Secrets."
)
# --- Runtime output directory setup ---
BASE_DIR = Path.cwd()
OUTPUT_DIR = BASE_DIR / "outputs" / "final_answers"
if OUTPUT_DIR.exists():
shutil.rmtree(OUTPUT_DIR)
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
# Make FinalAnswerTool write into the same folder
os.environ["FINAL_ANSWER_DIR"] = str(OUTPUT_DIR)
# --- Tools ---
final_answer = FinalAnswerTool()
web_search = DuckDuckGoSearchTool(max_results=10)
visit_webpage = VisitWebpageTool()
# --- Model ---
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id="Qwen/Qwen2.5-Coder-32B-Instruct", # may be overloaded sometimes
custom_role_conversions=None,
)
# Tool from Hub
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
# Prompts
with open("prompts.yaml", "r", encoding="utf-8") as stream:
prompt_templates = yaml.safe_load(stream)
# --- Agent ---
agent = CodeAgent(
model=model,
tools=[
final_answer,
get_current_time_in_timezone,
web_search,
visit_webpage,
image_generation_tool,
disk_free,
],
max_steps=6,
verbosity_level=1,
grammar=None,
planning_interval=None,
name=None,
description=None,
prompt_templates=prompt_templates,
)
# On HF Spaces, share=True is not supported; force share=False
GradioUI(agent).launch()