Skip to main content

ObservabilityConfig

Struct ObservabilityConfig 

Source
pub struct ObservabilityConfig {
    pub enable_sensitive_data: bool,
    pub otel_semconv_stability_opt_in: Option<String>,
}
Expand description

Observability configuration read from the process environment, mirroring (a subset of) Python’s ObservabilitySettings (observability.py:347-394).

This port intentionally does not read ENABLE_OTEL: Python uses that flag to skip constructing spans entirely when no heavier OTel SDK is configured. This crate’s spans are plain tracing spans, which are already effectively free when no subscriber is attached, so there is no separate “enable” switch — attach a subscriber (optionally bridged to OTel; see the module docs) to turn observability on.

This crate does not build an OTel Resource, exporter, or MeterProvider — see the module docs for wiring those yourself.

Fields§

§enable_sensitive_data: bool

Whether message / system-instructions / tool-definition / tool-call content capture is enabled. Reads ENABLE_SENSITIVE_DATA (mirrors Python’s enable_sensitive_data — “Warning: Sensitive events should only be enabled on test and development environments.”).

§otel_semconv_stability_opt_in: Option<String>

The raw OTEL_SEMCONV_STABILITY_OPT_IN value: a comma-separated opt-in list in OpenTelemetry’s standard format. Only the GEN_AI_LATEST_EXPERIMENTAL_OPT_IN token is consulted here — see use_latest_experimental_gen_ai_semconv.

Implementations§

Source§

impl ObservabilityConfig

Source

pub fn from_env() -> ObservabilityConfig

Read configuration from the process environment. Unset or unrecognized values default to false (matching Python’s default). Recognized truthy values (case-insensitive, surrounding whitespace ignored): "1", "true", "yes", "on".

Source

pub fn use_latest_experimental_gen_ai_semconv(&self) -> bool

Whether to emit the GenAI semantic conventions above the v1.36.0 baseline.

v1.36.0 is the OTel-recommended baseline; every version above it is “latest” here. Computed from otel_semconv_stability_opt_in: unset defaults to true (opted in), which — as upstream documents — deliberately differs from OpenTelemetry’s own default of retaining the baseline. Set the variable to a list that omits GEN_AI_LATEST_EXPERIMENTAL_OPT_IN to get the baseline instead.

Two things change when this is false:

  • the provider is reported as gen_ai.system rather than gen_ai.provider.name (the rename landed above v1.36.0), and
  • the attributes introduced above the baseline (gen_ai.usage.cache_creation.input_tokens, gen_ai.usage.cache_read.input_tokens, gen_ai.usage.reasoning.output_tokens, gen_ai.tool.definitions, gen_ai.tool.call.arguments, gen_ai.tool.call.result) are not emitted at all.
Source

pub fn emit_tool_call_attributes(&self) -> bool

Whether to emit gen_ai.tool.call.arguments / gen_ai.tool.call.result on execute_tool spans. These carry tool content and were introduced above v1.36.0, so they need both content capture and the semconv version that defines them.

Source

pub fn otel_service_name(&self) -> String

The OTEL_SERVICE_NAME passthrough, defaulting to "agent_framework" (mirrors Python’s _create_resource, observability.py:336-344). This crate does not build a Resource from it — it’s exposed so an app wiring its own OTel Resource (see the module docs) can stay consistent with whatever this reads. Reads the environment fresh on every call rather than caching it at from_env time.

Trait Implementations§

Source§

impl Clone for ObservabilityConfig

Source§

fn clone(&self) -> ObservabilityConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ObservabilityConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for ObservabilityConfig

Source§

fn default() -> ObservabilityConfig

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more