Synapse defines a standard protocol and toolbox for designing and interacting with a wide array of neural engineering applications and hardware devices. It does this by packaging a gRPC-based control plane API and a ZeroMQ streaming API (Taps) into a flexible and accessible Python client library, with C++, and Typescript libraries coming soon.
This allows you to deploy custom neural engineering tools into standard packages called Synapse Apps, which can be combined with standard Synapse nodes to create powerful on-device process flows, called Signal chains, without needing to interface with gRPC or TCP directly.
Taps expand the signal chain architecture by creating a flexible topologically distributed framework where each node output has a dedicated message queue. This removes the rigid IO constraints imposed by a typical signal chain configuration, giving you access to data from all node, and from within your deployed application. This pub-sub scheme allows non-linear or branching node configurations while preserving data streaming access from each node output.
Synapse transforms on-device compute from a single-purpose linear processing engine with fixed data sources and sinks into a flexible platform where custom neural engineering apps can be deployed with polymorphic IO structures. This let's you create and deploy custom tools for any neural engineering applications into an extensible signal chain where every node can be an output, and data from any processing stage is accessible.
A toy soft device implementation for development is available in the python Synapse GitHub repo: sciencecorp/synapse-python
Getting Started
Python
Before installing the Synapse Python client library, you will need:
- Python version 3.9 or later.
- pip version version 23 or later.
- Docker*
*Docker is required for packaging and deploying Synapse Apps, but is no required for initial installation.
You can install the official Synapse Python client library using:
pip install science-synapse
which includes the synapsectl
utility:
$ synapsectl --help
usage: synapsectl [-h] [--uri URI] [--version] [--verbose]
{discover,info,query,start,stop,configure,logs,read,plot,file,taps,deploy,build} ...
Synapse Device Manager
options:
-h, --help show this help message and exit
--uri URI, -u URI The device identifier to connect to. Can either be the IP address or name
--version show program's version number and exit
--verbose, -v Enable verbose output
Commands:
{discover,info,query,start,stop,configure,logs,read,plot,file,taps,deploy,build}
discover Discover Synapse devices on the network
info Get device information
query Execute a query on the device
start Start the device or an application
stop Stop the device or an application
configure Write a configuration to the device
logs Get logs from the device
read Read from a device's StreamOut node
plot Plot recorded synapse data
file File commands
taps Interact with taps on the network
deploy Deploy an application to a Synapse device
build Cross-compile and package an application into a .deb without deploying