DuckDuckGo Tools - Advanced Configuration

Configure DuckDuckGoTools with timelimit, region, backend, fixed_max_results, and timeout to build week-scoped, region-localized, and news-only search agents.

Demonstrates advanced DuckDuckGoTools configuration with timelimit, region, and backend parameters for customized search behavior.

duckduckgo_tools_advanced.py
"""
DuckDuckGo Tools - Advanced Configuration
==========================================

Demonstrates advanced DuckDuckGoTools configuration with timelimit, region,
and backend parameters for customized search behavior.

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 ("api", "html", "lite")
"""

from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools

# ---------------------------------------------------------------------------
# Example 1: Time-limited search (results from past week)
# ---------------------------------------------------------------------------
# Useful for finding recent news, updates, or time-sensitive information

weekly_search_agent = Agent(
    model=OpenAIChat(id="gpt-5.6-luna"),
    tools=[
        DuckDuckGoTools(
            timelimit="w",  # Results from past week only
            enable_search=True,
            enable_news=True,
        )
    ],
    instructions=["Search for recent information from the past week."],
)

# ---------------------------------------------------------------------------
# Example 2: Region-specific search (US English results)
# ---------------------------------------------------------------------------
# Useful for localized results based on user's region

us_region_agent = Agent(
    model=OpenAIChat(id="gpt-5.6-luna"),
    tools=[
        DuckDuckGoTools(
            region="us-en",  # US English results
            enable_search=True,
            enable_news=True,
        )
    ],
    instructions=["Search for information with US-localized results."],
)

# ---------------------------------------------------------------------------
# Example 3: Different backend options
# ---------------------------------------------------------------------------
# The backend parameter controls how DuckDuckGo is queried

# API backend - uses DuckDuckGo's API
api_backend_agent = Agent(
    model=OpenAIChat(id="gpt-5.6-luna"),
    tools=[
        DuckDuckGoTools(
            backend="api",
            enable_search=True,
            enable_news=True,
        )
    ],
)

# HTML backend - parses HTML results
html_backend_agent = Agent(
    model=OpenAIChat(id="gpt-5.6-luna"),
    tools=[
        DuckDuckGoTools(
            backend="html",
            enable_search=True,
            enable_news=True,
        )
    ],
)

# Lite backend - lightweight parsing
lite_backend_agent = Agent(
    model=OpenAIChat(id="gpt-5.6-luna"),
    tools=[
        DuckDuckGoTools(
            backend="lite",
            enable_search=True,
            enable_news=True,
        )
    ],
)

# ---------------------------------------------------------------------------
# Example 4: Combined configuration - Full customization
# ---------------------------------------------------------------------------
# Combine all parameters for maximum control over search behavior

fully_configured_agent = Agent(
    model=OpenAIChat(id="gpt-5.6-luna"),
    tools=[
        DuckDuckGoTools(
            timelimit="w",  # Results from past week
            region="us-en",  # US English results
            backend="api",  # Use API backend
            enable_search=True,
            enable_news=True,
            fixed_max_results=10,  # Limit to 10 results
            timeout=15,  # 15 second timeout
        )
    ],
    instructions=[
        "You are a research assistant that finds recent US news and information.",
        "Always provide sources for your findings.",
    ],
)

# ---------------------------------------------------------------------------
# Example 5: European region search with monthly timelimit
# ---------------------------------------------------------------------------

eu_monthly_agent = Agent(
    model=OpenAIChat(id="gpt-5.6-luna"),
    tools=[
        DuckDuckGoTools(
            timelimit="m",  # Results from past month
            region="de-de",  # German results
            enable_search=True,
            enable_news=True,
        )
    ],
    instructions=["Search for information with German-localized results."],
)

# ---------------------------------------------------------------------------
# Example 6: Daily news search
# ---------------------------------------------------------------------------
# Perfect for finding breaking news and today's updates

daily_news_agent = Agent(
    model=OpenAIChat(id="gpt-5.6-luna"),
    tools=[
        DuckDuckGoTools(
            timelimit="d",  # Results from past day only
            enable_search=False,  # Disable web search
            enable_news=True,  # Enable news only
        )
    ],
    instructions=[
        "You are a news assistant that finds today's breaking news.",
        "Focus on the most recent and relevant stories.",
    ],
)

# ---------------------------------------------------------------------------
# Run Examples
# ---------------------------------------------------------------------------
if __name__ == "__main__":
    # Example 1: Weekly search
    print("\n" + "=" * 60)
    print("Example 1: Time-limited search (past week)")
    print("=" * 60)
    weekly_search_agent.print_response(
        "What are the latest developments in AI?", markdown=True
    )

    # Example 2: US region search
    print("\n" + "=" * 60)
    print("Example 2: Region-specific search (US English)")
    print("=" * 60)
    us_region_agent.print_response("What are the trending tech topics?", markdown=True)

    # Example 3: API backend
    print("\n" + "=" * 60)
    print("Example 3: API backend")
    print("=" * 60)
    api_backend_agent.print_response("What is quantum computing?", markdown=True)

    # Example 4: Fully configured agent
    print("\n" + "=" * 60)
    print("Example 4: Fully configured agent (weekly, US, API backend)")
    print("=" * 60)
    fully_configured_agent.print_response(
        "Find recent news about renewable energy in the US", markdown=True
    )

    # Example 5: European region with monthly timelimit
    print("\n" + "=" * 60)
    print("Example 5: European region (German) with monthly timelimit")
    print("=" * 60)
    eu_monthly_agent.print_response(
        "What are the latest technology trends?", markdown=True
    )

    # Example 6: Daily news
    print("\n" + "=" * 60)
    print("Example 6: Daily news search")
    print("=" * 60)
    daily_news_agent.print_response(
        "What are today's top headlines in technology?", markdown=True
    )

Current DDGS backends

Replace backend="api", backend="html", and backend="lite" with backend="duckduckgo" before running. Those older parser labels do not select the engines advertised by the current DDGS backend registry. DuckDuckGoTools defaults to DuckDuckGo but forwards an explicit backend override.

The toolkit forwards timelimit, region, and the result-count limit to DDGS. They filter a search request; verify individual source dates for time-sensitive claims. The HTML and Lite agents in the source are configured but never run.

Run the Example

Set up your virtual environment

uv venv --python 3.12
source .venv/bin/activate

Install dependencies

uv pip install -U agno ddgs openai

Export your OpenAI API key

export OPENAI_API_KEY="your_openai_api_key_here"

Run the example

Save the code above as duckduckgo_tools_advanced.py, then run:

python duckduckgo_tools_advanced.py

Full source: cookbook/91_tools/duckduckgo_tools_advanced.py