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.2.tar.gz (18.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.2-py3-none-any.whl (21.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: kgmodule_utils-0.2.2.tar.gz
  • Upload date:
  • Size: 18.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.2.tar.gz
Algorithm Hash digest
SHA256 186d6a080bfd290d2cbbb11801c0f6e84a7c9bb55be23e900ee354711534ce7b
MD5 14984efe4900a8bbeb8e6b8db0a71e29
BLAKE2b-256 ca21586b1d02bc43e364a818ea56a11027854ea1cdde88bd6ff3b3314b3f7485

See more details on using hashes here.

File details

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

File metadata

  • Download URL: kgmodule_utils-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 21.3 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c7e3076ed233ec1bd041a2a8716817a49a573c9855b255c305e8be74192d4fd5
MD5 c813f1a8bad6f98f243f8c4ea212e144
BLAKE2b-256 04b9f8045f044b06cda634785b5d2bc311471d366efb8fe568b143b98f03d39f

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