Catalog PyPI
Back to packageRELEASE DETAILS

0.9.1

PyPI

aiecs-kg

Enterprise knowledge graph (L2) — optional PyPI package split from AIECS

aiecsentity-linkinggraph-storeknowledge-graphrag
Published29 Jul 2026
Direct dependencies40
Transitive dependenciesNot calculated

README

Version 0.9.1 documentation

aiecs-kg

Enterprise knowledge graph (L2) for AIECS, split from the monorepo as an optional PyPI package.

Status

0.9.0 (Beta) — first non-prerelease PyPI cut (Development Status :: 4 - Beta; tag v0.9.0). Includes SPG OpenAPI/write-token work, live gates/F1a, and packaging integrity fixes. Core graph store, reasoning (heuristic + Logic DSL), builder paths, and OpenSPG ([spg]) integration are usable; PostgreSQL / Neo4j dual-store and LLM features require optional extras and caller configuration.

Not GA: treat as Beta until maintainers attest PostgreSQL, Neo4j/pg_neo4j, and SPG live paths outside default CI. Security reporting: SECURITY.md.

See docs/development_plan/archive/KNOWLEDGE_GRAPH_OPTIONAL_PACKAGING.md for the full split checklist.

CI verification scope

GitHub Actions (pip install -e ".[dev]", no external services) validates:

AreaCIRequires local / maintainer setup
In-memory graph storeYes—
SQLite backendYes—
Reasoning (Logic DSL, orchestrator)Yes—
Structured builder importYes—
LLM injection (mock clients)YesReal 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 integrationsNo (skip)pip install -r requirements/optional-aiecs.txt (or pip install aiecs)
SPG / OpenSPG ([spg])Unit + mock onlypip install aiecs-kg[spg] + compose; see docs/spg/README.md

Release gate (tag v*): unit tests + deptry + build + twine check + artifact smoke (LICENSE + package data) + verify-install (Logic DSL from wheel). Does not run Postgres/Neo4j/SPG live integration (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]"

# OpenSPG / aiecs-spg HTTP client + Profile B bridge
pip install -e ".[dev,spg]"

Optional extras (pyproject.toml)

ExtraInstallsLLM / AIECS
(core)Graph store, reasoning heuristicsNo LLM — pass llm_client= / embedding_client= yourself
postgres / sqlite / neo4j / graphStorage backends (graph = neo4j + postgres)No LLM
reasoningLark Logic DSL parserNo LLM
builderStructured data import (pandas, etc.)No LLM; GraphBuilder accepts injected embedding_client=
fusionRedis-backed fusion helpersNo LLM
spgurllib3/six/dateutil for OpenSPG HTTP SDKclient/spg/*, KG_STORAGE_MODE=spg; see docs/spg/README.md
allUnion of runtime extras above (not dev / release)No LLM
dev / releaseTest/lint tools; build/twineMaintainers

Heavy optional stacks stay out of PyPI extras (keeps lock/resolve light). Install from the repo:

pip install -r requirements/optional-aiecs.txt   # aiecs integrations helpers
pip install -r requirements/optional-nlp.txt     # spaCy NER
pip install -r requirements/optional-rerank.txt  # CrossEncoder rerank

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)

ModePostgreSQLNeo4jUse case
pg_only (default)authority + vector—Zero Neo4j regression; Python graph fallback
pg_neo4jauthority + pgvector RAGtraverse + GDS projectionRecommended production embed path
neo4j_only—single storePOC / 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: pip install -r requirements/optional-rerank.txt.

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)

OpenSPG / SPG mode (KG_STORAGE_MODE=spg)

Install: pip install aiecs-kg[spg]. Set KG_STORAGE_MODE=spg plus:

VariableRequiredDescription
KG_SPG_HOSTYesServer URL (e.g. http://127.0.0.1:8887)
KG_SPG_PROJECT_IDYesOpenSPG project id
KG_SPG_WRITE_TOKENYesWrite-graph token (request body only — never log)
KG_SPG_NAMESPACERecommendedSchema/type namespace
KG_SPG_WRITE_TOKEN_NEXTOptionalDual-token rotation
KG_REASONING_MODEOptionalDefault orchestrator mode
KG_SPG_WRITE_GRAPH_THRESHOLDOptionalBulk vs write_graph threshold (default 500)
KG_SPG_BRIDGE_ENABLEDOptionalProfile B deployment flag

Profile A — GraphBuilder / ReasoningOrchestrator → client/spg HTTP (no kag wheel).

Profile B — Pemja → integrations/spg_bridge.SpgServerBridge → same L3 paths. F1a (UI DAG → Neo4jSinkWriter) is documented only; F1b (bridge → HTTP) is the Repo B contract. See docs/spg/README.md.

Project layout

src/aiecs_kg/
├── domain/          # Entity, Relation, schema models
├── application/     # search, reasoning, builder, fusion, …
├── client/spg/      # OpenSPG HTTP SDK (L2, optional [spg])
├── integrations/    # spg_bridge (Profile B), aiecs helpers
├── 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]"
pip install -r requirements/optional-rerank.txt
pip install -r requirements/optional-nlp.txt
python -m spacy download en_core_web_sm
# aiecs:prefer requirements/optional-aiecs.txt; if resolve conflicts, editable install
pip install -r requirements/optional-aiecs.txt
# or: 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/spg/ -q          # SPG mock + skipped live without KG_SPG_HOST
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).

Runtime extras are declared in pyproject.toml; heavy optional stacks use requirements/optional-*.txt. CI installs pip install -e ".[dev]" (+ optional-dev-heavy as needed). See .cursor/rules/dependency-maintenance.mdc.

pip install -e ".[dev]"
pre-commit install
pre-commit run --all-files

License

Apache-2.0 — see LICENSE.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 68

Native requirements
40 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
pydantic
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
pydantic<3.0.0,>=2.13.4runtime
pydantic-settings
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
pydantic-settings<3.0.0,>=2.14.2runtime
python-dotenv
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
python-dotenv<2.0.0,>=1.2.2runtime
numpy
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
numpy<3.0.0,>=2.4.6runtime
networkx
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
networkx<4.0.0,>=3.0runtime
cachetools
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
cachetools<8.0.0,>=7.1.6runtime
typing-extensions
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
typing-extensions<5.0.0,>=4.16.0runtime
pyyaml
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
pyyaml<7.0.0,>=6.0.3runtime
tqdm
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
tqdm<5.0.0,>=4.66.0runtime
asyncpg
Environment
{
  "extras": "",
  "marker": "extra == \"postgres\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
asyncpg<1.0.0,>=0.31.0; extra == "postgres"runtime
aiosqlite
Environment
{
  "extras": "",
  "marker": "extra == \"sqlite\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
aiosqlite<1.0.0,>=0.20.0; extra == "sqlite"runtime
neo4j
Environment
{
  "extras": "",
  "marker": "extra == \"neo4j\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
neo4j<6.0.0,>=5.25.0; extra == "neo4j"runtime
asyncpg
Environment
{
  "extras": "",
  "marker": "extra == \"graph\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
asyncpg<1.0.0,>=0.31.0; extra == "graph"runtime
neo4j
Environment
{
  "extras": "",
  "marker": "extra == \"graph\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
neo4j<6.0.0,>=5.25.0; extra == "graph"runtime
lark-parser
Environment
{
  "extras": "",
  "marker": "extra == \"reasoning\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
lark-parser<0.13.0,>=0.12.0; extra == "reasoning"runtime
colorama
Environment
{
  "extras": "",
  "marker": "extra == \"reasoning\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
colorama<1.0.0,>=0.4.6; extra == "reasoning"runtime
python-Levenshtein
Environment
{
  "extras": "",
  "marker": "extra == \"reasoning\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
python-Levenshtein<1.0.0,>=0.25.0; extra == "reasoning"runtime
pandas
Environment
{
  "extras": "",
  "marker": "extra == \"builder\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
pandas<3.0.0,>=2.2.0; extra == "builder"runtime
openpyxl
Environment
{
  "extras": "",
  "marker": "extra == \"builder\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
openpyxl<4.0.0,>=3.1.0; extra == "builder"runtime
pyreadstat
Environment
{
  "extras": "",
  "marker": "extra == \"builder\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
pyreadstat<2.0.0,>=1.2.0; extra == "builder"runtime
psutil
Environment
{
  "extras": "",
  "marker": "extra == \"builder\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
psutil<8.0.0,>=7.0.0; extra == "builder"runtime
redis
Environment
{
  "extras": "",
  "marker": "extra == \"fusion\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
redis<9.0.0,>=8.0.1; extra == "fusion"runtime
urllib3
Environment
{
  "extras": "",
  "marker": "extra == \"spg\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
urllib3<3.0.0,>=2.0.0; extra == "spg"runtime
six
Environment
{
  "extras": "",
  "marker": "extra == \"spg\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
six>=1.16.0; extra == "spg"runtime
python-dateutil
Environment
{
  "extras": "",
  "marker": "extra == \"spg\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
python-dateutil>=2.8.0; extra == "spg"runtime
certifi
Environment
{
  "extras": "",
  "marker": "extra == \"spg\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
certifi>=2024.0.0; extra == "spg"runtime
pytest
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
pytest<9.0.0,>=8.4.2; extra == "dev"runtime
pytest-asyncio
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
pytest-asyncio<2.0.0,>=1.2.0; extra == "dev"runtime
pytest-cov
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
pytest-cov<8.0.0,>=7.0.0; extra == "dev"runtime
pytest-timeout
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
pytest-timeout<3.0.0,>=2.4.0; extra == "dev"runtime
mypy
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
mypy<2.0.0,>=1.18.2; extra == "dev"runtime
flake8
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
flake8<8.0.0,>=7.3.0; extra == "dev"runtime
black
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
black<26.0.0,>=25.1.0; extra == "dev"runtime
pre-commit
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
pre-commit<5.0.0,>=4.5.1; extra == "dev"runtime
deptry
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
deptry<0.24.0,>=0.23.0; extra == "dev"runtime
types-PyYAML
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
types-PyYAML>=6.0.0; extra == "dev"runtime
types-cachetools
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
types-cachetools>=7.0.0.20260201; extra == "dev"runtime
types-six
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
types-six>=1.16.0; extra == "dev"runtime
types-python-dateutil
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
types-python-dateutil>=2.8.0; extra == "dev"runtime
asyncpg
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
asyncpg<1.0.0,>=0.31.0; extra == "dev"runtime
aiosqlite
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
aiosqlite<1.0.0,>=0.20.0; extra == "dev"runtime
lark-parser
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
lark-parser<0.13.0,>=0.12.0; extra == "dev"runtime
colorama
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
colorama<1.0.0,>=0.4.6; extra == "dev"runtime
python-Levenshtein
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
python-Levenshtein<1.0.0,>=0.25.0; extra == "dev"runtime
redis
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
redis<9.0.0,>=8.0.1; extra == "dev"runtime
neo4j
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
neo4j<6.0.0,>=5.25.0; extra == "dev"runtime
pandas
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
pandas<3.0.0,>=2.2.0; extra == "dev"runtime
openpyxl
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
openpyxl<4.0.0,>=3.1.0; extra == "dev"runtime
pyreadstat
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
pyreadstat<2.0.0,>=1.2.0; extra == "dev"runtime
psutil
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
psutil<8.0.0,>=7.0.0; extra == "dev"runtime
asyncpg
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
asyncpg<1.0.0,>=0.31.0; extra == "all"runtime
aiosqlite
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
aiosqlite<1.0.0,>=0.20.0; extra == "all"runtime
neo4j
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
neo4j<6.0.0,>=5.25.0; extra == "all"runtime
lark-parser
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
lark-parser<0.13.0,>=0.12.0; extra == "all"runtime
colorama
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
colorama<1.0.0,>=0.4.6; extra == "all"runtime
python-Levenshtein
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
python-Levenshtein<1.0.0,>=0.25.0; extra == "all"runtime
pandas
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
pandas<3.0.0,>=2.2.0; extra == "all"runtime
openpyxl
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
openpyxl<4.0.0,>=3.1.0; extra == "all"runtime
pyreadstat
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
pyreadstat<2.0.0,>=1.2.0; extra == "all"runtime
psutil
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
psutil<8.0.0,>=7.0.0; extra == "all"runtime
redis
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
redis<9.0.0,>=8.0.1; extra == "all"runtime
urllib3
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
urllib3<3.0.0,>=2.0.0; extra == "all"runtime
six
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
six>=1.16.0; extra == "all"runtime
python-dateutil
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
python-dateutil>=2.8.0; extra == "all"runtime
certifi
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
certifi>=2024.0.0; extra == "all"runtime
build
Environment
{
  "extras": "",
  "marker": "extra == \"release\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
build<2.0.0,>=1.2.0; extra == "release"runtime
twine
Environment
{
  "extras": "",
  "marker": "extra == \"release\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
twine<7.0.0,>=5.1.0; extra == "release"runtime
packaging
Environment
{
  "extras": "",
  "marker": "extra == \"release\"",
  "requires_python": "<3.13,>=3.11",
  "evaluation": "NOT_EVALUATED"
}
packaging<26.0.0,>=24.0; extra == "release"runtime

Distribution files

2 collected
aiecs_kg-0.9.1-py3-none-any.whl

bdist_wheel · 743.82 KB · Python py3

Source file
aiecs_kg-0.9.1.tar.gz

sdist · 446.61 KB · Python source

Source file

Repository

PENDING
howmany-zeta/ai-execute-services-knowledgegraph

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 21 Oct, 10:37 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:0ef98c051a977edc9518c88fb92cb9e34fed47dfa5268e585ef4e5a8da1a622d

Other collected versions

View all collected versions →