pub mod callback;
pub mod spans;
pub mod test_utils;
pub mod types;
#[cfg(feature = "otel")]
pub mod config;
#[cfg(feature = "otel")]
pub mod metrics;
#[cfg(feature = "otel")]
pub mod propagation;
pub use callback::{
CallbackHandlerAdapter, GraphCallbackHandler, GraphInterruptEvent, GraphResumeEvent,
};
pub use test_utils::TestMetricsCollector;
pub use types::{LlmCacheKeyInput, LlmCachePolicy, ServerInfo};
#[cfg(feature = "otel")]
pub use config::{TracingConfig, TracingInstallResult, init};
#[cfg(feature = "otel")]
pub use metrics::{
CounterBuilder, GaugeBuilder, HistogramBuilder, MetricsRegistry, RegistryMetricsCollector,
registry,
};
#[cfg(feature = "otel")]
pub use propagation::{attach_context, extract_trace_context, inject_trace_context};
pub use spans::{attrs, names};
pub fn init_tracing() {
let _ = tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::builder()
.with_default_directive(tracing::Level::INFO.into())
.from_env_lossy(),
)
.try_init();
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_span_constants_exist() {
assert_eq!(names::GRAPH_INVOKE, "juncture.graph.invoke");
assert_eq!(names::NODE_EXECUTE, "juncture.node.execute");
assert_eq!(names::LLM_CALL, "juncture.llm.call");
assert_eq!(names::TOOL_CALL, "juncture.tool.call");
assert_eq!(attrs::THREAD_ID, "juncture.thread.id");
assert_eq!(attrs::NODE_NAME, "juncture.node.name");
assert_eq!(attrs::LLM_MODEL, "juncture.llm.model");
}
#[test]
fn test_init_tracing_doesnt_panic() {
init_tracing();
init_tracing();
}
#[test]
fn test_types_reexport() {
let server_info = ServerInfo::new();
assert!(server_info.assistant_id.is_none());
let cache_policy = LlmCachePolicy::new();
assert!(cache_policy.key_func.is_none());
}
#[test]
fn test_test_utils_reexport() {
let collector = TestMetricsCollector::new();
assert_eq!(collector.get_counter("test"), 0);
}
}