User Guide

What lucihub is

lucihub is a cloud system for the shared operation of anabrid's analog-digital hybrid computers. A single deployment hosts the redacc compiler, a digital simulator for analog devices, and worker processes that drive the physical hardware. Multiple devices can be attached to a single deployment and are shared among users under per-user, per-device-class rate limits. All functionality is gated by an API key (see Getting Started).

Capabilities exposed to users

The system exposes three core capabilities to authenticated users:

  • Compilation — translate an ODE written in analang (a text-based DSL) into a circuit configuration for a target device.
  • Simulation — execute a compiled module on a digital simulator and retrieve measurements.
  • Execution — execute a compiled module on a physical analog computer and retrieve measurements.

Supported devices

Device type Description
LUCIDAC Single-cluster reconfigurable hybrid analog computer (8 integrators, 4 multipliers in default config). Multiple coupled units form a LUCISTACK; both appear as LUCIDAC to the user.
REDAC Large-scale reconfigurable analog supercomputer built from carrier boards (mREDAC); up to seven carriers form an iREDAC. Multiple iREDACs can be connected into a freely-scalable "REDAC".
SIMULATOR Software simulator that mathematically emulates any of the hardware models named above. Does not support feedback-type circuits through multipliers.

How users interact with the system

Three entry paths are supported, each targeting a different use case:

  • CLI. The lucihub-cli package provides the lucihub command. It is best suited for ad-hoc work, scripting, and CI smoke tests. See the CLI Reference for details.
  • Programmatic (Python). LuciHubClient from anabrid.lucihub.cli.client exposes the same operations as Python methods. It integrates with pybrid-computing for direct device-object manipulation. See Programmatic Usage.
  • Raw REST. Every operation is also reachable over HTTP under /api/v1. The OpenAPI schema is served by the deployment at /api/docs. See the REST API reference.

Note: Raw REST-based requests are mostly suited for developers of further clients to LUCIHUB. You can simplify your life by using tools that auto-generate REST client code in many different programming languages from LUCIHUB's OpenAPI spec, for example openapi-generator.

Interaction model

flowchart LR User([User]) CLI[lucihub CLI] PY[LuciHubClient / pybrid] REST{{"REST API
/api/v1"}} DB[("PostgreSQL +
blob storage")] BROKER[/"Message broker"/] COMP[Compile worker] RUN[Run worker] DEV["Physical / simulated
devices"] User --> CLI User --> PY CLI --> REST PY --> REST REST <--> DB REST --> BROKER BROKER --> COMP BROKER --> RUN RUN --> DEV COMP --> DB RUN --> DB

The user picks one of three entry paths (CLI, Python client, or raw HTTP). All three terminate at the same versioned REST API. The API persists tasks and enqueues them for asynchronous processing; workers pick them up, talk to devices via pybrid-computing, and write results back to the same store. The user then polls the API until the task reaches a terminal state and downloads the result.

Where to go next