Skip to content

v1.6.0

Latest

Choose a tag to compare

@bradleygauthier bradleygauthier released this 10 Apr 15:41
· 4 commits to main since this release

Knowledge Graph

Embeds a full knowledge graph into qp-vault as the qp_vault.graph subpackage. Access via vault.graph on any AsyncVault or Vault instance. Works on both PostgreSQL and SQLite with zero additional dependencies.

Highlights

  • GraphEngine: Typed async CRUD for nodes, edges, mentions, traversal, merge, and scan. Every mutation fires a VaultEvent for capsule audit.
  • Dual-backend storage: PostgreSQL (pg_trgm similarity search, recursive CTE traversal) and SQLite (FTS5 search, Python BFS traversal).
  • Intelligence services: KnowledgeExtractor (LLM-based extraction), EntityResolver (three-stage dedup), EntityDetector (in-memory matching), EntityMaterializer (profile.md + manifest.json), WikilinkResolver.
  • Graph-augmented search: vault.search(query, graph_boost=True) detects entities in queries and boosts matching documents.
  • Membrane sanitization: NFKC normalization, HTML escaping, XML wrapping for LLM extraction input.
  • 10 graph EventTypes for capsule audit: ENTITY_CREATE, ENTITY_UPDATE, ENTITY_DELETE, EDGE_CREATE, EDGE_DELETE, ENTITY_MERGE, MENTION_TRACK, SCAN_START, SCAN_COMPLETE, SCAN_FAIL.

Quick start

from qp_vault import AsyncVault

vault = AsyncVault("./my-knowledge")
await vault._ensure_initialized()

alice = await vault.graph.create_node(name="Alice", entity_type="person")
acme = await vault.graph.create_node(name="Acme Corp", entity_type="company")
await vault.graph.create_edge(source_id=alice.id, target_id=acme.id, relation_type="works_at")

results = await vault.graph.search_nodes("Alice")
neighbors = await vault.graph.neighbors(alice.id, depth=2)

Security

100/100 security audit score. Input validation at every boundary: name/type/relation length caps, properties size cap (50KB), tag limits, weight bounds, null byte stripping, self-edge/self-merge rejection, SQL identifier validation on graph_schema, parameterized queries everywhere.

Testing

213 new graph tests (1048 total). Zero regressions.

Install

pip install qp-vault              # Graph included, no extra deps
pip install qp-vault[postgres]    # + PostgreSQL backend
pip install qp-vault[all]         # Everything

Full changelog

See CHANGELOG.md for the complete list of changes.