Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
from .middleware.baggage_builder import BaggageBuilder
from .opentelemetry_scope import OpenTelemetryScope
from .request import Request
from .source_metadata import SourceMetadata
from .channel import Channel
from .tenant_details import TenantDetails
from .tool_call_details import ToolCallDetails
from .tool_type import ToolType
Expand Down Expand Up @@ -64,7 +64,7 @@
"AgentDetails",
"TenantDetails",
"ToolCallDetails",
"SourceMetadata",
"Channel",
"Request",
"InferenceCallDetails",
"ServiceEndpoint",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

# Channel class.

from dataclasses import dataclass


@dataclass
class Channel:
"""Channel information for agent execution context."""

name: str | None = None
link: str | None = None
Original file line number Diff line number Diff line change
Expand Up @@ -60,15 +60,15 @@
GEN_AI_TOOL_CALL_RESULT_KEY = "gen_ai.tool.call.result"
GEN_AI_TOOL_TYPE_KEY = "gen_ai.tool.type"

# Agent user (user tied to agent instance during creation) or caller dimensions
GEN_AI_CALLER_ID_KEY = "microsoft.caller.id"
GEN_AI_CALLER_NAME_KEY = "microsoft.caller.name"
GEN_AI_CALLER_UPN_KEY = "microsoft.caller.upn"
# Human caller dimensions (OTel user.* namespace)
USER_ID_KEY = "user.id"
USER_NAME_KEY = "user.name"
USER_EMAIL_KEY = "user.email"
GEN_AI_CALLER_CLIENT_IP_KEY = "client.address"

# Agent to Agent caller agent dimensions
GEN_AI_CALLER_AGENT_USER_ID_KEY = "microsoft.a365.caller.agent.user.id"
GEN_AI_CALLER_AGENT_UPN_KEY = "microsoft.a365.caller.agent.user.upn"
GEN_AI_CALLER_AGENT_EMAIL_KEY = "microsoft.a365.caller.agent.user.email"
GEN_AI_CALLER_AGENT_NAME_KEY = "microsoft.a365.caller.agent.name"
GEN_AI_CALLER_AGENT_ID_KEY = "microsoft.a365.caller.agent.id"
GEN_AI_CALLER_AGENT_APPLICATION_ID_KEY = "microsoft.a365.caller.agent.blueprint.id"
Expand All @@ -84,7 +84,7 @@

# Baggage keys
GEN_AI_AGENT_AUID_KEY = "microsoft.agent.user.id"
GEN_AI_AGENT_UPN_KEY = "microsoft.agent.user.upn"
GEN_AI_AGENT_EMAIL_KEY = "microsoft.agent.user.email"
GEN_AI_AGENT_BLUEPRINT_ID_KEY = "microsoft.a365.agent.blueprint.id"

# Execution context dimensions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,9 @@ def __init__(
self.set_tag_maybe(SERVER_PORT_KEY, endpoint.port)

# Set request metadata if provided
if request and request.source_metadata:
self.set_tag_maybe(CHANNEL_NAME_KEY, request.source_metadata.name)
self.set_tag_maybe(CHANNEL_LINK_KEY, request.source_metadata.description)
if request and request.channel:
self.set_tag_maybe(CHANNEL_NAME_KEY, request.channel.name)
self.set_tag_maybe(CHANNEL_LINK_KEY, request.channel.link)

def record_response(self, response: str) -> None:
"""Records response information for telemetry tracking.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,9 @@ def __init__(
self.set_tag_maybe(SERVER_PORT_KEY, str(details.endpoint.port))

# Set request metadata if provided
if request and request.source_metadata:
self.set_tag_maybe(CHANNEL_NAME_KEY, request.source_metadata.name)
self.set_tag_maybe(CHANNEL_LINK_KEY, request.source_metadata.description)
if request and request.channel:
self.set_tag_maybe(CHANNEL_NAME_KEY, request.channel.name)
self.set_tag_maybe(CHANNEL_LINK_KEY, request.channel.link)

def record_input_messages(self, messages: List[str]) -> None:
"""Records the input messages for telemetry tracking.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,22 @@
CHANNEL_LINK_KEY,
CHANNEL_NAME_KEY,
GEN_AI_CALLER_AGENT_APPLICATION_ID_KEY,
GEN_AI_CALLER_AGENT_EMAIL_KEY,
GEN_AI_CALLER_AGENT_ID_KEY,
GEN_AI_CALLER_AGENT_NAME_KEY,
GEN_AI_CALLER_AGENT_PLATFORM_ID_KEY,
GEN_AI_CALLER_AGENT_UPN_KEY,
GEN_AI_CALLER_AGENT_USER_ID_KEY,
GEN_AI_CALLER_CLIENT_IP_KEY,
GEN_AI_CALLER_ID_KEY,
GEN_AI_CALLER_NAME_KEY,
GEN_AI_CALLER_UPN_KEY,
GEN_AI_EXECUTION_TYPE_KEY,
GEN_AI_INPUT_MESSAGES_KEY,
GEN_AI_OUTPUT_MESSAGES_KEY,
INVOKE_AGENT_OPERATION_NAME,
SERVER_ADDRESS_KEY,
SERVER_PORT_KEY,
SESSION_ID_KEY,
USER_EMAIL_KEY,
USER_ID_KEY,
USER_NAME_KEY,
)
from .invoke_agent_details import InvokeAgentDetails
from .models.caller_details import CallerDetails
Expand Down Expand Up @@ -149,9 +149,9 @@ def __init__(

# Set request metadata if provided
if request:
if request.source_metadata:
self.set_tag_maybe(CHANNEL_NAME_KEY, request.source_metadata.name)
self.set_tag_maybe(CHANNEL_LINK_KEY, request.source_metadata.description)
if request.channel:
self.set_tag_maybe(CHANNEL_NAME_KEY, request.channel.name)
self.set_tag_maybe(CHANNEL_LINK_KEY, request.channel.link)

self.set_tag_maybe(
GEN_AI_EXECUTION_TYPE_KEY,
Expand All @@ -161,9 +161,9 @@ def __init__(

# Set caller details tags
if caller_details:
self.set_tag_maybe(GEN_AI_CALLER_ID_KEY, caller_details.caller_id)
self.set_tag_maybe(GEN_AI_CALLER_UPN_KEY, caller_details.caller_upn)
self.set_tag_maybe(GEN_AI_CALLER_NAME_KEY, caller_details.caller_name)
self.set_tag_maybe(USER_ID_KEY, caller_details.caller_id)
self.set_tag_maybe(USER_EMAIL_KEY, caller_details.caller_upn)
self.set_tag_maybe(USER_NAME_KEY, caller_details.caller_name)
# Validate and set caller client IP
self.set_tag_maybe(
GEN_AI_CALLER_CLIENT_IP_KEY,
Expand All @@ -178,7 +178,7 @@ def __init__(
GEN_AI_CALLER_AGENT_APPLICATION_ID_KEY, caller_agent_details.agent_blueprint_id
)
self.set_tag_maybe(GEN_AI_CALLER_AGENT_USER_ID_KEY, caller_agent_details.agent_auid)
self.set_tag_maybe(GEN_AI_CALLER_AGENT_UPN_KEY, caller_agent_details.agent_upn)
self.set_tag_maybe(GEN_AI_CALLER_AGENT_EMAIL_KEY, caller_agent_details.agent_upn)
self.set_tag_maybe(
GEN_AI_CALLER_AGENT_PLATFORM_ID_KEY, caller_agent_details.agent_platform_id
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,21 @@
GEN_AI_AGENT_AUID_KEY,
GEN_AI_AGENT_BLUEPRINT_ID_KEY,
GEN_AI_AGENT_DESCRIPTION_KEY,
GEN_AI_AGENT_EMAIL_KEY,
GEN_AI_AGENT_ID_KEY,
GEN_AI_AGENT_NAME_KEY,
GEN_AI_AGENT_UPN_KEY,
GEN_AI_CALLER_CLIENT_IP_KEY,
GEN_AI_CALLER_ID_KEY,
GEN_AI_CALLER_NAME_KEY,
GEN_AI_CALLER_UPN_KEY,
GEN_AI_CONVERSATION_ID_KEY,
GEN_AI_CONVERSATION_ITEM_LINK_KEY,
SERVICE_NAME_KEY,
SESSION_DESCRIPTION_KEY,
SESSION_ID_KEY,
TENANT_ID_KEY,
USER_EMAIL_KEY,
USER_ID_KEY,
USER_NAME_KEY,
)
from ..utils import deprecated, validate_and_normalize_ip
from ..utils import validate_and_normalize_ip

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -115,7 +115,7 @@ def agent_upn(self, value: str | None) -> "BaggageBuilder":
Returns:
Self for method chaining
"""
self._set(GEN_AI_AGENT_UPN_KEY, value)
self._set(GEN_AI_AGENT_EMAIL_KEY, value)
return self

def agent_blueprint_id(self, value: str | None) -> "BaggageBuilder":
Expand All @@ -139,7 +139,7 @@ def caller_id(self, value: str | None) -> "BaggageBuilder":
Returns:
Self for method chaining
"""
self._set(GEN_AI_CALLER_ID_KEY, value)
self._set(USER_ID_KEY, value)
return self

def agent_name(self, value: str | None) -> "BaggageBuilder":
Expand All @@ -154,12 +154,12 @@ def agent_description(self, value: str | None) -> "BaggageBuilder":

def caller_name(self, value: str | None) -> "BaggageBuilder":
"""Set the caller name baggage value."""
self._set(GEN_AI_CALLER_NAME_KEY, value)
self._set(USER_NAME_KEY, value)
return self

def caller_upn(self, value: str | None) -> "BaggageBuilder":
"""Set the caller UPN baggage value."""
self._set(GEN_AI_CALLER_UPN_KEY, value)
self._set(USER_EMAIL_KEY, value)
return self

def caller_client_ip(self, value: str | None) -> "BaggageBuilder":
Expand All @@ -177,16 +177,6 @@ def conversation_item_link(self, value: str | None) -> "BaggageBuilder":
self._set(GEN_AI_CONVERSATION_ITEM_LINK_KEY, value)
return self

@deprecated("Use channel_name() instead")
def source_metadata_name(self, value: str | None) -> "BaggageBuilder":
"""Set the execution source metadata name (e.g., channel name)."""
return self.channel_name(value)

@deprecated("Use channel_links() instead")
def source_metadata_description(self, value: str | None) -> "BaggageBuilder":
"""Set the execution source metadata description (e.g., channel description)."""
return self.channel_links(value)

def session_id(self, value: str | None) -> "BaggageBuilder":
"""Set the session ID baggage value."""
self._set(SESSION_ID_KEY, value)
Expand All @@ -203,7 +193,7 @@ def channel_name(self, value: str | None) -> "BaggageBuilder":
return self

def channel_links(self, value: str | None) -> "BaggageBuilder":
"""Sets the channel link baggage value. (e.g., channel links or description)."""
"""Sets the channel link baggage value."""
self._set(CHANNEL_LINK_KEY, value)
return self

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@
GEN_AI_AGENT_AUID_KEY,
GEN_AI_AGENT_BLUEPRINT_ID_KEY,
GEN_AI_AGENT_DESCRIPTION_KEY,
GEN_AI_AGENT_EMAIL_KEY,
GEN_AI_AGENT_ID_KEY,
GEN_AI_AGENT_NAME_KEY,
GEN_AI_AGENT_PLATFORM_ID_KEY,
GEN_AI_AGENT_UPN_KEY,
GEN_AI_CONVERSATION_ID_KEY,
GEN_AI_ICON_URI_KEY,
GEN_AI_OPERATION_NAME_KEY,
Expand Down Expand Up @@ -187,7 +187,7 @@ def __init__(
GEN_AI_AGENT_DESCRIPTION_KEY, agent_details.agent_description
)
self.set_tag_maybe(GEN_AI_AGENT_AUID_KEY, agent_details.agent_auid)
self.set_tag_maybe(GEN_AI_AGENT_UPN_KEY, agent_details.agent_upn)
self.set_tag_maybe(GEN_AI_AGENT_EMAIL_KEY, agent_details.agent_upn)
self.set_tag_maybe(
GEN_AI_AGENT_BLUEPRINT_ID_KEY, agent_details.agent_blueprint_id
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from dataclasses import dataclass

from .execution_type import ExecutionType
from .source_metadata import SourceMetadata
from .channel import Channel


@dataclass
Expand All @@ -16,4 +16,4 @@ class Request:
content: str
execution_type: ExecutionType
session_id: str | None = None
source_metadata: SourceMetadata | None = None
channel: Channel | None = None

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
consts.GEN_AI_AGENT_ID_KEY, # gen_ai.agent.id
consts.GEN_AI_AGENT_NAME_KEY, # gen_ai.agent.name
consts.GEN_AI_AGENT_DESCRIPTION_KEY, # gen_ai.agent.description
consts.GEN_AI_AGENT_UPN_KEY, # microsoft.agent.user.upn
consts.GEN_AI_AGENT_EMAIL_KEY, # microsoft.agent.user.email
consts.GEN_AI_AGENT_BLUEPRINT_ID_KEY, # microsoft.a365.agent.blueprint.id
consts.GEN_AI_AGENT_AUID_KEY, # microsoft.agent.user.id
consts.GEN_AI_AGENT_PLATFORM_ID_KEY, # microsoft.a365.agent.platform.id
Expand All @@ -29,14 +29,14 @@
# Invoke Agent–specific attributes
INVOKE_AGENT_ATTRIBUTES = [
# Caller / Invoker attributes
consts.GEN_AI_CALLER_ID_KEY, # microsoft.caller.id
consts.GEN_AI_CALLER_NAME_KEY, # microsoft.caller.name
consts.GEN_AI_CALLER_UPN_KEY, # microsoft.caller.upn
consts.USER_ID_KEY, # user.id
consts.USER_NAME_KEY, # user.name
consts.USER_EMAIL_KEY, # user.email
# Caller Agent (A2A) attributes
consts.GEN_AI_CALLER_AGENT_ID_KEY, # microsoft.a365.caller.agent.id
consts.GEN_AI_CALLER_AGENT_NAME_KEY, # microsoft.a365.caller.agent.name
consts.GEN_AI_CALLER_AGENT_USER_ID_KEY, # microsoft.a365.caller.agent.user.id
consts.GEN_AI_CALLER_AGENT_UPN_KEY, # microsoft.a365.caller.agent.user.upn
consts.GEN_AI_CALLER_AGENT_EMAIL_KEY, # microsoft.a365.caller.agent.user.email
consts.GEN_AI_CALLER_AGENT_APPLICATION_ID_KEY, # microsoft.a365.caller.agent.blueprint.id
consts.GEN_AI_CALLER_AGENT_PLATFORM_ID_KEY, # microsoft.a365.caller.agent.platform.id
consts.GEN_AI_EXECUTION_TYPE_KEY, # gen_ai.execution.type
Expand Down
Loading
Loading