cloro-haystack
Haystack components for cloro.
| Component | cloro endpoint | Output | Credits per run |
|---|---|---|---|
CloroWebSearch |
POST /v1/monitor/google |
documents and links from Google organic results. With include_ai_overview=True, the Google AI Overview is the first Document. |
5, or 7 with the AI Overview |
CloroAIAnswer |
POST /v1/monitor/chatgpt, /aimode or /gemini |
replies (the answer as Markdown), documents and links (the cited sources) |
ChatGPT 7, AI Mode 6, Gemini 6 |
Installation
pip install cloro-haystack
Get an API key at dashboard.cloro.dev.
The free plan includes 500 credits each month. Set the key as CLORO_API_KEY, or pass
api_key=Secret.from_token(...).
Usage
CloroWebSearch
from haystack_integrations.components.websearch.cloro import CloroWebSearch
websearch = CloroWebSearch(top_k=5, country="US", include_ai_overview=True)
result = websearch.run(query="What is retrieval-augmented generation?")
for doc in result["documents"]:
print(doc.meta.get("title"), doc.meta.get("link"))
Each organic result is a Document. Its content is the Google snippet and its meta has title,
link and position. The AI Overview Document has meta["source"] == "google_ai_overview" and the
URLs it cites in meta["links"]. Results with an empty link or a Google redirect link are skipped.
Parameters:
api_key: defaults to theCLORO_API_KEYenvironment variable.top_k: maximum number of organic results. Defaults to 10. One request returns one page of Google results (about 10). Setsearch_params={"pages": 2}for more (2 credits for each extra page).country: ISO 3166-1 alpha-2 country code. Defaults to"US".allowed_domains: domains to limit the search to, sent assite:filters.include_ai_overview: request the Google AI Overview. Defaults toFalse.search_params: other request fields, for exampledevice,location,hlorpages.timeout: request timeout in seconds. Defaults to 60.
CloroAIAnswer
from haystack_integrations.components.websearch.cloro import CloroAIAnswer
ai_answer = CloroAIAnswer(engine="aimode") # "chatgpt", "aimode" or "gemini"
result = ai_answer.run(query="What is retrieval-augmented generation?")
print(result["replies"][0])
print(result["links"])
replies has one string: the answer as Markdown. documents has one Document for each source that
the answer cites, with title, link and position in meta. An answer can take 15 to 60 seconds,
so the default timeout is 180 seconds.
In a pipeline
The output names of CloroAIAnswer match AnswerBuilder:
from haystack import Pipeline
from haystack.components.builders import AnswerBuilder
from haystack_integrations.components.websearch.cloro import CloroAIAnswer
pipe = Pipeline()
pipe.add_component("ai", CloroAIAnswer(engine="chatgpt"))
pipe.add_component("answer", AnswerBuilder())
pipe.connect("ai.replies", "answer.replies")
pipe.connect("ai.documents", "answer.documents")
query = "Which vector databases support hybrid search?"
result = pipe.run({"ai": {"query": query}, "answer": {"query": query}})
print(result["answer"]["answers"][0].data)
CloroWebSearch connects like the other Haystack web search components, for example to a
ChatPromptBuilder through documents, or to a fetcher through links.
Both components have run_async for AsyncPipeline.
Errors
A cloro error response raises CloroError with the cloro error code, for example
INVALID_API_KEY_FORMAT (401), INSUFFICIENT_CREDITS (403) or CONCURRENCY_LIMIT_EXCEEDED (429).
A timeout raises TimeoutError.
Development
uv sync
uv run pytest
uv run ruff check . && uv run ruff format --check .
uv run mypy src
uv build
The tests use httpx.MockTransport and do not call the cloro API.
License
MIT
Metadata
Release files for cloro-haystack 0.1.0
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 | Actions |
|---|---|---|---|---|
| cloro_haystack-0.1.0.tar.gz | 13.6 kB | With provenance | Details for cloro_haystack-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| cloro_haystack-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for cloro_haystack-0.1.0-py3-none-any.whl |
Total release size: 24.0 kB
Release files / cloro_haystack-0.1.0.tar.gz
| Download URL | cloro_haystack-0.1.0.tar.gz |
|---|---|
| Size | 13.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
38ede1c1b058d2c26f99e9b564d402b38836e1bab52717aec7dc9168abfc7148
|
|
BLAKE2b-256 checksum How to use checksums |
69925d65bf049da96835442348e2b406c82f438a8940de0ee872264cedda2636
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logRelease files / cloro_haystack-0.1.0-py3-none-any.whl
| Download URL | cloro_haystack-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0f2b0f8018d37b765105458f73f1bc8d9ebfd2664b3a62e67223f5c99fe3691c
|
|
BLAKE2b-256 checksum How to use checksums |
abeec05d7eb3d64851b7f47fdf012d86735ca0d181bbe429970539e95625031d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logSecurity for cloro-haystack 0.1.0
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.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for cloro_haystack-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logA 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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.