@halo-sdk/otel
v2.0.0
Published
Observability & resilience decorators for Halo SDK adapters — OpenTelemetry GenAI spans + retry/backoff
Maintainers
Readme
@halo-sdk/otel
Observability & resilience decorators for Halo SDK adapters. Both are composable ModelAdapter wrappers — stack them with @halo-sdk/gateway in any order.
import { withRetry, withTelemetry } from "@halo-sdk/otel";
const adapter = withTelemetry(withRetry(base, { maxRetries: 3 }), {
system: "anthropic",
onSpan: (span) => exporter.record(span), // bridge to your OTel exporter
});withTelemetry(adapter, { onSpan, system? })
Times each chat/stream call and hands onSpan a GenAISpan shaped after the OpenTelemetry GenAI semantic conventions (gen_ai.system, gen_ai.request.model, gen_ai.usage.input_tokens / output_tokens, plus halo.cache.* attributes). Dependency-free — it does not import @opentelemetry/*; you bridge spans to whatever exporter you use.
withRetry(adapter, { maxRetries?, baseDelayMs?, isRetryable? })
Exponential-backoff retries on transient errors. Retries chat, and stream failures that happen before the first chunk (retrying mid-stream would duplicate emitted output). Pass baseDelayMs: 0 and a custom sleep for deterministic tests.
