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; fixed market / freshness chosen by an admin, with market falling back to BING_AGENT_DEFAULT_MARKET |
| VertexAI (Gemini grounding) | legacy + proxy | Configurable requires_scraping |
Bing's grounding knobs are baked into the hashed Foundry agent name, so changing one provisions a new agent version.
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
Release files for unique-web-search 2026.40.0rc1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| unique_web_search-2026.40.0rc1.tar.gz | 114.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| unique_web_search-2026.40.0rc1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 288.2 kB
Release files / unique_web_search-2026.40.0rc1.tar.gz
| Download URL | unique_web_search-2026.40.0rc1.tar.gz |
|---|---|
| Size | 114.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6fda30ca7be92f1e3ce636782a7c152142ae23a131b90be515683d1fbcbcba29
|
|
BLAKE2b-256 checksum How to use checksums |
f72fd325f0b48da03fbddb801e7478b2182f1f84c13646cee17866783ceee592
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / unique_web_search-2026.40.0rc1-py3-none-any.whl
| Download URL | unique_web_search-2026.40.0rc1-py3-none-any.whl |
|---|---|
| Size | 173.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
261c6987d91915f409e2d248346a177e4d0de3e85226e9bec8aac2397a6e069b
|
|
BLAKE2b-256 checksum How to use checksums |
ae33ea125c1ee787cd0ffe4a8f3329b0e63e70c563a27048487e0e7c065f3f99
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|