Skip to main content

NeuroWeave

NeuroWeave

Real-time knowledge graph memory for agentic AI platforms.

Agents that learn. Memory that compounds. Privacy that's provable.

Installation • Quickstart • Documentation • Architecture • Changelog

Python 3.11+ Docs License PyPI


What This Is

NeuroWeave is an async Python library that transforms AI conversations into a live knowledge graph. As a user chats with an AI agent, NeuroWeave extracts entities and relationships from each message, materializes them into a graph, and lets the agent query that graph to recall facts, preferences, and connections.

from neuroweave import NeuroWeave

async with NeuroWeave(llm_provider="anthropic") as nw:
    # Agent feeds user messages — graph builds automatically
    await nw.process("My wife Lena and I are going to Tokyo in March")
    await nw.process("She loves sushi but I prefer ramen")

    # Query for relevant context
    result = await nw.query("what does my wife like?")
    # → nodes: [Lena, sushi]  edges: [Lena --prefers--> sushi]

Open http://localhost:8787 to watch the graph build in real time:

graph LR
    User((User)) -->|married_to| Lena((Lena))
    User -->|traveling_to| Tokyo((Tokyo))
    Lena -->|traveling_to| Tokyo
    User -->|named| Alex((Alex))
    User -->|prefers| ramen((ramen))
    Lena -->|prefers| sushi((sushi))
    User -->|experienced_with| Python((Python))
    User -->|has_children| children((children))

    style User fill:#6c63ff,color:#fff
    style Lena fill:#6c63ff,color:#fff
    style Alex fill:#6c63ff,color:#fff
    style Tokyo fill:#6c63ff,color:#fff
    style children fill:#6c63ff,color:#fff
    style Python fill:#4ade80,color:#000
    style sushi fill:#4ade80,color:#000
    style ramen fill:#4ade80,color:#000

Installation

pip install neuroweave-python

Or install from source:

git clone https://github.com/alexh-scrt/neuroweave.git
cd neuroweave
make install    # pip install -e ".[dev]"

Quickstart

As a Library (recommended)

import asyncio
from neuroweave import NeuroWeave

async def main():
    async with NeuroWeave(
        llm_provider="anthropic",
        llm_api_key="sk-ant-...",
    ) as nw:
        # Write path — extract knowledge, update the graph
        result = await nw.process("My wife Lena loves Malbec")
        print(f"Extracted {result.entity_count} entities")

        # Read path — structured query
        result = await nw.query(["Lena"], relations=["prefers"], max_hops=1)
        print(result.node_names())  # ['Lena', 'Malbec']

        # Read path — natural language (LLM translates to graph query)
        result = await nw.query("what does my wife like?")

        # Combined — process + query in one call (primary agent integration)
        context = await nw.get_context("remind me about dinner")
        print(context.relevant.node_names())

asyncio.run(main())

Mock Mode (no API key needed)

async with NeuroWeave(llm_provider="mock") as nw:
    ...

As a CLI

# With real LLM
export NEUROWEAVE_LLM_API_KEY=sk-ant-...
neuroweave

# With mock LLM (no API key needed)
NEUROWEAVE_LLM_PROVIDER=mock neuroweave

Demo Agent

python examples/demo_agent.py              # Canned demo (mock, no API key)
python examples/demo_agent.py -i           # Interactive mode
python examples/demo_agent.py --provider anthropic  # With real LLM

API Overview

Three Methods

Method Purpose Returns
process(message) Extract knowledge, update graph ProcessResult
query(...) Query the graph (structured or NL) QueryResult
get_context(message) Process + query combined ContextResult

Event Subscription

from neuroweave import EventType

async def on_new_entity(event):
    print(f"Discovered: {event.data['name']}")

nw.subscribe(on_new_entity, event_types={EventType.NODE_ADDED})

Visualization

nw = NeuroWeave(enable_visualization=True, server_port=8787)
# Graph visible at http://127.0.0.1:8787 with WebSocket live updates

Full documentation: neuroweave.readthedocs.io


Configuration

Three-tier system: field defaults → YAML → environment variables (highest priority).

# config/default.yaml
llm_provider: "anthropic"
llm_model: "claude-haiku-4-5-20251001"
graph_backend: "memory"       # or "neo4j" for persistent storage
server_host: "127.0.0.1"
server_port: 8787
log_level: "INFO"
log_format: "console"

# Neo4j settings (only when graph_backend: "neo4j")
neo4j_uri: "neo4j://localhost:7687"
neo4j_user: "neo4j"
neo4j_password: ""
neo4j_database: "neo4j"
# Environment variable overrides
NEUROWEAVE_LLM_PROVIDER=mock
NEUROWEAVE_LLM_API_KEY=sk-ant-...
NEUROWEAVE_LOG_FORMAT=json

Project Structure

neuroweave/
├── src/neuroweave/
│   ├── __init__.py              # Public exports: NeuroWeave, ProcessResult, ...
│   ├── api.py                   # NeuroWeave facade class (the public API)
│   ├── config.py                # Pydantic settings: YAML + env vars
│   ├── events.py                # EventBus async pub/sub
│   ├── logging.py               # structlog: console or JSON output
│   ├── main.py                  # CLI entry point
│   ├── extraction/
│   │   ├── llm_client.py        # LLMClient protocol + Mock + Anthropic
│   │   └── pipeline.py          # Message → ExtractionResult
│   ├── graph/
│   │   ├── store.py             # NetworkX graph + event emission
│   │   ├── backends/
│   │   │   ├── base.py          # AbstractGraphStore ABC (all async)
│   │   │   ├── memory.py        # MemoryGraphStore (NetworkX, async wrapper)
│   │   │   └── neo4j.py         # Neo4jGraphStore (persistent, native async)
│   │   ├── ingest.py            # ExtractionResult → graph nodes and edges
│   │   ├── query.py             # Structured query engine
│   │   └── nl_query.py          # NL → structured query via LLM
│   └── server/
│       └── app.py               # FastAPI: REST + WebSocket + Cytoscape.js
├── tests/                       # ~400 tests across 22 files
├── examples/
│   └── demo_agent.py            # Self-contained demo agent
├── docs/                        # MkDocs documentation (readthedocs.io)
├── config/default.yaml
├── static/index.html            # Cytoscape.js visualizer
├── pyproject.toml
├── mkdocs.yml
├── .readthedocs.yaml
├── LICENSE                      # Apache 2.0
└── CHANGELOG.md

Testing

make test           # All ~400 tests
make test-cov       # With coverage report
make lint           # Ruff linting
make format         # Auto-format
Test File Tests Coverage
test_smoke.py 2 Package imports, wiring
test_config.py 9 Defaults, YAML, env overrides
test_logging.py 8 Console/JSON output, filtering
test_graph.py 30 Node/edge CRUD, events, factories
test_extraction.py 30 JSON repair, mock LLM, resilience
test_ingest.py 13 Dedup, type mapping, growth
test_server.py 10 REST, WebSocket, health
test_e2e.py 22 Full POC proof: 5-msg → graph
test_live_updates.py 12 Event emission, server reflects graph
test_query.py 37 Structured queries, hop traversal
test_nl_query.py 38 NL query planner, parsing, fallback
test_events.py 33 EventBus lifecycle, timeout, errors
test_api.py 36 Facade lifecycle, process, query
test_integration.py 28 Full end-to-end with corpus
unit/test_neo4j_async.py 14 Async interface verification
unit/test_schema_bootstrap.py 7 Neo4j schema constraints
integration/test_async_store_in_event_loop.py 2 Canary: no event loop conflict

Dependencies

Core: anthropic ≥0.42, networkx ≥3.2, fastapi ≥0.115, structlog ≥25.5, pydantic-settings ≥2.7, uvicorn ≥0.34, websockets ≥16.0, pyyaml ≥6.0

Dev: pytest, pytest-asyncio, pytest-cov, httpx, ruff

Docs: mkdocs-material, mkdocstrings


License

Apache 2.0


NeuroWeave — Agents that learn. Memory that compounds. Privacy that's provable.

Metadata

Release files for neuroweave-python 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for neuroweave-python 0.2.1
File Size Uploaded
neuroweave_python-0.2.1.tar.gz 47.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for neuroweave-python 0.2.1
File Interpreter ABI Platform
neuroweave_python-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 100.9 kB

Release files / neuroweave_python-0.2.1.tar.gz

Download URL neuroweave_python-0.2.1.tar.gz
Size 47.7 kB
Tags Source
SHA-256 checksum
How to use checksums
a43b4f7ed11886b0a9d45832bf45fd2fa216756cb62962044d5fab0f17a2d6b2
BLAKE2b-256 checksum
How to use checksums
475789a96f79b022c565375ecced0d3928a91bc13118e76e4b325469e5d0b235
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release files / neuroweave_python-0.2.1-py3-none-any.whl

Download URL neuroweave_python-0.2.1-py3-none-any.whl
Size 53.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3f23884ded8af96baec1bf98416849df4704984c2f3c395a1c220c4e5ca26404
BLAKE2b-256 checksum
How to use checksums
ff6d5fbab0000fca781b19177669477e091a6f2630f9141f760480fd8159a1da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page