FabricPC
State-of-the-art predictive coding, made easy.
FabricPC is an easy-to-use, high-performance open-source Python library for building and training predictive coding networks. It is designed to get researchers from idea to running experiment as fast as possible, eliminating algorithm boilerplate. A single directed edge between nodes is all that's needed to define a connection. Local derivatives are built in, following graph topology. The framework handles inference and learning dynamics automatically for whatever you write in a node's forward() method.
Built on JAX for GPU and multi-GPU acceleration with local (node-level) automatic differentiation.
What It Does
FabricPC supports arbitrary graph topologies: feedforward, recurrent, skip connections, and cyclic architectures. Heterogeneous components such as linear, convolutional, and pooling nodes, transformer blocks, and Storkey-Hopfield associative memory coexist within the same energy-minimization graph. The same graph topology can be trained by predictive coding (train_pcn) or by backpropagation (train_backprop), so controlled PC-vs-backprop comparisons reuse one model definition instead of two. See examples/PC_backprop_compare.py.
Internally, everything is organized around three abstractions: nodes (state and computation), edges (connections between nodes), and updates (inference and learning algorithms).
Installation
Python 3.11–3.13. Install into a virtual environment, not the system Python. Create and activate the environment, then one command installs FabricPC, its optional dependencies, and a version-matched JAX backend — pick the line for your hardware:
python3 -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -U "fabricpc[all,cuda13]" # GPU, CUDA 13 (NVIDIA driver ≥580)
pip install -U "fabricpc[all,cuda12]" # GPU, CUDA 12
pip install -U "fabricpc[all]" # CPU only
pip install fabricpc # core library only, CPU
nvidia-smi reports the CUDA version your driver supports.
Platform: GPU acceleration requires Linux (x86_64 or aarch64) — JAX publishes CUDA wheels for Linux only. On native Windows or macOS, install CPU-only; for GPU on Windows use WSL2 (JAX marks WSL2 GPU support experimental). The optional Aim experiment tracker in [viz]/[all] is Linux/macOS only and supports Python ≤3.12; on Windows or Python 3.13 it is skipped automatically and everything else installs normally.
See the installation guide for details.
From source (contributors)
git clone https://github.com/trueagi-io/FabricPC.git
cd FabricPC
python3 -m venv .venv && source .venv/bin/activate
pip install -U -e ".[all,dev]" # add a backend extra for GPU: ".[all,dev,cuda12]"
# Install pre-commit hooks for code quality
pre-commit install
# Run an example
python examples/mnist_demo.py
Build a Model
Define the graph. Initialize the parameters. Start experimenting.
import jax
from fabricpc.nodes import Linear
from fabricpc.core.topology import Edge
from fabricpc.graph_assembly import TaskMap, graph
from fabricpc.graph_initialization import initialize_params
from fabricpc.core.inference import InferenceSGD
from fabricpc import setup_jax
setup_jax()
layer1 = Linear(shape=(784,), name="input")
layer2 = Linear(shape=(256,), name="hidden")
layer3 = Linear(shape=(10,), name="output")
structure = graph(
nodes=[layer1, layer2, layer3],
edges=[Edge(source=layer1, target=layer2.slot("in")),
Edge(source=layer2, target=layer3.slot("in"))],
task_map=TaskMap(x=layer1, y=layer3),
inference=InferenceSGD(eta_infer=0.05, infer_steps=20),
)
rng_key = jax.random.PRNGKey(0)
params = initialize_params(structure, rng_key)
Demos
The examples folder includes working demonstrations across image classification, sequence modeling, depth scaling (examples/scaling/), associative memory, and architectural probes. Start with mnist_demo.py (over 98% accuracy on MNIST) and explore from there:
mnist_conv_demo.py— convolutional MNIST classifier withConvNodeandMaxPoolresnet18_cifar10_demo.py— ResNet-18 as a PC graph, with global average poolingtransformer_v2_demo.py— character- or BPE-level language modeling with text generationtransformer_tuning.py— two-phase hyperparameter search minimizing validation perplexity
Documentation
User guides, API reference, and tutorials live in docs/user_guides. Development plans and technical design documents are in docs/dev_plans.
Extending FabricPC
Custom Nodes
Create custom node types by subclassing NodeBase. Implement the get_slots(), initialize_params(), and forward() methods. Nodes have a single output. Slots define incoming connections and are referenced in edges when building the graph.
See docs/user_guides/06_custom_nodes.md for the node contract and a Conv2D teaching example (the production node is fabricpc.nodes.ConvNode).
Contributing
Contributions are welcome! Please open issues or pull requests on the GitHub repository.
- Develop on a branch using the convention
username/your_feature_name. - Demos must match baseline results, or explain any divergence.
- The test suite must pass.
- Write unit tests and docstrings for new code.
- Use the pre-commit hooks for PEP8 style and code quality.
- Rebase before opening PR.
This is a research-first project.
- APIs may change frequently until the v1.0 release.
- Any breaking changes are documented in the changelog.
Team
FabricPC is actively maintained by SingularityNET as part of the Artificial Superintelligence Alliance. Project lead: Dr. Matthew Behrend.
License
This project is licensed under the MIT License.
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 fabricpc-0.4.0.tar.gz.
File metadata
- Download URL: fabricpc-0.4.0.tar.gz
- Upload date:
- Size: 193.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c511631cc4d6bcf263558beca778211d16864563f1180cfc88ef32439e39fc8d
|
|
| MD5 |
09df08305e35bc859cb81785bf7d9e82
|
|
| BLAKE2b-256 |
c89b4f5b907178c74c1c2298a051a93b0a98b2f47c55b12a8b1d2913df3fc41e
|
Provenance
The following attestation bundles were made for fabricpc-0.4.0.tar.gz:
Publisher:
publish.yml on trueagi-io/FabricPC
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fabricpc-0.4.0.tar.gz -
Subject digest:
c511631cc4d6bcf263558beca778211d16864563f1180cfc88ef32439e39fc8d - Sigstore transparency entry: 2527339935
- Sigstore integration time:
-
Permalink:
trueagi-io/FabricPC@138941ef5763ab202c7df07879d3f21678e6cc0a -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/trueagi-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@138941ef5763ab202c7df07879d3f21678e6cc0a -
Trigger Event:
release
-
Statement type:
File details
Details for the file fabricpc-0.4.0-py3-none-any.whl.
File metadata
- Download URL: fabricpc-0.4.0-py3-none-any.whl
- Upload date:
- Size: 153.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3b90ca479aad3a6c88cbaf1dd620cf26a11414636b2259bb0bd317d9b973e13
|
|
| MD5 |
65902ad307c14500688c44286acb6ab4
|
|
| BLAKE2b-256 |
4514a83685ea20c6418cb732a9975463710ccd50ea4b14f90a0dfd2336f856bb
|
Provenance
The following attestation bundles were made for fabricpc-0.4.0-py3-none-any.whl:
Publisher:
publish.yml on trueagi-io/FabricPC
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fabricpc-0.4.0-py3-none-any.whl -
Subject digest:
a3b90ca479aad3a6c88cbaf1dd620cf26a11414636b2259bb0bd317d9b973e13 - Sigstore transparency entry: 2527339981
- Sigstore integration time:
-
Permalink:
trueagi-io/FabricPC@138941ef5763ab202c7df07879d3f21678e6cc0a -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/trueagi-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@138941ef5763ab202c7df07879d3f21678e6cc0a -
Trigger Event:
release
-
Statement type: