Live service: results-bridge.onrender.com/docs — interactive API docs; try
/ingest with a Qubit CSV. Runs in dry-run mode (no credentials): full parse → validate → audit pipeline, with the Benchling payload rendered instead of sent. Free-tier host, so the first request after idle takes ~30s to wake.
Instrument output in → validated against assay acceptance criteria → structured result in Benchling. Built, deployed, and operated as a small production service.
instrument file ──► POST /ingest ──► parser (robotic-assays) ──► validation ──► Benchling /results
│ │ (or dry-run)
└──────────► append-only audit log ◄───────┘
Results Bridge is the operations layer of a three-repo ecosystem: robotic-assays is the hub (assay library, acceptance criteria, instrument parsers); this service consumes it to turn raw instrument files into validated, traceable ELN results.
POST /ingest with a Qubit/TapeStation/Tecan Spark/CLARIOstar file and an assay_id:
- Parse — the file is parsed by the robotic-assays ingestion module (format auto-detected).
- Validate — every sample is judged against the assay's acceptance criteria from
criteria.json; missing values surface asINVALID, never silently dropped. - Deliver — a Benchling-shaped results payload is POSTed to the tenant's API, or returned verbatim in dry-run mode when no credentials are configured, so anyone can run the service keyless.
- Audit — an append-only SQLite row records the file hash, assay, verdict counts and delivery mode: every decision traceable to its source file.
git clone https://github.com/anupama29k/results-bridge.git
git clone https://github.com/anupama29k/robotic-assays.git # side by side
cd results-bridge && pip install -r requirements.txt
PYTHONPATH=src uvicorn results_bridge.main:app --port 8080
curl -F "file=@tests/fixtures/test_qubit.csv" -F "assay_id=NGS_001_library_prep_input" localhost:8080/ingestLive mode: set BENCHLING_API_URL and BENCHLING_API_KEY in the environment (never committed) and the same request writes real results with file-hash idempotency.
| Path | What it is |
|---|---|
src/results_bridge/main.py |
FastAPI service: /ingest, /audit, /healthz |
src/results_bridge/parsers.py |
Adapter over the robotic-assays ingestion module |
src/results_bridge/validation.py + criteria.json |
Acceptance-criteria engine and the per-assay rules |
src/results_bridge/benchling.py |
Delivery layer: dry-run client + live client (auth, idempotency, retries) |
src/results_bridge/audit.py |
Append-only SQLite audit log |
tests/ |
pytest suite against real instrument sample files; runs in CI on every push |
Designed and built by Anupama Kozhiyalam · github.com/anupama29k · MIT License