Jido.AI.Observe (Jido AI v2.2.0)

Copy Markdown View Source

AI observability boundary for telemetry events and spans.

This module centralizes:

  • Canonical AI telemetry event names
  • Required AI metadata/measurement normalization
  • Feature-gated event emission
  • Span lifecycle wrappers that honor AI observability config
  • Sensitive value redaction helpers for telemetry payloads

Summary

Functions

Emits an AI telemetry event when enabled in obs_cfg.

Ensures required AI measurement keys are present with 0 defaults.

Ensures required AI metadata keys are present with nil defaults.

Finishes a span with error details.

Builds an LLM telemetry event path under [:jido, :ai, :llm, ...].

Builds a structured output telemetry event path under [:jido, :ai, :output, ...].

Builds a request telemetry event path under [:jido, :ai, :request, ...].

Redacts sensitive keys recursively for telemetry-safe payloads.

Starts a telemetry span when AI telemetry is enabled.

Builds a strategy telemetry event path under [:jido, :ai, :strategy, strategy, ...].

Builds a tool telemetry event path under [:jido, :ai, :tool, ...].

Builds a tool execution telemetry event path for executor internals.

Types

event_name()

@type event_name() :: [atom()]

feature_gate()

@type feature_gate() :: :llm_deltas

measurements()

@type measurements() :: map()

metadata()

@type metadata() :: map()

obs_cfg()

@type obs_cfg() :: map() | nil

span_ctx()

@type span_ctx() :: Jido.Observe.span_ctx() | :noop

Functions

emit(obs_cfg, event, measurements \\ %{}, metadata \\ %{}, opts \\ [])

@spec emit(obs_cfg(), event_name(), measurements(), metadata(), keyword()) :: :ok

Emits an AI telemetry event when enabled in obs_cfg.

Supports optional feature gates via opts:

  • feature_gate: :llm_deltas

ensure_required_measurements(measurements)

@spec ensure_required_measurements(map()) :: map()

Ensures required AI measurement keys are present with 0 defaults.

ensure_required_metadata(metadata)

@spec ensure_required_metadata(map()) :: map()

Ensures required AI metadata keys are present with nil defaults.

finish_span(span_ctx, extra_measurements)

@spec finish_span(span_ctx(), measurements()) :: :ok

Finishes a span started by start_span/3.

finish_span_error(span_ctx, kind, reason, stacktrace)

@spec finish_span_error(span_ctx(), atom(), term(), list()) :: :ok

Finishes a span with error details.

llm(event)

@spec llm(atom()) :: event_name()

Builds an LLM telemetry event path under [:jido, :ai, :llm, ...].

output(event)

@spec output(atom()) :: event_name()

Builds a structured output telemetry event path under [:jido, :ai, :output, ...].

request(event)

@spec request(atom()) :: event_name()

Builds a request telemetry event path under [:jido, :ai, :request, ...].

sanitize_sensitive(payload)

@spec sanitize_sensitive(term()) :: term()

Redacts sensitive keys recursively for telemetry-safe payloads.

start_span(obs_cfg, event_prefix, metadata \\ %{})

@spec start_span(obs_cfg(), event_name(), metadata()) :: span_ctx()

Starts a telemetry span when AI telemetry is enabled.

Returns :noop when telemetry is disabled or event prefix is invalid.

strategy(strategy, event)

@spec strategy(atom(), atom()) :: event_name()

Builds a strategy telemetry event path under [:jido, :ai, :strategy, strategy, ...].

tool(event)

@spec tool(atom()) :: event_name()

Builds a tool telemetry event path under [:jido, :ai, :tool, ...].

tool_execute(event)

@spec tool_execute(atom()) :: event_name()

Builds a tool execution telemetry event path for executor internals.