Skip to main content

Shared types and snapshot infrastructure for the KGModule SDK

Project description

Python License: Elastic-2.0 Version CI Poetry

kgmodule-utils

kgmodule-utils — Shared types and snapshot infrastructure for the KGModule SDK.

Author: Eric G. Suchanek, PhD

Flux-Frontiers, Liberty TWP, OH


Overview

kgmodule-utils is the zero-dependency foundation package for the Flux-Frontiers knowledge-graph ecosystem. It provides the canonical type abstractions and temporal snapshot infrastructure that all KGModule implementations — PyCodeKG, FTreeKG, DocKG, AgentKG — depend on.

Every KGModule shares the same NodeSpec, EdgeSpec, KGExtractor, and KGModule base classes defined here, ensuring consistent interfaces across the ecosystem. The snapshot subsystem enables temporal metric tracking, delta comparison, and pruning across git commits.


Features

  • Core type abstractionsNodeSpec, EdgeSpec, QueryResult, SnippetPack dataclasses for knowledge-graph nodes, edges, and query results
  • KGExtractor base class — Abstract interface for domain-specific extractors with extract(), node_kinds(), edge_kinds(), and coverage_metric()
  • KGModule base class — Abstract interface for knowledge-graph modules with build(), query(), pack(), stats(), and analyze()
  • Snapshot modelsSnapshot dataclass keyed by git tree hash with free-form metrics, hotspots, issues, and delta tracking
  • SnapshotManager — Capture, persist, load, list, diff, and prune snapshots with automatic deduplication and delta computation
  • SnapshotManifest — Fast-lookup index of all snapshots with format versioning
  • Zero dependencies — Stdlib-only; no external packages required at runtime

Installation

Requirements: Python ≥ 3.12, < 3.14

Standalone (pip)

pip install kgmodule-utils

Existing Poetry project

poetry add kgmodule-utils

Or declare it directly in your pyproject.toml:

[tool.poetry.dependencies]
kgmodule-utils = "^0.2.0"

Quick Start

Types — Define a KGModule

from kg_utils.types import NodeSpec, EdgeSpec, KGExtractor, KGModule

class MyExtractor(KGExtractor):
    def node_kinds(self) -> list[str]:
        return ["module", "function", "class"]

    def edge_kinds(self) -> list[str]:
        return ["CONTAINS", "CALLS", "IMPORTS"]

    def extract(self, source_root: str):
        # Yield NodeSpec and EdgeSpec objects from your domain
        yield NodeSpec(
            node_id="fn:main:hello",
            kind="function",
            name="hello",
            qualname="main.hello",
            source_path="main.py",
            docstring="Greet the user.",
        )
        yield EdgeSpec(
            source_id="mod:main",
            target_id="fn:main:hello",
            relation="CONTAINS",
        )

Snapshots — Track metrics over time

from kg_utils.snapshots import SnapshotManager

mgr = SnapshotManager(snapshots_dir=".my_kg/snapshots", package_name="my-kg")

# Capture a snapshot from current metrics
snapshot = mgr.capture(metrics={
    "total_nodes": 142,
    "total_edges": 387,
    "coverage": 0.78,
})

# Save with automatic deduplication
mgr.save_snapshot(snapshot)

# List and compare
snaps = mgr.list_snapshots(limit=5)
delta = mgr.diff_snapshots(key_a=snaps[0].key, key_b=snaps[-1].key)

API Reference

kg_utils.types

Class Description
NodeSpec Dataclass for KG nodes: node_id, kind, name, qualname, source_path, docstring
EdgeSpec Dataclass for KG edges: source_id, target_id, relation
QueryResult Container for query responses with nodes, edges, and metadata
SnippetPack Extended result container with source-code snippets
KGExtractor Abstract base class for domain extractors
KGModule Abstract base class for knowledge-graph modules

kg_utils.snapshots

Class Description
Snapshot Temporal snapshot keyed by git tree hash with free-form metrics and deltas
SnapshotManager Capture, persist, load, list, diff, and prune snapshots
SnapshotManifest Index of all snapshots with format versioning and fast lookup
PruneResult Summary of pruning operations: removed, orphaned, broken entries

Project Structure

KG_utils/
├── LICENSE
├── README.md
├── pyproject.toml
├── pytest.ini
├── src/
│   └── kg_utils/
│       ├── __init__.py
│       ├── py.typed                  # PEP 561 marker
│       ├── types/
│       │   ├── __init__.py           # Public re-exports
│       │   ├── specs.py              # NodeSpec, EdgeSpec, QueryResult, SnippetPack
│       │   ├── extractor.py          # KGExtractor ABC
│       │   └── module.py             # KGModule ABC
│       └── snapshots/
│           ├── __init__.py           # Public re-exports
│           ├── models.py             # Snapshot, SnapshotManifest, PruneResult
│           └── manager.py            # SnapshotManager
└── tests/
    ├── __init__.py
    ├── test_types.py
    └── test_snapshots.py

Development

git clone https://github.com/Flux-Frontiers/KG_utils.git
cd KG_utils
poetry install --with dev

Run the test suite:

poetry run pytest

License

Elastic License 2.0 — see LICENSE.

Free to use, modify, and distribute. You may not offer the software as a hosted or managed service to third parties. Commercial use internally is permitted.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kgmodule_utils-0.2.1.tar.gz (16.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kgmodule_utils-0.2.1-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

File details

Details for the file kgmodule_utils-0.2.1.tar.gz.

File metadata

  • Download URL: kgmodule_utils-0.2.1.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.2 CPython/3.12.13 Darwin/25.4.0

File hashes

Hashes for kgmodule_utils-0.2.1.tar.gz
Algorithm Hash digest
SHA256 c38c0f668223ff3d1b9057a393c23a31bf5362fb39f5b78f5c3933da6e3dbd44
MD5 5ffb3fed56e80a34387fcaf23a43ee5d
BLAKE2b-256 c14500b38b3ecce0176da003cf30ff8775cf1241fe6ef1f9c07e0235f5a1897f

See more details on using hashes here.

File details

Details for the file kgmodule_utils-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: kgmodule_utils-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 18.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.2 CPython/3.12.13 Darwin/25.4.0

File hashes

Hashes for kgmodule_utils-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 da44c26eb233ff107a2a57b71baad5e82a4635784c00c9f6c6d727c456f88a5e
MD5 e6a2345bc772176a0059b26842ba09b2
BLAKE2b-256 dfd7a5aad47fcba2fb75516b232260dfea18f8dec44f1087624fc56afac14b61

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page