Skip to main content
This feature is in beta. Behavior and availability may change as we expand support.
Use passive signal ingestion when you have continuous or high-rate sensor streams as Parquet. Olira absorbs the data, runs feature processing, and emits derived logs into the normal event-log path (then available in views and patient state like any other log). Supported today: accelerometer, gyroscope, gps. Additional sensor types will be added over time — use the same send_signals API as new types land.

Pipeline

  1. Upload — send a Parquet batch with OliraClient.send_signals (the SDK chooses sync vs bulk upload for you).
  2. Absorb — Olira validates and normalizes the series (UTC timestamps, canonical units).
  3. Features — Olira computes features from the absorbed series and emits derived logs. Feature jobs always read the absorbed series, not the raw upload bytes.

Deduplication

  • Timestamps are stored at millisecond resolution.
  • The same (patient, device, timestamp) is kept once — the first write wins on re-upload.
  • An identical file (same content hash) may be accepted as a no-op (deduplicated: true on the job).
Job field records_deduplicated counts overlap skips during absorb; that is separate from a content-hash no-op at upload.

What you need

  1. API key with sdk:event-log.
  2. Patient already in your org.
  3. Parquet rows with a ts column plus fields for the sensor type. Today:
    • accelerometerx, y, z (m/s²; g / milli-g accepted via metadata)
    • gyroscopex, y, z (rad/s)
    • gpslat, lon (optional altitude, accuracy, speed, bearing)
  4. Optional: pip install olira[signals] so the SDK can serialize records= to Parquet (or pass parquet= bytes yourself).

SDK

Small batches go through a synchronous upload; larger batches use a presigned upload URL. On the bulk path, PUT the Parquet bytes without the SDK Authorization header. Method reference: send_signals, get_signal_job.

Job statuses

After absorb

Wait for absorption (handle.wait()), then use derived logs and views like any other event data. Feature processing runs on a schedule after new signal data lands — you do not need to call a separate feature API.