Skip to content

Runtime Events

Since: 1.1.0 · Feature ID: F-EXP-01

Gavio runtime events are the public export surface for request execution. They reuse the Inspector event envelope, so the Inspector, JSONL exporters, OpenTelemetry span exporters, tests, and integration recipes all share one event stream.

The default export mode is metadata-only. Runtime exporters remove content-bearing fields before writing events:

  • messages
  • content
  • diff

Python

python
from gavio import Gateway, JsonlRuntimeExporter

gw = (
    Gateway.builder()
    .dev_mode(True)
    .exporter(JsonlRuntimeExporter("runtime-events.jsonl"))
    .build()
)

JavaScript

ts
import { Gateway, jsonlRuntimeExporter } from 'gavio'

const gw = new Gateway({
  devMode: true,
  exporters: [jsonlRuntimeExporter({ path: 'runtime-events.jsonl' })],
})

Java

java
Gateway gateway = Gateway.builder()
    .devMode(true)
    .exporter(new JsonlRuntimeExporter(Path.of("runtime-events.jsonl")))
    .build();

Adding an exporter enables metadata-mode events and does not start the Inspector HTTP server unless inspection is configured separately.

OpenTelemetry

Observability + OTel (v1.3.0, F-OBS-07) maps runtime events into OpenTelemetry-style span JSON without adding mandatory OTel dependencies.

python
from gavio import Gateway, OtelSpanExporter

gw = Gateway.builder().exporter(
    OtelSpanExporter("otel-spans.jsonl", service_name="checkout-api")
).build()
ts
import { Gateway, otelSpanExporter } from 'gavio'

const gw = new Gateway({
  exporters: [otelSpanExporter({
    path: 'otel-spans.jsonl',
    serviceName: 'checkout-api',
  })],
})
java
Gateway gateway = Gateway.builder()
    .exporter(new OtelSpanExporter(Path.of("otel-spans.jsonl"), "checkout-api"))
    .build();

Python can also convert existing runtime-event JSONL:

bash
gavio events convert --from runtime-events.jsonl --to otel-json --service-name checkout-api

Event Types

TypePurpose
trace.startRequest started
interceptor.before.*Pre-call interceptor lifecycle
provider.call.*Provider attempt lifecycle
interceptor.after.*Post-call interceptor lifecycle
governance.eventBudget, drift, or policy signal
trace.errorRequest failed
trace.endRequest completed

The emitted shape is covered by spec/GavioOtelSpan.schema.json and the shared test-vectors/otel/spans.json vectors.

Released under the MIT License.