dify/api/extensions/otel/context.py
林玮 (Jade Lin) 960018253b
feat(api): track credit usage contexts (#41181)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-08-25 10:21:32 +00:00

24 lines
760 B
Python

"""Utilities for propagating OpenTelemetry context across execution boundaries."""
import contextvars
import functools
from collections.abc import Callable
from opentelemetry import context as otel_context
def propagate_context[**P, R](func: Callable[P, R]) -> Callable[P, R]:
"""Capture the current context and attach it whenever ``func`` executes."""
captured_context = otel_context.get_current()
captured_contextvars = contextvars.copy_context()
@functools.wraps(func)
def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
token = otel_context.attach(captured_context)
try:
return captured_contextvars.run(func, *args, **kwargs)
finally:
otel_context.detach(token)
return wrapper