Quick start
session=memory ansi=false no-result
session=memory ansi=false
session=memory ansi=false
Filters
Queries are lazy - chaining filters builds a pipeline without fetching:session=memory ansi=false
.after(t), .before(t), .at(t), .near(pose, radius), .tags(**kv), .filter(predicate), .search(embedding, k), .order_by(field), .limit(k), .offset(n).
Terminals
Terminals materialize or consume the stream:session=memory ansi=false
.to_list(), .first(), .last(), .count(), .exists(), .summary(), .get_time_range(), .drain(), .drain_thread().
.save(target) is a lazy pass-through - pair it with a terminal (e.g. .drain() or .drain_thread()).
Transforms
.map(fn) transforms each observation, returning a new stream:
session=memory ansi=false
Live queries
Live queries backfill existing matches, then emit new ones as they arrive:session=memory ansi=false
Spatial + live
Filters compose freely. Here.near() + .live() + .map() watches for logs near a physical location - backfilling past matches and tailing new ones:
session=memory ansi=false
Embeddings
UseEmbedText transformer with CLIP to enrich observations with embeddings, then search by similarity:
.search(embedding, k) returns the top-k most similar observations by cosine similarity:
session=memory ansi=false
skip
