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 uses proxy egress only when
FEATURE_FLAG_SEARCH_PROXY_ENABLE_CUSTOM_API_UN_26736is enabled; otherwise the legacy path reports URL-safety outcomes without blocking. - 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 | legacy + proxy | Your REST endpoint; proxy mode rejects redirects |
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
Metadata
Release files for unique-web-search 2026.44.0.dev4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| unique_web_search-2026.44.0.dev4.tar.gz | 116.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| unique_web_search-2026.44.0.dev4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 292.1 kB
Release files / unique_web_search-2026.44.0.dev4.tar.gz
| Download URL | unique_web_search-2026.44.0.dev4.tar.gz |
|---|---|
| Size | 116.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bd56d06a8828616156d8d2cbd52f76afb42506d1b3c1d6a9a682dfe70c5e39b7
|
|
BLAKE2b-256 checksum How to use checksums |
b65ca01f717a9878e8e458e9dd5407509d8491ad54dfc9784e9cdb586f22e75b
|
| 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.44.0.dev4-py3-none-any.whl
| Download URL | unique_web_search-2026.44.0.dev4-py3-none-any.whl |
|---|---|
| Size | 176.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
49db93a482fae2828558f796d668b661a14c1cb7890cd88b66f9c0c34716ed0f
|
|
BLAKE2b-256 checksum How to use checksums |
301bd4df889400a2cca5b49b7953a68f3d771ee3a6b1e4aa58fb0df4d0b28210
|
| 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}
|
Security for unique-web-search 2026.44.0.dev4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.