Telemetry
Telemetry & privacy
Telemetry is off unless you pass a fluxcompute_key.
Prompt and response text are never sent by default.
The hosted FluxCompute dashboard is in invite-only early access: the public telemetry
endpoint is not yet generally available, and without a reachable endpoint the SDK's
telemetry is a silent no-op (it never delays or fails your LLM calls). Self-hosted and dev
deployments can point the SDK anywhere via FLUX_TELEMETRY_URL /
FLUX_GRAPH_EVENTS_URL. For dashboard access, get in touch at
fluxcompute.dev.
What gets reported
With a key set, the SDK reports:
- routing decisions, difficulty scores, token counts, cost, latency
- execution-graph structure: node names, types, parentage, status, failure reason, model, timings, and error strings, which are diagnostics
Provider API keys are never transmitted.
Opting in to content
To include model output in the dashboard (a 500-character preview per node, plus full prompt/output snapshots for failed nodes), opt in explicitly:
client = FluxClient(anthropic_key="...", fluxcompute_key="flx_...", content_capture=True)
Content filtering happens before anything leaves the process; your local graph always keeps
full output. Turn everything off with telemetry=False.
client = FluxClient(anthropic_key="...", telemetry=False)
The two channels
Both are batched and fire-and-forget, and neither can delay or fail an LLM call. Failures are never raised to the caller. The two failure modes differ, though: a transport error re-buffers the batch for a later flush, while a non-200 response is logged and that batch is dropped.
| Channel | Endpoint | Carries |
|---|---|---|
| Telemetry | POST /v1/telemetry/event | Per-request routing + cost metrics |
| Graph events | POST /v1/graph/events | Execution-graph node structure |
| Identity | GET /v1/whoami | Key validation, on demand only |
The full wire format (every field, batching behaviour, and the versioning rules) is documented in docs/telemetry-contract.md.
Checking a key
The emitters deliberately swallow failures, so a typo in a key would otherwise surface only
as a silent gap. FluxClient.verify() is a startup handshake that catches it
early: it raises ValueError if the endpoint answered and rejected the key, and
ConnectionError naming the endpoint if nothing answered at all.
account = await client.verify()
Sending it somewhere you control
Point the SDK at a local server or your own implementation of the contract:
| Variable | Effect |
|---|---|
FLUX_TELEMETRY_URL | Sets the telemetry endpoint. Highest precedence |
FLUX_GRAPH_EVENTS_URL | Sets the graph-events endpoint. If FLUX_TELEMETRY_URL is unset, the telemetry endpoint's host is derived from it, as is /v1/whoami |