Skip to content

feat: add Tavily web search as configurable alternative to Exa#240

Open
tavily-integrations wants to merge 1 commit intoPanniantong:mainfrom
Tavily-FDE:feat/tavily-migration/exa-to-tavily-parallel
Open

feat: add Tavily web search as configurable alternative to Exa#240
tavily-integrations wants to merge 1 commit intoPanniantong:mainfrom
Tavily-FDE:feat/tavily-migration/exa-to-tavily-parallel

Conversation

@tavily-integrations
Copy link
Copy Markdown

Summary

  • Added Tavily as a Tier-2 (API-key required) web search channel that runs in parallel with the existing free/zero-config Exa integration
  • Tavily is additive — Exa remains untouched as the default search path
  • The doctor command now surfaces both search channels independently

Files Changed

  • agent_reach/channels/tavily_search.py (new) — TavilySearchChannel implementing the BaseChannel contract; validates tavily-python install and TAVILY_API_KEY presence
  • agent_reach/channels/__init__.py — Import and register TavilySearchChannel in ALL_CHANNELS
  • agent_reach/config.py — Add 'tavily_search': ['tavily_api_key'] to FEATURE_REQUIREMENTS
  • agent_reach/channels/reddit.py — Expand backends list to include Exa and Tavily; update offline message to mention alternatives
  • pyproject.toml — Add tavily-python>=0.3 as optional dep (new search extra, also added to all)
  • agent_reach/guides/setup-tavily.md (new) — Setup guide for obtaining and configuring a Tavily API key

Dependency Changes

  • Added tavily-python>=0.3 to [project.optional-dependencies] (search and all extras)

Environment Variable Changes

  • Added TAVILY_API_KEY — read via Config.get('tavily_api_key') with uppercase env var fallback

Notes for Reviewers

  • One pre-existing test failure in test_config.py::test_get_configured_features caused by GITHUB_TOKEN being set in CI environment — not related to this change
  • All 77 other tests pass

🤖 Generated with Claude Code

Automated Review

  • Passed after 1 attempt(s)
  • Final review: The Tavily parallel channel implementation is correct, well-scoped, and consistent with codebase patterns. The new TavilySearchChannel follows the same structure as ExaSearchChannel (check-only, no search()/read() implementation, which is by design for this "glue layer" project). All required files are updated: channel module, registry, config feature requirements, pyproject.toml optional deps, and a setup guide. No regressions to existing functionality. Two minor issues found.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant