Loading...

Synapse Protocol

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.

Three nodes are visually linked to one another (Electrical Broadband > Spike Detect > Stream Out) in the Nexus UI to represent how nodes form a signal chain.

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