Skip to main content

Beava: real-time feature server with composable streaming pipelines (Python SDK + bundled Rust server binary).

Project description

beava — Python SDK

Python SDK for Beava, the single-binary real-time feature server. Author pipelines with @bv.event / @bv.table decorators; push events and read features against a running beava server over HTTP or TCP.

Install

# curl   (recommended) — platform wheel from latest GitHub Release
curl -fsSL https://raw.githubusercontent.com/beava-dev/beava/main/scripts/install.sh \
  | sh

# docker — zero deps on the host
docker run -p 8080:8080 -p 8081:8081 beavadev/beava:edge

# cargo  — from source, for Rust-toolchain users
cargo install --git https://github.com/beava-dev/beava beava-server

The curl installer pulls the platform wheel from the latest GitHub Release and pip install --user's it. The wheel ships the SDK and the Rust beava server binary (v0.0.0+, polars-style); after install, the beava shell command is on PATH and the SDK can run against it directly — including embed mode (bv.App() with no URL). Pin a specific version with BEAVA_VERSION=v0.0.0 curl ... | sh.

Once PyPI publishing lands at v0.0.x, pip install beava will work too — both surfaces will ship the same wheel.

Quickstart

import beava as bv

@bv.event
class Click:
    user_id: str
    page: str

@bv.table(key="user_id")
def UserActivity(e: Click):
    return e.group_by("user_id").agg(
        clicks_1h=bv.count(window="1h"),
        unique_pages_1h=bv.n_unique("page", window="1h"),
    )

app = bv.App(url="http://localhost:8080")
app.register(Click, UserActivity)

app.push("Click", {"user_id": "alice", "page": "/home"})
app.push("Click", {"user_id": "alice", "page": "/products"})

app.get("UserActivity", "alice")
# => {"clicks_1h": 2, "unique_pages_1h": 2}

Transports

The same SDK speaks three transports — pick by the URL you pass to bv.App(...).

# HTTP/JSON (curl-compatible debugging path)
app = bv.App(url="http://localhost:8080")

# Framed TCP (sub-millisecond fast-path; JSON or msgpack content)
app = bv.App(url="tcp://localhost:8081")

# Embed mode (no separate server — auto-spawns a local `beava` binary)
app = bv.App()

Embed mode finds the beava binary that ships with the curl-installed wheel automatically. Override with BEAVA_BINARY=/path/to/beava if you want to point at a different build.

Surface

Method Wire Notes
app.register(*descriptors, force=False, dry_run=False) POST /register Returns {"registry_version": <n>}. Pass force=True for destructive schema changes; dry_run=True returns a categorized diff without applying.
app.push(event_name, fields) POST /push body {event, data} Fire-and-forget. Returns server ack.
app.get(table, key=None, features=None) POST /get body {table, key} Returns a flat dict of feature values. key=None routes to the global-aggregation sentinel (ADR-003). features=[...] narrows to a subset.
app.batch_get(requests) POST /batch_get body {requests: [...]} requests is a list of (table, key) or (table, key, features) tuples. Returns a list of dicts in input order.
app.reset() POST /reset (test_mode-only) Wipes server state. Pass test_mode=True to bv.App(...) to enable.
app.ping() POST /ping Liveness; returns {"pong": True, "registry_version": <n>}.
app.close() Releases the transport connection.

Pipeline DSL

@bv.event declares an event schema. Fields are typed Python class attributes; the SDK serializes them to JSON on push.

@bv.table(key=...) declares a feature table. The decorated function takes one event-typed parameter and returns e.group_by(...).agg(...) over it. The runtime maintains the table incrementally — every event updates exactly the affected key's row.

The key= kwarg accepts a string (single-column key) or a list of strings (composite key).

bv.col("name") references an event field inside a where= filter or arithmetic expression. Strings in where= are rejected — pass an _Expr (e.g. bv.col("event_type") == "click").

bv.lit(value) wraps a Python literal so it can participate in the same expression grammar.

Operator catalogue

50+ aggregation primitives are exported flat at the bv.* namespace. Inspect the live surface from Python:

import beava as bv
print([x for x in dir(bv) if not x.startswith("_")])

Selection by family:

  • Corecount, sum, mean, min, max, var, std, n_unique, quantile
  • Sketchtop_k, bloom_member, entropy, histogram, hour_of_day_histogram, dow_hour_histogram
  • Recencyfirst, last, first_n, last_n, lag, first_seen, last_seen, age, time_since
  • Decayewma, ema, ewvar, ew_zscore, decayed_sum, decayed_count
  • Velocityrate_of_change, inter_arrival_stats, burst_count, delta_from_prev, trend, z_score
  • Buffer / geomost_recent_n, reservoir_sample, geo_velocity, geo_distance, geo_spread, distance_from_home

Deprecation aliases retained: avg → mean, variance → var, stddev → std, count_distinct → n_unique, percentile → quantile. Use the canonical form in new code.

Demo data

bv.demo exposes three pre-built pipelines + dataset loaders for trying the SDK without writing your own pipeline:

import beava as bv
adtech = bv.demo.adtech()      # ad-impression / click / conversion
fraud = bv.demo.fraud()        # transaction fraud
ecommerce = bv.demo.ecommerce()  # cart / view / purchase

Each returns a tuple of (events, tables, dataset) ready to register and push.

Errors

Top-level error types: bv.RegistrationError (raised on register failures with structured code + message), bv.ValidationError (raised by client-side input validators), bv.BinaryNotFoundError (raised in embed mode if the beava binary isn't on PATH).

Learn more

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

beava-0.0.1.tar.gz (1.2 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

beava-0.0.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

beava-0.0.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

beava-0.0.1-py3-none-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

beava-0.0.1-py3-none-macosx_10_12_x86_64.whl (2.6 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file beava-0.0.1.tar.gz.

File metadata

  • Download URL: beava-0.0.1.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for beava-0.0.1.tar.gz
Algorithm Hash digest
SHA256 8184013e4a6f3fbd9f3cab9ceb085c32b2db86d160fc62ad0333c27568a6650c
MD5 2b9a09ebd4fc081ac88c77d38a29f3f0
BLAKE2b-256 d5d5b34c67f173d0e184b12126bbc283173a13edd582ac46557d3cee295b359e

See more details on using hashes here.

Provenance

The following attestation bundles were made for beava-0.0.1.tar.gz:

Publisher: release-wheels.yml on beava-dev/beava

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file beava-0.0.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for beava-0.0.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ed7162efbed0147153dc839ada662ea2c685c8493d771a164bcbefc1466f695a
MD5 da77f05c7520b8351e0737c5125becf6
BLAKE2b-256 08ad361ae659d93dd22e9d27046608edaecf0fff67fc4973a0f3486b655d0d2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for beava-0.0.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release-wheels.yml on beava-dev/beava

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file beava-0.0.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for beava-0.0.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 961af068e0872ae47561cb2adb058e1d5e855a1bf012728199e74992f58b5754
MD5 0f74dcbca1f1dfcdb9cc001ffdc4b481
BLAKE2b-256 c5c273716774f1aa6235d7940d365dcf8fc23fe126800ddffc9ccab0be98fab2

See more details on using hashes here.

Provenance

The following attestation bundles were made for beava-0.0.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release-wheels.yml on beava-dev/beava

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file beava-0.0.1-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: beava-0.0.1-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: Python 3, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for beava-0.0.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 29bb9a9a5844b2ee4510653ee8a347d9deb4b0f601db685ef85d4776a6245d9b
MD5 3336302da3cd80d1fd6e107002584c78
BLAKE2b-256 fb962a70d53008ddec1a1515e487861974e37dd1ed9e2046cc792e4a38d568d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for beava-0.0.1-py3-none-macosx_11_0_arm64.whl:

Publisher: release-wheels.yml on beava-dev/beava

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file beava-0.0.1-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for beava-0.0.1-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d349d8ef82a507bac1de1522cd59ccd454a694952349fcf8d0b6e5021446e7d1
MD5 b707e417a05a3e609fa3c57d3196785c
BLAKE2b-256 54b54be9f9455c74f25183918fb52a61b7aa4f20df45f817437e92a364886baf

See more details on using hashes here.

Provenance

The following attestation bundles were made for beava-0.0.1-py3-none-macosx_10_12_x86_64.whl:

Publisher: release-wheels.yml on beava-dev/beava

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page