diff --git a/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py b/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py index 0054c99d59..afe5604c35 100644 --- a/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py +++ b/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py @@ -51,7 +51,7 @@ Meters, SpanAttributes, ) -from opentelemetry.trace import Span, SpanKind, Tracer, get_tracer +from opentelemetry.trace import Span, SpanKind, Tracer, get_tracer, set_span_in_context from opentelemetry.trace.status import Status, StatusCode from typing_extensions import Coroutine from wrapt import wrap_function_wrapper @@ -564,6 +564,7 @@ def _wrap( _handle_input(span, event_logger, kwargs) start_time = time.time() + ctx_token = context_api.attach(set_span_in_context(span)) try: response = wrapped(*args, **kwargs) except Exception as e: # pylint: disable=broad-except @@ -582,6 +583,8 @@ def _wrap( span.set_status(Status(StatusCode.ERROR, str(e))) span.end() raise + finally: + context_api.detach(ctx_token) end_time = time.time() @@ -696,6 +699,7 @@ async def _awrap( await _ahandle_input(span, event_logger, kwargs) start_time = time.time() + ctx_token = context_api.attach(set_span_in_context(span)) try: response = await wrapped(*args, **kwargs) except Exception as e: # pylint: disable=broad-except @@ -714,6 +718,8 @@ async def _awrap( span.set_status(Status(StatusCode.ERROR, str(e))) span.end() raise + finally: + context_api.detach(ctx_token) if is_streaming_response(response): return AnthropicAsyncStream( diff --git a/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py b/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py index 6ad6cdc291..865cccf58c 100644 --- a/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py +++ b/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py @@ -68,7 +68,7 @@ SUPPRESS_LANGUAGE_MODEL_INSTRUMENTATION_KEY, Meters, ) -from opentelemetry.trace import Span, SpanKind, get_tracer +from opentelemetry.trace import Span, SpanKind, get_tracer, set_span_in_context from opentelemetry.trace.status import Status, StatusCode from wrapt import wrap_function_wrapper @@ -336,6 +336,7 @@ def with_instrumentation(*args, **kwargs): kind=SpanKind.CLIENT, attributes=span_attributes, ) + ctx_token = context_api.attach(set_span_in_context(span)) try: response = fn(*args, **kwargs) except Exception as e: @@ -344,6 +345,8 @@ def with_instrumentation(*args, **kwargs): span.set_status(Status(StatusCode.ERROR, str(e))) span.end() raise + finally: + context_api.detach(ctx_token) if span.is_recording(): _handle_converse_stream(span, kwargs, response, metric_params, event_logger)