Documentation Index
Fetch the complete documentation index at: https://docs.bentolabs.ai/llms.txt
Use this file to discover all available pages before exploring further.
properties lets you attach arbitrary key/value pairs to a span. They pass through as-is (no namespace prefix) so they remain readable by other OTel backends if you ever switch.
Usage
properties to:
bento.begin(properties=...)interaction.update(properties=...)interaction.finish(properties=...)bento.tool_span(name, properties=...)interaction.tool_span(name, properties=...)
Type fidelity
Property values keep their type so downstream filters and aggregates work correctly:| You pass | Span sees | Why it matters |
|---|---|---|
"foo" (str) | string | |
42 (int) | int | dashboard can experiment_id > 100 |
3.14 (float) | float | |
True (bool) | bool | dashboard can is_premium = true |
[1, 2, 3] (homogeneous list) | array | |
{"nested": "x"} or [1, "two"] (dict / mixed) | JSON string (fallback) | OTel doesn’t natively support these |
When to use properties vs built-in kwargs
| Use a built-in kwarg | Use properties |
|---|---|
| User, conversation, model, provider, input, output | Anything else: feature flags, experiment buckets, latency, retrieved-chunk count |
| The dashboard has dedicated filters and breakdowns for these | Becomes a generic filter/breakdown dimension |
properties lands in spans.attributes as JSONB and is queryable from custom dashboards.