Source code for agentscope_runtime.engine.tracing.tracing_util
# -*- coding: utf-8 -*-
import contextvars
import os
from opentelemetry import baggage
from opentelemetry.context import attach
_user_request_id: contextvars.ContextVar[str] = contextvars.ContextVar(
"_user_request_id",
default="",
)
_user_trace_header: contextvars.ContextVar[dict] = contextvars.ContextVar(
"_user_trace_header",
default={},
)
_user_common_attributes: contextvars.ContextVar[dict] = contextvars.ContextVar(
"_user_common_attributes",
default={},
)
[docs]
class TracingUtil:
[docs]
@staticmethod
def set_request_id(value: str = "") -> None:
"""Set request id"""
_user_request_id.set(value)
if value:
ctx = baggage.set_baggage(
"agentscope-runtime_request_id",
value,
)
attach(ctx)
TracingUtil.clear_common_attributes()
TracingUtil.set_common_attributes(
{
"request_id": value,
"bailian.request_id": value,
"gen_ai.response.id": value,
**_global_attributes,
},
)
[docs]
@staticmethod
def get_request_id(default_value: str = "") -> str:
"""Get request id"""
# Try to get from context variable first
request_id = _user_request_id.get("")
if request_id:
return request_id
# Fallback to baggage for cross-thread scenarios
request_id = baggage.get_baggage(
"agentscope-runtime_request_id",
)
if request_id:
return request_id
return default_value
[docs]
@staticmethod
def set_common_attributes(attributes: dict) -> None:
"""Set common attributes by merging with existing ones
Args:
attributes: common attributes to merge
"""
current_attributes = _user_common_attributes.get({})
current_attributes.update(attributes)
_user_common_attributes.set(current_attributes)
[docs]
@staticmethod
def get_common_attributes() -> dict:
"""Get common attributes
Returns:
common attributes in dict
"""
return _user_common_attributes.get({})
[docs]
@staticmethod
def clear_common_attributes() -> None:
"""Clear common attributes"""
_user_common_attributes.set({})
[docs]
def get_global_attributes() -> dict:
"""Set global common attributes for tracing."""
attributes = {"gen_ai.framework": "Alibaba Cloud Model Studio"}
if app_env := (os.getenv("APPLICATION_ENV") or os.getenv("DS_ENV")):
attributes["bailian.app.env"] = app_env
if app_id := os.getenv("APPLICATION_ID"):
attributes["bailian.app.id"] = app_id
if app_name := os.getenv("APPLICATION_NAME"):
attributes["bailian.app.name"] = app_name
if app_inter_source := os.getenv("APPLICATION_INTER_SOURCE"):
attributes["bailian.app.inter.source"] = app_inter_source
if user_id := os.getenv("ALIYUN_UID"):
attributes["bailian.app.owner_id"] = user_id
attributes["gen_ai.user.id"] = user_id
if app_tracing := os.getenv("APPLICATION_TRACING"):
attributes["bailian.app.tracing"] = app_tracing
if workspace_id := os.getenv("WORKSPACE_ID"):
attributes["bailian.app.workspace"] = workspace_id
return attributes
_global_attributes = get_global_attributes()