Enterprise knowledge graph (L2) — optional PyPI package split from AIECS
Project description
aiecs-kg
Enterprise knowledge graph (L2) for AIECS, split from the monorepo as an optional PyPI package.
Status
Alpha 0.9.0a1 — first public PyPI release (Development Status :: 3 - Alpha). Core graph store, reasoning (heuristic + Logic DSL), and builder paths are usable; PostgreSQL / Neo4j dual-store and LLM features require optional extras and caller configuration.
See temporal_kg_memory/KNOWLEDGE_GRAPH_OPTIONAL_PACKAGING.md for the full split checklist.
CI verification scope
GitHub Actions (pip install -e ".[dev]", no external services) validates:
| Area | CI | Requires local / maintainer setup |
|---|---|---|
| In-memory graph store | Yes | — |
| SQLite backend | Yes | — |
| Reasoning (Logic DSL, orchestrator) | Yes | — |
| Structured builder import | Yes | — |
| LLM injection (mock clients) | Yes | Real LLM keys: manual / nightly |
PostgreSQL ([postgres]) |
No (skip) | KG_POSTGRES_URL + .env.test |
Neo4j / pg_neo4j / GDS ([graph]) |
No (skip) | KG_NEO4J_URI + system Neo4j 5.26+ |
AIECS integrations ([aiecs]) |
No (skip) | pip install aiecs-kg[aiecs] |
Release gate (tag v*): unit tests + deptry + build + twine check (see scripts/README.md).
Install
# Core (in-memory graph store)
pip install -e .
# With backends
pip install -e ".[postgres,sqlite,reasoning]"
# Neo4j graph compute + PostgreSQL dual-store (Phase NG)
pip install -e ".[graph]" # neo4j + postgres extras
# or: pip install -e ".[neo4j,postgres]"
# Development
pip install -e ".[dev,sqlite]"
Optional extras
| Extra | Installs | LLM / AIECS |
|---|---|---|
| (core) | Graph store, reasoning heuristics | No LLM — pass llm_client= / embedding_client= yourself |
reasoning |
Lark Logic DSL parser | No LLM |
builder |
Structured data import (pandas, etc.) | No LLM; GraphBuilder accepts injected embedding_client= |
aiecs |
Declares compatible aiecs version |
Optional helpers in aiecs_kg.integrations.aiecs only (not core imports) |
For LLM usage patterns see LLM integration and LLM_CLIENT_INJECTION_PLAN.md §7.
Deprecated factory methods (GraphBuilder.from_config, LLMEntityExtractor.from_config) remain for compatibility but do not resolve AIECS clients in core — use explicit injection or aiecs_kg.integrations.aiecs.
Storage modes (KG_STORAGE_MODE)
| Mode | PostgreSQL | Neo4j | Use case |
|---|---|---|---|
pg_only (default) |
authority + vector | — | Zero Neo4j regression; Python graph fallback |
pg_neo4j |
authority + pgvector RAG | traverse + GDS projection | Recommended production embed path |
neo4j_only |
— | single store | POC / graph-only dev |
Design: AIECS_KG_NEO4J_PG_DUAL_STORE_DESIGN.md · ADR: ADR-004
pg_neo4j quick example
export KG_STORAGE_MODE=pg_neo4j
export KG_STORAGE_BACKEND=postgresql
export KG_POSTGRES_URL=postgresql://user:pass@localhost:5432/aiecs_knowledge_graph
export KG_NEO4J_URI=bolt://localhost:7687
export KG_NEO4J_USER=neo4j
export KG_NEO4J_PASSWORD=your-password
export KG_NEO4J_DATABASE=aiecs_graph
from aiecs_kg import create_graph_store, create_graph_algorithm_service
store = create_graph_store() # CompositeGraphStore when pg_neo4j
await store.initialize()
algo = create_graph_algorithm_service(graph_store=store)
scores = await algo.pagerank(seed_entity_ids=["entity-a"], top_k=10)
See .env.example for all KG_* variables.
Quick start
from aiecs_kg import create_graph_store, Entity
store = create_graph_store() # KG_STORAGE_BACKEND=inmemory (default)
await store.initialize()
entity = Entity(id="e1", entity_type="Person", properties={"name": "Alice"})
await store.add_entity(entity)
Reasoning (Phase R0–R2)
Prefer ReasoningOrchestrator over ReasoningEngine for NL, Logic DSL, and hybrid pipelines:
import asyncio
from aiecs_kg import create_reasoning_orchestrator, ReasoningOrchestrator
from aiecs_kg.application.reasoning import ReasoningPipelineConfig
async def main():
orchestrator = create_reasoning_orchestrator() # or ReasoningOrchestrator(store, ...)
result = await orchestrator.query(
"Find all people older than 30",
mode="hybrid", # nl | logic_dsl | hybrid
context={"start_entity_id": "alice"},
)
print(result.answer, result.evidence_count)
asyncio.run(main())
Install Logic DSL support: pip install -e ".[reasoning]". Optional rerank extra: pip install -e ".[rerank]".
LLM integration
pip install aiecs-kg does not install or import AIECS. LLM-powered features (entity/relation extraction, NL→DSL, QueryPlan, embeddings) require a caller-provided client via constructor or factory parameters (llm_client=, embedding_client=).
from aiecs_kg import create_reasoning_orchestrator
from aiecs_kg.ports.llm_client import LLMMessage # use this, not aiecs.llm.LLMMessage
# Heuristic / retrieval-only — no LLM required
orchestrator = create_reasoning_orchestrator()
# With an injected client (AIECS resolve_llm_client, OpenAI SDK wrapper, etc.)
orchestrator = create_reasoning_orchestrator(llm_client=my_client)
All generate_text messages in core code use aiecs_kg.ports.llm_client.LLMMessage. Clients must implement at least generate_text and/or get_embeddings (see LLMClientProtocol). For a minimal OpenAI SDK example without AIECS, see LLM_CLIENT_INJECTION_PLAN.md §7.4.
Optional AIECS convenience helpers (when both packages are installed) live under aiecs_kg.integrations.aiecs — not exported from core __init__.py.
Configuration
All settings use KG_* environment variables. See .env.example.
export KG_STORAGE_BACKEND=inmemory # inmemory | sqlite | postgresql
export KG_ENABLED=true # consumed by AIECS core (not this package)
Project layout
src/aiecs_kg/
├── domain/ # Entity, Relation, schema models
├── application/ # search, reasoning, builder, fusion, …
├── storage/ # GraphStore backends (in-memory, SQLite, Postgres)
├── config.py # KGSettings / get_kg_settings()
└── factory.py # create_graph_store()
Tests
# 1) 依赖(见 .env.test 注释)
pip install -e ".[dev,rerank]"
python -m spacy download en_core_web_sm
# aiecs:若 PyPI 与 dev 解析冲突,改本地可编辑安装(勿与 [aiecs] extra 同时 pip 解析)
pip install -e /path/to/python-middleware-dev
# 2) 环境
set -a && source .env.test && set +a # KG_USE_AIECS_STUB=false + XAI_API_KEY 等
pytest tests/unit -q
pytest tests/integration/neo4j_graph/ -q # 需系统 Neo4j 5.26.x + GDS(ADR-004)
Pre-commit
Same hook set as AI-Execute-Services: license header, black, flake8, mypy, and deptry (no AIECS-specific schema hooks).
Dependencies are declared only in pyproject.toml. CI installs pip install -e ".[dev]" with no ad-hoc packages. See .cursor/rules/dependency-maintenance.mdc.
pip install -e ".[dev]"
pre-commit install
pre-commit run --all-files
License
Apache-2.0 — see License.txt.
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 aiecs_kg-0.9.0a1.tar.gz.
File metadata
- Download URL: aiecs_kg-0.9.0a1.tar.gz
- Upload date:
- Size: 330.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87671c1e975597b008c6d4403d93234342ddc81a6f47652c27c8be166f9d1319
|
|
| MD5 |
23863e1ee6808814316df09620bd8ac9
|
|
| BLAKE2b-256 |
1fd7e5ef59db945c5857cac48689abe3bfa3e8d25c148623db64039b077947de
|
Provenance
The following attestation bundles were made for aiecs_kg-0.9.0a1.tar.gz:
Publisher:
publish-pypi.yml on Howmany-Zeta/AI-Execute-Services-KnowledgeGraph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aiecs_kg-0.9.0a1.tar.gz -
Subject digest:
87671c1e975597b008c6d4403d93234342ddc81a6f47652c27c8be166f9d1319 - Sigstore transparency entry: 1738342440
- Sigstore integration time:
-
Permalink:
Howmany-Zeta/AI-Execute-Services-KnowledgeGraph@e9c4328adde5e76af7b15f069c23c6953fa7fc30 -
Branch / Tag:
refs/tags/v0.9.0a1 - Owner: https://github.com/Howmany-Zeta
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@e9c4328adde5e76af7b15f069c23c6953fa7fc30 -
Trigger Event:
push
-
Statement type:
File details
Details for the file aiecs_kg-0.9.0a1-py3-none-any.whl.
File metadata
- Download URL: aiecs_kg-0.9.0a1-py3-none-any.whl
- Upload date:
- Size: 420.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c03911ac18023faaa8fdcafb59737300f2559756864cad4ea0eb8f9530f45f4
|
|
| MD5 |
7502e0694ebf8b1328999923f0c6cbf9
|
|
| BLAKE2b-256 |
43db674936139517007479cea711a059241d27c82d29cb7a9ac2adb1aff911f2
|
Provenance
The following attestation bundles were made for aiecs_kg-0.9.0a1-py3-none-any.whl:
Publisher:
publish-pypi.yml on Howmany-Zeta/AI-Execute-Services-KnowledgeGraph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aiecs_kg-0.9.0a1-py3-none-any.whl -
Subject digest:
5c03911ac18023faaa8fdcafb59737300f2559756864cad4ea0eb8f9530f45f4 - Sigstore transparency entry: 1738342453
- Sigstore integration time:
-
Permalink:
Howmany-Zeta/AI-Execute-Services-KnowledgeGraph@e9c4328adde5e76af7b15f069c23c6953fa7fc30 -
Branch / Tag:
refs/tags/v0.9.0a1 - Owner: https://github.com/Howmany-Zeta
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@e9c4328adde5e76af7b15f069c23c6953fa7fc30 -
Trigger Event:
push
-
Statement type: