Skip to content

Commit ba4f87e

Browse files
author
Jesus Terrazas
committed
Merge branch 'main' into users/jterrazas/google-adk-support
2 parents 2a8b5c7 + 61d7807 commit ba4f87e

4 files changed

Lines changed: 1235 additions & 1624 deletions

File tree

libraries/microsoft-agents-a365-observability-core/microsoft_agents_a365/observability/core/invoke_agent_scope.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
GEN_AI_CALLER_AGENT_ID_KEY,
1212
GEN_AI_CALLER_AGENT_NAME_KEY,
1313
GEN_AI_CALLER_AGENT_TENANT_ID_KEY,
14+
GEN_AI_CALLER_AGENT_TYPE_KEY,
1415
GEN_AI_CALLER_AGENT_UPN_KEY,
1516
GEN_AI_CALLER_AGENT_USER_CLIENT_IP,
1617
GEN_AI_CALLER_AGENT_USER_ID_KEY,
@@ -138,6 +139,10 @@ def __init__(
138139
if caller_agent_details:
139140
self.set_tag_maybe(GEN_AI_CALLER_AGENT_NAME_KEY, caller_agent_details.agent_name)
140141
self.set_tag_maybe(GEN_AI_CALLER_AGENT_ID_KEY, caller_agent_details.agent_id)
142+
self.set_tag_maybe(
143+
GEN_AI_CALLER_AGENT_TYPE_KEY,
144+
caller_agent_details.agent_type.value if caller_agent_details.agent_type else None,
145+
)
141146
self.set_tag_maybe(
142147
GEN_AI_CALLER_AGENT_APPLICATION_ID_KEY, caller_agent_details.agent_blueprint_id
143148
)

libraries/microsoft-agents-a365-observability-core/microsoft_agents_a365/observability/core/trace_processor/util.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
# Caller Agent (A2A) attributes
4242
consts.GEN_AI_CALLER_AGENT_ID_KEY, # gen_ai.caller.agent.id
4343
consts.GEN_AI_CALLER_AGENT_NAME_KEY, # gen_ai.caller.agent.name
44+
consts.GEN_AI_CALLER_AGENT_TYPE_KEY, # gen_ai.caller.agent.type
4445
consts.GEN_AI_CALLER_AGENT_USER_ID_KEY, # gen_ai.caller.agent.userid
4546
consts.GEN_AI_CALLER_AGENT_UPN_KEY, # gen_ai.caller.agent.upn
4647
consts.GEN_AI_CALLER_AGENT_TENANT_ID_KEY, # gen_ai.caller.agent.tenantid

tests/observability/core/test_invoke_agent_scope.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@
2121
)
2222
from microsoft_agents_a365.observability.core.config import _telemetry_manager
2323
from microsoft_agents_a365.observability.core.constants import (
24+
GEN_AI_CALLER_AGENT_TYPE_KEY,
2425
GEN_AI_CALLER_AGENT_USER_CLIENT_IP,
2526
GEN_AI_EXECUTION_SOURCE_DESCRIPTION_KEY,
2627
GEN_AI_EXECUTION_SOURCE_NAME_KEY,
2728
GEN_AI_EXECUTION_TYPE_KEY,
2829
GEN_AI_INPUT_MESSAGES_KEY,
2930
)
31+
from microsoft_agents_a365.observability.core.models.agent_type import AgentType
3032
from microsoft_agents_a365.observability.core.models.caller_details import CallerDetails
3133
from microsoft_agents_a365.observability.core.opentelemetry_scope import OpenTelemetryScope
3234
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
@@ -94,6 +96,7 @@ def setUpClass(cls):
9496
agent_upn="agent@contoso.com",
9597
tenant_id="tenant-789",
9698
agent_client_ip="192.168.1.100",
99+
agent_type=AgentType.DECLARATIVE_AGENT,
97100
)
98101

99102
def setUp(self):
@@ -232,6 +235,39 @@ def test_caller_agent_client_ip_in_scope(self):
232235
span_attributes[GEN_AI_CALLER_AGENT_USER_CLIENT_IP], "192.168.1.100"
233236
)
234237

238+
def test_caller_agent_type_in_scope(self):
239+
"""Test that caller agent type is properly set when creating InvokeAgentScope."""
240+
# Set up tracer to capture spans
241+
span_exporter = InMemorySpanExporter()
242+
tracer_provider = get_tracer_provider()
243+
tracer_provider.add_span_processor(SimpleSpanProcessor(span_exporter))
244+
245+
# Create scope with caller agent details that include agent_type
246+
scope = InvokeAgentScope.start(
247+
invoke_agent_details=self.invoke_details,
248+
tenant_details=self.tenant_details,
249+
caller_agent_details=self.caller_agent_details,
250+
)
251+
252+
# Verify scope was created and caller agent details contain the expected type
253+
self.assertIsNotNone(scope)
254+
self.assertEqual(self.caller_agent_details.agent_type, AgentType.DECLARATIVE_AGENT)
255+
scope.dispose()
256+
257+
# Verify the agent type is set as a span attribute
258+
finished_spans = span_exporter.get_finished_spans()
259+
self.assertTrue(len(finished_spans) > 0, "Expected at least one span to be created")
260+
261+
span = finished_spans[-1]
262+
span_attributes = getattr(span, "attributes", {}) or {}
263+
264+
# Verify the caller agent type is set as a span attribute
265+
self.assertIn(GEN_AI_CALLER_AGENT_TYPE_KEY, span_attributes)
266+
self.assertEqual(
267+
span_attributes[GEN_AI_CALLER_AGENT_TYPE_KEY],
268+
AgentType.DECLARATIVE_AGENT.value,
269+
)
270+
235271

236272
if __name__ == "__main__":
237273
# Run pytest only on the current file

0 commit comments

Comments
 (0)