2026-02-20 23:23:32 -08:00
|
|
|
# NOTE: This file is maintained for convenience only.
|
|
|
|
|
# The canonical dependency list is in pyproject.toml.
|
|
|
|
|
# Preferred install: pip install -e ".[all]"
|
|
|
|
|
|
2026-01-23 12:26:53 +00:00
|
|
|
# Core dependencies
|
2025-08-09 09:52:07 -07:00
|
|
|
openai
|
2025-10-01 09:54:17 +00:00
|
|
|
python-dotenv
|
2025-10-08 02:38:04 +00:00
|
|
|
fire
|
2026-01-08 00:59:51 -08:00
|
|
|
httpx
|
2026-01-14 14:02:59 +00:00
|
|
|
rich
|
2026-01-23 12:26:53 +00:00
|
|
|
tenacity
|
2026-01-31 06:30:48 +00:00
|
|
|
prompt_toolkit
|
2026-02-07 00:05:04 +00:00
|
|
|
pyyaml
|
|
|
|
|
requests
|
|
|
|
|
jinja2
|
|
|
|
|
pydantic>=2.0
|
2026-02-20 23:23:32 -08:00
|
|
|
PyJWT[crypto]
|
2026-01-23 12:26:53 +00:00
|
|
|
|
|
|
|
|
# Web tools
|
|
|
|
|
firecrawl-py
|
feat(web): add Parallel as alternative web search/extract backend (#1696)
* feat(web): add Parallel as alternative web search/extract backend
Adds Parallel (parallel.ai) as a drop-in alternative to Firecrawl for
web_search and web_extract tools using the official parallel-web SDK.
- Backend selection via WEB_SEARCH_BACKEND env var (auto/parallel/firecrawl)
- Auto mode prefers Firecrawl when both keys present; Parallel when sole backend
- web_crawl remains Firecrawl-only with clear error when unavailable
- Lazy SDK imports, interrupt support, singleton clients
- 16 new unit tests for backend selection and client config
Co-authored-by: s-jag <s-jag@users.noreply.github.com>
* fix: add PARALLEL_API_KEY to config registry and fix web_crawl policy tests
Follow-up for Parallel backend integration:
- Add PARALLEL_API_KEY to OPTIONAL_ENV_VARS (hermes doctor, env blocklist)
- Add to set_config_value api_keys list (hermes config set)
- Add to doctor keys display
- Fix 2 web_crawl policy tests that didn't set FIRECRAWL_API_KEY
(needed now that web_crawl has a Firecrawl availability guard)
* refactor: explicit backend selection via hermes tools, not auto-detect
Replace the auto-detect backend selection with explicit user choice:
- hermes tools saves WEB_SEARCH_BACKEND to .env when user picks a provider
- _get_backend() reads the explicit choice first
- Fallback only for manual/legacy config (uses whichever key is present)
- _is_provider_active() shows [active] for the selected web backend
- Updated tests, docs, and .env.example to remove 'auto' mode language
* refactor: use config.yaml for web backend, not env var
Match the TTS/browser pattern — web.backend is stored in config.yaml
(set by hermes tools), not as a WEB_SEARCH_BACKEND env var.
- _load_web_config() reads web: section from config.yaml
- _get_backend() reads web.backend from config, falls back to key detection
- _configure_provider() saves to config dict (saved to config.yaml)
- _is_provider_active() reads from config dict
- Removed WEB_SEARCH_BACKEND from .env.example, set_config_value, docs
- Updated all tests to mock _load_web_config instead of env vars
---------
Co-authored-by: s-jag <s-jag@users.noreply.github.com>
2026-03-17 04:02:02 -07:00
|
|
|
parallel-web>=0.4.2
|
2026-01-23 12:26:53 +00:00
|
|
|
|
|
|
|
|
# Image generation
|
|
|
|
|
fal-client
|
|
|
|
|
|
2026-02-12 10:05:08 -08:00
|
|
|
# Text-to-speech (Edge TTS is free, no API key needed)
|
|
|
|
|
edge-tts
|
|
|
|
|
|
2026-02-02 08:26:42 -08:00
|
|
|
# Optional: For cron expression parsing (cronjob scheduling)
|
2026-02-02 19:01:51 -08:00
|
|
|
croniter
|
|
|
|
|
|
|
|
|
|
# Optional: For messaging platform integrations (gateway)
|
2026-02-03 07:02:59 -08:00
|
|
|
python-telegram-bot>=20.0
|
|
|
|
|
discord.py>=2.0
|
2026-02-07 00:05:04 +00:00
|
|
|
aiohttp>=3.9.0
|