@@ -65,10 +65,10 @@ configure(
6565class OpenTelemetryScope :
6666 """ Base class for OpenTelemetry tracing scopes."""
6767
68- def __init__ (self , kind , operation_name , activity_name , agent_details , tenant_details ):
68+ def __init__ (self , kind , operation_name , activity_name , agent_details ):
6969 # Creates span with given parameters
7070 # Sets common attributes (gen_ai.system, operation name)
71- # Sets agent/tenant details as span attributes
71+ # Sets agent details as span attributes
7272
7373 def __enter__ (self ):
7474 # Makes span active in current context
@@ -96,29 +96,23 @@ Traces agent invocation operations (entry point for agent requests):
9696``` python
9797from microsoft_agents_a365.observability.core import (
9898 InvokeAgentScope,
99- InvokeAgentDetails,
100- TenantDetails,
99+ InvokeAgentScopeDetails,
101100 AgentDetails,
101+ Request,
102102)
103103
104104with InvokeAgentScope.start(
105- invoke_agent_details = InvokeAgentDetails(
106- endpoint = parsed_url,
107- session_id = " session-123" ,
108- details = AgentDetails(agent_id = " agent-456" , agent_name = " MyAgent" )
109- ),
110- tenant_details = TenantDetails(tenant_id = " tenant-789" ),
111- request = Request(content = " Hello" , execution_type = ExecutionType.CHAT ),
105+ request = Request(content = " Hello" ),
106+ invoke_scope_details = InvokeAgentScopeDetails(endpoint = parsed_url),
107+ agent_details = AgentDetails(agent_id = " agent-456" , agent_name = " MyAgent" ),
112108) as scope:
113109 # Agent processing
114110 scope.record_response(" Agent response" )
115111```
116112
117113** Span attributes recorded:**
118114- Server address and port
119- - Session ID
120115- Execution source metadata
121- - Execution type
122116- Input/output messages
123117- Caller details (if provided)
124118
@@ -127,15 +121,15 @@ with InvokeAgentScope.start(
127121Traces LLM/AI model inference calls:
128122
129123``` python
130- from microsoft_agents_a365.observability.core import InferenceScope, InferenceCallDetails
124+ from microsoft_agents_a365.observability.core import InferenceScope, InferenceCallDetails, Request
131125
132126with InferenceScope.start(
133- inference_call_details = InferenceCallDetails(
127+ request = Request(content = " Hello" ),
128+ details = InferenceCallDetails(
134129 model_name = " gpt-4" ,
135130 provider = " openai"
136131 ),
137132 agent_details = agent_details,
138- tenant_details = tenant_details,
139133) as scope:
140134 # LLM call
141135 scope.record_input_tokens(100 )
@@ -148,15 +142,15 @@ with InferenceScope.start(
148142Traces tool execution operations:
149143
150144``` python
151- from microsoft_agents_a365.observability.core import ExecuteToolScope, ToolCallDetails
145+ from microsoft_agents_a365.observability.core import ExecuteToolScope, ToolCallDetails, Request
152146
153147with ExecuteToolScope.start(
154- tool_call_details = ToolCallDetails(
148+ request = Request(content = " search for weather" ),
149+ details = ToolCallDetails(
155150 tool_name = " search" ,
156151 tool_arguments = {" query" : " weather" }
157152 ),
158153 agent_details = agent_details,
159- tenant_details = tenant_details,
160154) as scope:
161155 # Tool execution
162156 scope.record_response(" Tool result" )
@@ -174,7 +168,7 @@ with BaggageBuilder() \
174168 .tenant_id(" tenant-123" ) \
175169 .agent_id(" agent-456" ) \
176170 .correlation_id(" corr-789" ) \
177- .caller_id (" user-abc" ) \
171+ .user_id (" user-abc" ) \
178172 .session_id(" session-xyz" ) \
179173 .build():
180174 # All child spans inherit this baggage
@@ -195,9 +189,11 @@ with BaggageBuilder.set_request_context(
195189| ` tenant_id(value) ` | ` tenant_id ` |
196190| ` agent_id(value) ` | ` gen_ai.agent.id ` |
197191| ` agent_auid(value) ` | ` gen_ai.agent.auid ` |
198- | ` agent_upn (value)` | ` gen_ai.agent.upn ` |
192+ | ` agent_email (value)` | ` gen_ai.agent.upn ` |
199193| ` correlation_id(value) ` | ` correlation_id ` |
200- | ` caller_id(value) ` | ` gen_ai.caller.id ` |
194+ | ` user_id(value) ` | ` gen_ai.caller.id ` |
195+ | ` user_name(value) ` | ` gen_ai.caller.name ` |
196+ | ` user_email(value) ` | ` gen_ai.caller.upn ` |
201197| ` session_id(value) ` | ` session_id ` |
202198| ` conversation_id(value) ` | ` gen_ai.conversation.id ` |
203199| ` channel_name(value) ` | ` gen_ai.execution.source.name ` |
@@ -246,14 +242,12 @@ options = Agent365ExporterOptions(
246242
247243## Data Classes
248244
249- ### InvokeAgentDetails
245+ ### InvokeAgentScopeDetails
250246
251247``` python
252248@dataclass
253- class InvokeAgentDetails :
249+ class InvokeAgentScopeDetails :
254250 endpoint: ParseResult | None # Parsed URL of the agent endpoint
255- session_id: str | None # Session identifier
256- details: AgentDetails # Agent metadata
257251```
258252
259253### AgentDetails
@@ -265,20 +259,42 @@ class AgentDetails:
265259 agent_name: str | None
266260 agent_description: str | None
267261 agent_auid: str | None # Agent unique identifier
268- agent_upn : str | None # User principal name
262+ agent_email : str | None # Agent email address
269263 agent_blueprint_id: str | None
270264 agent_type: AgentType | None
271265 tenant_id: str | None
272- conversation_id: str | None
273266 icon_uri: str | None
274267```
275268
276- ### TenantDetails
269+ ### UserDetails
277270
278271``` python
279272@dataclass
280- class TenantDetails :
281- tenant_id: str | None
273+ class UserDetails :
274+ user_id: str | None
275+ user_email: str | None
276+ user_name: str | None
277+ caller_client_ip: str | None
278+ ```
279+
280+ ### CallerDetails
281+
282+ ``` python
283+ @dataclass
284+ class CallerDetails :
285+ user_details: UserDetails | None
286+ caller_agent_details: AgentDetails | None
287+ ```
288+
289+ ### SpanDetails
290+
291+ ``` python
292+ @dataclass
293+ class SpanDetails :
294+ parent_context: Context | None
295+ start_time: int | None
296+ end_time: int | None
297+ span_kind: SpanKind | None
282298```
283299
284300### InferenceCallDetails
@@ -358,14 +374,15 @@ microsoft_agents_a365/observability/core/
358374├── invoke_agent_scope.py # Agent invocation tracing
359375├── inference_scope.py # LLM inference tracing
360376├── execute_tool_scope.py # Tool execution tracing
377+ ├── output_scope.py # Output tracing
361378├── agent_details.py # AgentDetails dataclass
362- ├── tenant_details.py # TenantDetails dataclass
363- ├── invoke_agent_details.py # InvokeAgentDetails dataclass
379+ ├── invoke_agent_scope_details.py # InvokeAgentScopeDetails dataclass
380+ ├── user_details.py # UserDetails dataclass
381+ ├── span_details.py # SpanDetails dataclass
364382├── inference_call_details.py # InferenceCallDetails dataclass
365383├── tool_call_details.py # ToolCallDetails dataclass
366384├── request.py # Request dataclass
367385├── source_metadata.py # SourceMetadata dataclass
368- ├── execution_type.py # ExecutionType enum
369386├── inference_operation_type.py # InferenceOperationType enum
370387├── tool_type.py # ToolType enum
371388├── constants.py # Attribute key constants
0 commit comments