Source-agnostic search/indexing kernel: domain-agnostic content ingestion, hybrid vector+keyword+graph search, pluggable embedding/LLM/reranker providers.
Project description
andnp-searchkernel
andnp-searchkernel is a source-agnostic Python library for building hybrid
keyword, vector, and graph search systems. Applications map their native data
to canonical Record values, choose the storage and provider adapters they
need, and keep source-specific lifecycle logic outside the kernel.
The current release is 0.6.0. It supports canonical record search,
checkpointed record ingestion, optional local/Postgres/FAISS/provider
integrations, and bounded federation across compatible search sources. The
API is still evolving before the first stable major release.
Install
The core package supports Python 3.13 and newer:
pip install andnp-searchkernel
Install optional integrations only when you need them:
pip install "andnp-searchkernel[faiss]"
pip install "andnp-searchkernel[pgvector]"
pip install "andnp-searchkernel[pgvector-psycopg3]"
pip install "andnp-searchkernel[huggingface]"
pip install "andnp-searchkernel[ollama]"
pip install "andnp-searchkernel[markdown]"
First local search
The local composition helper creates durable SQLite-backed stores. This small example uses a deterministic provider so it can run without downloading a model; replace it with a real provider for semantic retrieval.
import asyncio
from datetime import UTC, datetime
from pathlib import Path
from searchkernel import Record, build_local_record_kernel
class DemoEmbeddingProvider:
model_name = "demo"
dim = 2
def embed(self, texts: list[str]) -> list[list[float]]:
return [[1.0, 0.0] for _ in texts]
async def main() -> None:
timestamp = datetime.now(UTC)
composition = build_local_record_kernel(
Path("records.db"),
embedding_provider=DemoEmbeddingProvider(),
)
record = Record(
workspace_id="demo",
source_kind="notes",
source_id="welcome",
title="Welcome",
body="Canonical records can be searched locally.",
created_at=timestamp,
updated_at=timestamp,
)
composition.keyword_store.index([record])
outcome = await composition.kernel.search("canonical records", limit=5)
for result in outcome.results:
print(result.record.title, result.score)
asyncio.run(main())
The result is a RecordSearchOutcome. Each result retains the complete
workspace/source identity and search provenance; degraded execution is
reported through outcome.failures and outcome.diagnostics.
Documentation
Start with the documentation map to choose the right guide:
- Getting started — install the package and build a first local index.
- Core concepts — records, identity, ingestion, querying, stores, providers, and readiness.
- Federated search — combine local or HTTP search sources with bounded concurrency and explicit partial-result diagnostics.
- Performance and retrieval roadmap — developer-facing validation evidence, constraints, and future work.
Optional integrations
The core import surface does not require optional providers or backends. The
available extras are faiss, pgvector, pgvector-psycopg3, huggingface,
ollama, and markdown. See the getting-started guide
for the selection rule and the federation guide
for the HTTP source adapter.
Validation and releases
CI runs Ruff, Pyrefly, import-linter, the safe test suite, supported Python
versions, and selected optional-import checks. Pgvector integration tests need
Docker or SEARCHKERNEL_PG_DSN; real-embedding tests are outside the default
offline gate. The performance roadmap records what those checks do and do not
prove.
Merges to main with release-worthy Conventional Commits are released by
the repository workflows. The package and runtime __version__ are checked
against each other in CI and before semantic release.
License
MIT. See LICENSE.
Project details
Release history Release notifications | RSS feed
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 andnp_searchkernel-0.9.0.tar.gz.
File metadata
- Download URL: andnp_searchkernel-0.9.0.tar.gz
- Upload date:
- Size: 469.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d5a20ca3dbc3d1286b57ed951156df94d4e353c6b9d1505aaec07b7e59fd5111
|
|
| MD5 |
1eee3f61cb178838980edd72d8713201
|
|
| BLAKE2b-256 |
b672654f120ae6f879369a215d2c2a777c7e0a17415c14a050956004907e0ebd
|
Provenance
The following attestation bundles were made for andnp_searchkernel-0.9.0.tar.gz:
Publisher:
publish.yml on andnp/andnp-searchkernel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
andnp_searchkernel-0.9.0.tar.gz -
Subject digest:
d5a20ca3dbc3d1286b57ed951156df94d4e353c6b9d1505aaec07b7e59fd5111 - Sigstore transparency entry: 2332363453
- Sigstore integration time:
-
Permalink:
andnp/andnp-searchkernel@f4282619b160be8f878b08034483b2ea350977fc -
Branch / Tag:
refs/tags/v0.9.0 - Owner: https://github.com/andnp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f4282619b160be8f878b08034483b2ea350977fc -
Trigger Event:
push
-
Statement type:
File details
Details for the file andnp_searchkernel-0.9.0-py3-none-any.whl.
File metadata
- Download URL: andnp_searchkernel-0.9.0-py3-none-any.whl
- Upload date:
- Size: 223.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6c7ed92732d9b1f8d1965d430a2aeab437471e038708224ae8325a1625ea689
|
|
| MD5 |
927846bb6f2c0d3a43bc014194ae7586
|
|
| BLAKE2b-256 |
686f9d4b3c2909b6628618e2027eeead76c6fd5f663f7820f748cbd9bfa277cd
|
Provenance
The following attestation bundles were made for andnp_searchkernel-0.9.0-py3-none-any.whl:
Publisher:
publish.yml on andnp/andnp-searchkernel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
andnp_searchkernel-0.9.0-py3-none-any.whl -
Subject digest:
c6c7ed92732d9b1f8d1965d430a2aeab437471e038708224ae8325a1625ea689 - Sigstore transparency entry: 2332363507
- Sigstore integration time:
-
Permalink:
andnp/andnp-searchkernel@f4282619b160be8f878b08034483b2ea350977fc -
Branch / Tag:
refs/tags/v0.9.0 - Owner: https://github.com/andnp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f4282619b160be8f878b08034483b2ea350977fc -
Trigger Event:
push
-
Statement type: