ReqLLM.Telemetry.OpenTelemetry (ReqLLM v1.9.0)

View Source

Dependency-free helpers for mapping ReqLLM telemetry metadata to OpenTelemetry GenAI span data.

This module does not depend on an OpenTelemetry SDK and does not start or stop spans on your behalf. Instead, it translates ReqLLM's native :telemetry metadata into:

  • GenAI span names
  • GenAI span attributes
  • span status hints
  • exception event payloads

Content capture is opt-in through content: :attributes. To emit gen_ai.input.messages and gen_ai.output.messages, ReqLLM request telemetry must also enable payload capture with telemetry: [payloads: :raw].

Thinking and reasoning text remain redacted even when content capture is enabled, so reasoning parts are intentionally omitted from OpenTelemetry content attributes.

Summary

Functions

Builds terminal span data for a [:req_llm, :request, :exception] event.

Builds span creation data for a [:req_llm, :request, :start] event.

Builds terminal span data for a [:req_llm, :request, :stop] event.

Types

content_mode()

@type content_mode() :: :none | :attributes

otel_event()

@type otel_event() :: %{name: String.t(), attributes: map()}

request_start_stub()

@type request_start_stub() :: %{name: String.t(), kind: :client, attributes: map()}

request_terminal_stub()

@type request_terminal_stub() :: %{
  attributes: map(),
  status: span_status(),
  events: [otel_event()]
}

span_status()

@type span_status() :: :ok | {:error, String.t()}

Functions

request_exception(metadata, opts \\ [])

@spec request_exception(
  map(),
  keyword()
) :: request_terminal_stub()

Builds terminal span data for a [:req_llm, :request, :exception] event.

request_start(metadata, opts \\ [])

@spec request_start(
  map(),
  keyword()
) :: request_start_stub()

Builds span creation data for a [:req_llm, :request, :start] event.

request_stop(metadata, opts \\ [])

@spec request_stop(
  map(),
  keyword()
) :: request_terminal_stub()

Builds terminal span data for a [:req_llm, :request, :stop] event.