Brime API · Docs · LangChain guide · Python SDK · Issues
LangChain meets the live web. Drop the Brime API into any LangChain agent, chain, or RAG pipeline — as three typed tools and a retriever you can plug in unchanged.
pip install langchain-brimePython 3.9+. Sync and async. Fully typed (py.typed). SecretStr API keys. Actionable agent errors via handle_tool_error. Passes the official LangChain ToolsUnitTests compliance suite.
| Class | Type | What it does |
|---|---|---|
BrimeSearch |
BaseTool |
Fast SERP search with snippets + synthesised answer. |
BrimeExtract |
BaseTool |
Any URL → clean markdown (HTML / PDF / DOCX / SPA). |
BrimeResearch |
BaseTool |
Multi-round agent research with citations. |
BrimeRetriever |
BaseRetriever |
Live-web retriever for RAG — returns LangChain Documents. |
One API key powers all four. One set of tuned defaults. No knobs to babysit.
from langchain.agents import create_agent
from langchain_brime import BrimeSearch, BrimeExtract
agent = create_agent(
model="anthropic:claude-3-5-haiku-latest",
tools=[BrimeSearch(), BrimeExtract()],
system_prompt="You are a research assistant.",
)
result = agent.invoke({
"messages": [{"role": "user", "content": "What is BM25 ranking? Cite sources."}],
})
print(result["messages"][-1].content)BrimeRetriever returns standard LangChain Documents — drop it into any retrieval chain and you're querying the live web with BM25-ranked chunks:
from langchain_brime import BrimeRetriever
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain.chat_models import init_chat_model
retriever = BrimeRetriever(k=5)
llm = init_chat_model("anthropic:claude-3-5-haiku-latest")
prompt = ChatPromptTemplate.from_template(
"Context:\n{context}\n\nQuestion: {question}\n\nAnswer with citations."
)
chain = ({"context": retriever, "question": RunnablePassthrough()} | prompt | llm)
print(chain.invoke("How does BM25 weight term frequency?").content)Each Document carries page_content (ranked chunk) and rich metadata: url, title, score, published_date, source="brime".
import asyncio
from langchain_brime import BrimeSearch
async def main():
result = await BrimeSearch().ainvoke({"query": "python async io patterns"})
print(result)
asyncio.run(main())Every tool has _arun. The retriever has _aget_relevant_documents. No surprises.
export BRIME_API_KEY="sk-brime-..."BrimeSearch() # uses BRIME_API_KEY
BrimeSearch(api_key="sk-brime-...") # explicit
BrimeSearch(base_url="https://...") # staging override (or BRIME_BASE_URL)Get a key at brime.dev — free tier: 1,000 credits/month, no card.
| Field | Default | Notes |
|---|---|---|
query |
(required) | Natural-language query |
topic |
"general" |
general · news · finance (recency hint) |
max_results |
5 | 1–20 |
time_range |
None | day · week · month · year |
Returns a markdown string with a synthesised answer plus a Sources: list.
| Field | Default | Notes |
|---|---|---|
urls |
(req.) | List of URLs (1–10) |
include_metadata |
False | Add extra metadata fields per result |
Returns markdown with a ## <url> heading per page, plus a ## Failed URLs block if any failed.
| Field | Default | Notes |
|---|---|---|
query |
(required) | Research question |
topic |
"general" |
Recency hint |
max_results |
5 | Sources per round, 1–20 |
Single tuned multi-round flow (~30–90 s) with cited synthesis.
| Field | Default | Notes |
|---|---|---|
k |
5 | Max documents (1–20) |
topic |
"general" |
Recency hint |
time_range |
None | Recency window |
domains |
None | Domain allowlist |
exclude_domains |
None | Domain denylist |
include_answer |
False | Skip the LLM answer when used purely for retrieval |
- One package, four classes. Search, extract, research, and retriever — all sharing one HTTP client (
brimeSDK). - Idempotency, handled. Auto
Idempotency-Keyforextract(Brime API requirement, easy to miss). - Async parity throughout. No partially-async surface area.
- LangChain-tested. Passes the official
ToolsUnitTestscompliance suite (args schema serialisable, async parity, no override violations).
- Python 3.9+
langchain-core≥ 1.4, < 2.0- Backed by
brimePython SDK ≥ 0.2.0 (retry, request_id, typed error hierarchy)
- Docs — docs.brime.dev
- LangChain integration guide — docs.brime.dev/sdks/langchain
- Status — brime.dev
- Issues — github.com/brime-dev/brime-langchain/issues
MIT © Brime