WebSearch Tools - Advanced Configuration
Configure WebSearchTools time limits, regions, and DDGS backends for text and news search.
WebSearchTools forwards backend and timelimit to separate DDGS text and news methods, whose supported values differ. The source leaves news enabled on its text-search toolkits, although some configured backends and timelimit="y" are text-only. Its regional comparison also executes only the US agent. Apply the corrections below before running.
"""
WebSearch Tools - Advanced Configuration
=========================================
Demonstrates advanced WebSearchTools configuration with timelimit, region,
and backend parameters for customized search behavior across multiple
search engines.
Parameters:
- timelimit: Filter results by time ("d" = day, "w" = week, "m" = month, "y" = year)
- region: Localize results (e.g., "us-en", "uk-en", "de-de", "fr-fr", "ru-ru")
- backend: Search backend ("auto", "duckduckgo", "google", "bing", "brave", "yandex", "yahoo")
"""
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.websearch import WebSearchTools
# ---------------------------------------------------------------------------
# Example 1: Time-limited search with auto backend
# ---------------------------------------------------------------------------
# Filter results to specific time periods
# Past day - for breaking news
daily_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
timelimit="d", # Results from past day
backend="auto",
)
],
instructions=["Search for the most recent information from today."],
)
# Past week - for recent developments
weekly_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
timelimit="w", # Results from past week
backend="auto",
)
],
instructions=["Search for recent information from the past week."],
)
# Past month - for broader recent context
monthly_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
timelimit="m", # Results from past month
backend="auto",
)
],
instructions=["Search for information from the past month."],
)
# Past year - for yearly trends
yearly_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
timelimit="y", # Results from past year
backend="auto",
)
],
instructions=["Search for information from the past year."],
)
# ---------------------------------------------------------------------------
# Example 2: Region-specific searches
# ---------------------------------------------------------------------------
# Localize search results based on region
# US English
us_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
region="us-en",
backend="auto",
)
],
instructions=["Provide US-localized search results."],
)
# UK English
uk_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
region="uk-en",
backend="auto",
)
],
instructions=["Provide UK-localized search results."],
)
# German
de_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
region="de-de",
backend="auto",
)
],
instructions=["Provide German-localized search results."],
)
# French
fr_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
region="fr-fr",
backend="auto",
)
],
instructions=["Provide French-localized search results."],
)
# Russian
ru_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
region="ru-ru",
backend="auto",
)
],
instructions=["Provide Russian-localized search results."],
)
# ---------------------------------------------------------------------------
# Example 3: Different backend options
# ---------------------------------------------------------------------------
# Use specific search engines as backends
# DuckDuckGo backend
duckduckgo_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
backend="duckduckgo",
timelimit="w",
region="us-en",
)
],
)
# Google backend
google_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
backend="google",
timelimit="w",
region="us-en",
)
],
)
# Bing backend
bing_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
backend="bing",
timelimit="w",
region="us-en",
)
],
)
# Brave backend
brave_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
backend="brave",
timelimit="w",
region="us-en",
)
],
)
# Yandex backend
yandex_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
backend="yandex",
timelimit="w",
region="ru-ru", # Yandex works well with Russian region
)
],
)
# Yahoo backend
yahoo_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
backend="yahoo",
timelimit="w",
region="us-en",
)
],
)
# ---------------------------------------------------------------------------
# Example 4: Combined configuration - Research assistant
# ---------------------------------------------------------------------------
# Combine all parameters for a powerful research assistant
research_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
backend="auto", # Auto-select best available backend
timelimit="w", # Focus on recent results
region="us-en", # US English results
fixed_max_results=10, # Get more results
timeout=20, # Longer timeout for thorough search
)
],
instructions=[
"You are a research assistant that finds comprehensive, recent information.",
"Always cite your sources and provide context for your findings.",
"Focus on authoritative and reliable sources.",
],
)
# ---------------------------------------------------------------------------
# Example 5: News-focused agent with time and region filters
# ---------------------------------------------------------------------------
news_agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
backend="auto",
timelimit="d", # Today's news only
region="us-en",
enable_search=False, # Disable general search
enable_news=True, # Enable news search only
)
],
instructions=[
"You are a news assistant that finds today's breaking news.",
"Summarize the key points and provide source links.",
],
)
# ---------------------------------------------------------------------------
# Example 6: Multi-region comparison agent
# ---------------------------------------------------------------------------
# Create agents for different regions to compare perspectives
def create_regional_agent(region: str, region_name: str) -> Agent:
"""Create a region-specific search agent."""
return Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
tools=[
WebSearchTools(
backend="auto",
timelimit="w",
region=region,
)
],
instructions=[
f"You are a search assistant for {region_name}.",
"Provide localized search results and perspectives.",
],
)
# Create regional agents
us_regional = create_regional_agent("us-en", "United States")
uk_regional = create_regional_agent("uk-en", "United Kingdom")
de_regional = create_regional_agent("de-de", "Germany")
# ---------------------------------------------------------------------------
# Run Examples
# ---------------------------------------------------------------------------
if __name__ == "__main__":
# Example 1: Time-limited search
print("\n" + "=" * 60)
print("Example 1: Weekly time-limited search")
print("=" * 60)
weekly_agent.print_response("What are the latest AI developments?", markdown=True)
# Example 2: Region-specific search (US)
print("\n" + "=" * 60)
print("Example 2: US region search")
print("=" * 60)
us_agent.print_response("What are trending tech topics?", markdown=True)
# Example 3: DuckDuckGo backend with filters
print("\n" + "=" * 60)
print("Example 3: DuckDuckGo backend with time and region filters")
print("=" * 60)
duckduckgo_agent.print_response("What is quantum computing?", markdown=True)
# Example 4: Research assistant
print("\n" + "=" * 60)
print("Example 4: Research assistant (combined configuration)")
print("=" * 60)
research_agent.print_response(
"Find recent research on large language models", markdown=True
)
# Example 5: News agent
print("\n" + "=" * 60)
print("Example 5: News-focused agent (daily news)")
print("=" * 60)
news_agent.print_response("What are today's top tech headlines?", markdown=True)
# Example 6: Regional comparison
print("\n" + "=" * 60)
print("Example 6: US regional agent")
print("=" * 60)
us_regional.print_response("What is the economic outlook?", markdown=True)Run the Example
Set up your virtual environment
uv venv --python 3.12
source .venv/bin/activateInstall dependencies
uv pip install -U agno ddgs openaiExport your OpenAI API key
export OPENAI_API_KEY="your_openai_api_key_here"Keep text-search settings on the text tool
Add enable_news=False to every WebSearchTools(...) configuration except the one used by news_agent. That keeps each configured text backend and time limit away from DDGS news search.
Run every regional comparison
After the existing us_regional.print_response(...) call, add matching uk_regional.print_response(...) and de_regional.print_response(...) calls with the same prompt and markdown=True.
Run the example
Save the code above as websearch_tools_advanced.py, then run:
python websearch_tools_advanced.pyFull source: cookbook/91_tools/websearch_tools_advanced.py