operonx-kb
Knowledge base and document intelligence on operonx: files become versioned documents whose every character has an address (version, span → page, bbox), indexed for retrieval, and answers cite spans that were checked against the text they quote.
uv sync --extra pdf --extra faiss # core + PDF text layer + FAISS index
PYTHONPATH=../operonx-wt/feat-kb-upstream uv run pytest -q # until operonx PR #74 merges
import operonx
from operonx_kb import CollectionSpec, DenseIndexSpec, KnowledgeBase
from operonx_kb.model.collection import LexicalIndexSpec
operonx.bootstrap(resources="resources.yaml") # kb_catalog:, kb_blob:, kb_lexical:, embedding:, vector_store:, llm:
kb = KnowledgeBase()
kb.create_collection("handbook", CollectionSpec(
dense=DenseIndexSpec(embedder="e5", store="vector_store:kb",
passage_template="passage: {text}", query_template="query: {text}"),
lexical=LexicalIndexSpec(), # SQLite FTS5 or Postgres FTS
filterable={"dept": "keyword"},
))
await kb.add("handbook", "policy.pdf", key="policy.pdf", tags=["hr"], acl=["team:hr"],
metadata={"dept": "hr"})
found = await kb.search("handbook", "how many days of leave", mode="hybrid",
filter={"acl_any": ["team:hr"]}, reranker="ce")
answer = await kb.ask("handbook", "how many days of leave", "assistant")
answer["citations"] # each: quote, canonical span, pages, bboxes; unverified ones are in answer["dropped"]
operonx-kb query handbook "how many days of leave" --mode hybrid --tag hr
operonx-kb query wiki "who directed the film that won in 1999" # created with --graph: mode auto sends relation questions to the graph (docs/bench/router.md)
operonx-kb query handbook "how many days of leave" --answer assistant
operonx-kb eval handbook datasets/handbook.jsonl --mode hybrid
Use it inside your flows
A search is an operonx graph, so it is one step of your own flow — traced with it, no service in
between (tests/graphs/test_in_a_flow.py):
from operonx.kb.graphs import search # module level: the collection's settings are read per run
@graph
def answer_flow(question, catalog):
found = search(query=question, collection="handbook", filter=None, k=5, mode="hybrid",
catalog=catalog)
reply = cite(hits=found["hits"]) # your own op
START >> found >> reply >> END
engine = Operon(answer_flow, params={"question": None, "catalog": None})
out = await engine.run(inputs={"question": "...", "catalog": "kb_catalog:main"})
For an agent (operonx-agents installed beside it), kb_tools gives a read-only kb_search /
kb_read toolset. The scope comes from your code or the run's context — the model only sends a
query — and kb_read checks it again (tests/graphs/test_agent_tools.py):
from operonx.kb.tools import kb_tools
tools = kb_tools(kb, "handbook", scope=lambda ctx: {"acl_any": ctx.deps.principals})
agent = Agent(name="hr", model=Model("assistant"), tools=[tools])
Studio's Knowledge tab reads a knowledge base through its admin API (extra admin), served as
one of the project's services:
import operonx
from operonx.app import Service, asgi
from operonx_kb.admin import kb_admin_app
operonx.bootstrap() # operonx serve loads no resources for an asgi service
Service("kb_admin", asgi("/kb", port=8021), app=kb_admin_app(llm="assistant"))
Outstanding work (K5 visual retrieval needs a GPU): BACKLOG.md. Design and phase gates: PLAN.md; measured gates: docs/bench. Contributor and agent rules: AGENTS.md.
Metadata
Release files for operonx-kb 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| operonx_kb-0.2.2.tar.gz | 198.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| operonx_kb-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 456.1 kB
Release files / operonx_kb-0.2.2.tar.gz
| Download URL | operonx_kb-0.2.2.tar.gz |
|---|---|
| Size | 198.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fd66537be85b6652f2b1abdc82bdef354c30e226d76b27ce324043f75c2e1c85
|
|
BLAKE2b-256 checksum How to use checksums |
248a351d882c99ea1ff9677f852459a0c06fe9cdbf113fb263b6703afb543c68
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / operonx_kb-0.2.2-py3-none-any.whl
| Download URL | operonx_kb-0.2.2-py3-none-any.whl |
|---|---|
| Size | 257.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4d91270fc050a70b39c41b58249804635fdaa047a3c6f0b2fce1dce072ea7222
|
|
BLAKE2b-256 checksum How to use checksums |
f4382fad8aad174a47acf16e4cf380a568846cff7856e165765eb5494458d507
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|