This release is a pre-release and may not be stable for production use.
Unique Web Search
Configurable web search tool for Unique assistants: search the web, read pages, and return citation-ready content chunks.
Search Proxy (recommended)
Outbound web access should go through Unique Search Proxy (connectors/unique_search_proxy/). When SEARCH_PROXY_BASE_URL is set, search and crawl calls use unique-search-proxy-sdk; credentials and provider egress stay on the proxy pod.
| Mode | When | Behaviour |
|---|---|---|
| Proxy (recommended) | SEARCH_PROXY_BASE_URL set |
_proxy_search / _proxy_crawl via the SDK |
| Legacy | URL unset | Direct provider calls from this process (_legacy_search / _legacy_crawl) |
- New standard engines (Brave, Perplexity) are proxy-only — legacy raises.
- Custom API always runs locally (never routed through the proxy).
- Future provider work targets Search Proxy only; legacy is preserved for migrated engines.
Packages involved: unique-search-proxy-core (schemas), unique-search-proxy-sdk (HTTP), unique-search-proxy (server). System overview: connectors/unique_search_proxy/README.md.
Architecture
Search engine kinds
Standard search
Query → normalised results (URL / title / snippet / optional content). Optional page crawl via the configured crawler.
| Engine | Proxy | Notes |
|---|---|---|
| legacy + proxy | Requires scraping by default | |
| Brave | proxy-only | Rich snippets; ExposableParam knobs |
| Perplexity | proxy-only | Content extraction knobs; ExposableParam |
| Custom API | always local | Your REST endpoint |
Standard engines that live in proxy-core use ExposableParam (expose + value) for optional provider knobs. See Search Engines README.
Agent search (grounding)
An upstream AI agent / grounded model searches and returns opaque text that this tool parses into WebSearchResults.
| Engine | Proxy | Notes |
|---|---|---|
| Bing (Azure AI Foundry grounding) | legacy + proxy | Configurable requires_scraping |
| VertexAI (Gemini grounding) | legacy + proxy | Configurable requires_scraping |
Agent engines do not use ExposableParam.
Web crawlers (page readers)
| Crawler | Auth | Notes |
|---|---|---|
| Basic | none | HTTP + content-type toggles; tool-local url_blocked_patterns (legacy) |
| Tavily | TAVILY_API_KEY |
Extract API |
| Jina | JINA_API_KEY |
Reader API |
| Firecrawl | FIRECRAWL_API_KEY |
Batch scrape |
No Crawl4AI. Crawler configs have no exposable LLM knobs.
Execution modes
| Mode | Status | Behaviour |
|---|---|---|
| V1 | Stable | Refine query → search → crawl → process |
| V2 | Stable | Parallel plan steps (search / read URL) |
| V3 | Experimental | Agent loop: snippet search vs on-demand read_urls |
Proxy vs legacy is transparent to executors.
Detailed subsystem docs
Configuration
SEARCH_PROXY_BASE_URL— enables the Search Proxy client- Provider API keys (on the proxy pod when proxy is enabled; otherwise on assistants-core for legacy)
- Search / crawler / content-processing settings via
WebSearchConfig
Dependency management (uv.lock + min/latest testing)
This package is a library and uses uv for dependency management.
We run tests additionally with minimal dependencies to ensure that the listed ranges are valid. NOTE: We use lowest-direct, not lowest. Lowest attempts to use the lowest possible dependency versions transitively causing issues if a dependency has incorrect metadata. Example:
- google-cloud-aiplatform says it works with shapely<3.0.0.
- The lowest resolver assumes 1.0 which needs python 2 -> breaks Therefore we use lowest-direct which only sets our direct dependencies to lowest. However, this only correctly verifies our min dependencies if our code correctly lists all the required dependencies and never imports a transitive dependency. We therefore use deptry to ensure we don't use transitive dependencies and that we have no unused dependencies.
Test locally
- Latest deps and deptry:
cd tool_packages/unique_web_search
uv sync
uv run pytest
uv run deptry
- Min deps:
cd tool_packages/unique_web_search
uv venv
uv pip install -e . --resolution=lowest-direct
uv export --only-group dev --no-hashes | uv pip install -r -
uv run --no-sync pytest
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file unique_web_search-2026.36.0.dev1.tar.gz.
File metadata
- Download URL: unique_web_search-2026.36.0.dev1.tar.gz
- Upload date:
- Size: 113.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6cef51ef012617f6a30c858e0e5cd09bee0991e2ac0df6f40146ef92d43a254e
|
|
| MD5 |
57f7464a55119db3b96ccd9395b72654
|
|
| BLAKE2b-256 |
1b03d6750a0d75b21dba0df2aac5713b67805baed3601c46cb4f10622a253ec6
|
File details
Details for the file unique_web_search-2026.36.0.dev1-py3-none-any.whl.
File metadata
- Download URL: unique_web_search-2026.36.0.dev1-py3-none-any.whl
- Upload date:
- Size: 173.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83c3aaa20013e7a4717a6630e81ee44f90ce7338894d37bf10fab20cc70eabee
|
|
| MD5 |
776a17403fc7cadbed4a43b010c5b5b0
|
|
| BLAKE2b-256 |
859cfe8325610cda4614e4ec908b42004a03147454f9e541fb0d465925ae7c96
|