A Haystack component for web search via the Brave Search API
Project description
haystack-brave-search
A Haystack component for web search using the Brave Search API.
Installation
pip install haystack-brave-search
Requirements
- Python 3.12+
- A
Brave Search API key
Usage
Standalone
from haystack_brave_search import BraveWebSearch
import os
# Set the API key using an environment variable
brave_api_key = os.environ["BRAVE_API_KEY"]
# Parameters set at initialisation are used as defaults for every call
searcher = BraveWebSearch(api_key=brave_api_key, top_k=5, country="BE", language="en")
result = searcher.run(query="Haystack AI framework")
# Any parameter can be overridden at run time
result = searcher.run(query="Haystack AI framework", top_k=3, country="US", language="en")
for doc in result["documents"]:
print(doc.meta["title"])
print(doc.meta["url"])
print(doc.content)
In a Haystack Pipeline
from haystack import Pipeline
from haystack.components.builders import PromptBuilder
from haystack_brave_search import BraveWebSearch
prompt_template = """
Given the following search results:
{% for doc in documents %}
- {{ doc.meta.title }}: {{ doc.content }}
{% endfor %}
Answer the question: {{ query }}
"""
pipe = Pipeline()
pipe.add_component("search", BraveWebSearch(api_key="your-api-key", top_k=5))
pipe.add_component("prompt", PromptBuilder(template=prompt_template))
pipe.connect("search.documents", "prompt.documents")
result = pipe.run({
"search": {"query": "What is RAG?"},
"prompt": {"query": "What is RAG?"}
})
# Override search parameters at run time without changing the component
result = pipe.run({
"search": {"query": "What is RAG?", "top_k": 3, "country": "BE", "language": "en"},
"prompt": {"query": "What is RAG?"}
})
print(result["prompt"]["prompt"])
With AsyncPipeline
from haystack import AsyncPipeline
from haystack_brave_search import BraveWebSearch
pipe = AsyncPipeline()
pipe.add_component("search", BraveWebSearch(api_key="your-api-key"))
Using a Proxy
Pass a proxy_url to the constructor to route requests through a proxy. When set, api_key is used as the Bearer token and the default X-Subscription-Token header is removed.
searcher = BraveWebSearch(api_key="your-token", proxy_url="https://your-proxy-url.com")
Parameters
Initialisation (__init__)
| Parameter | Type | Default | Description |
|---|---|---|---|
api_key |
str |
required | Your Brave Search API key (also used as Bearer token when proxy_url is set) |
proxy_url |
str |
None |
Optional proxy URL. When set, overrides the Brave API base URL and uses api_key as the Bearer token |
top_k |
int |
5 |
Default number of results to return |
country |
str |
"ALL" |
Default country code to localise results (e.g. "BE", "GR") |
language |
str |
"en" |
Default language code using ISO 639-1 (e.g. "en", "el") |
Run time (run)
| Parameter | Type | Default | Description |
|---|---|---|---|
query |
str |
required | Search query |
top_k |
int |
None |
Overrides the initialisation value for this call only |
country |
str |
None |
Overrides the initialisation value for this call only |
language |
str |
None |
Overrides the initialisation value for this call only |
Run-time values take precedence over the defaults set at initialisation. Omitting a run-time parameter falls back to the initialisation value.
Output
The run() method returns a dict with a documents key containing a list of Haystack Document objects:
-
document.content— snippet/description of the result -
document.meta["title"]— page title -
document.meta["url"]— page URL
Environment Variable
You can avoid hardcoding the API key by using an environment variable:
import os
from haystack_brave_search import BraveWebSearch
searcher = BraveWebSearch(api_key=os.environ["BRAVE_API_KEY"])
License
MIT
Project details
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 haystack_brave_search-0.1.5.tar.gz.
File metadata
- Download URL: haystack_brave_search-0.1.5.tar.gz
- Upload date:
- Size: 3.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Pop!_OS","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0617eed2d106a1077e894739efc5917bd89620d38d6eae06e59a6356425a63b1
|
|
| MD5 |
d30dd3e38ea3e38acea99d529324768a
|
|
| BLAKE2b-256 |
6cd9766174840494854640b8fdd175c231341bb52bbee92cbf651b121a437243
|
File details
Details for the file haystack_brave_search-0.1.5-py3-none-any.whl.
File metadata
- Download URL: haystack_brave_search-0.1.5-py3-none-any.whl
- Upload date:
- Size: 4.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Pop!_OS","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6148af6bf2b20e3181511178a9a0070f84d37d3ff15945c3e8bdbe6b61a1358f
|
|
| MD5 |
0e6b8c417e39acee2147368af4bb3ee3
|
|
| BLAKE2b-256 |
a469a05787e934151d53a7bf3dc58f7ad8384d0649118cfb594e5ff5be448baf
|