Skip to content

Commit 9ff5888

Browse files
committed
Format agent messages per GenAI semconv
1 parent 281c0ff commit 9ff5888

File tree

2 files changed

+112
-34
lines changed

2 files changed

+112
-34
lines changed

lab/5-Observability/01-trace-agent-session.ipynb

Lines changed: 56 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,57 @@
7070
" \"🎨 Great choice! Zava GripLock Primer at $24 seals moisture. \"\n",
7171
" \"Need brushes too?\"\n",
7272
")\n",
73+
"tool_call_id = \"call-42\"\n",
74+
"tool_arguments = {\"sku\": \"PRIMER-4821\", \"query\": customer_prompt}\n",
75+
"tool_result = {\n",
76+
" \"name\": \"Zava GripLock Primer\",\n",
77+
" \"price\": 24.0,\n",
78+
" \"available_stock\": 67\n",
79+
"}\n",
80+
"input_messages = [\n",
81+
" {\n",
82+
" \"role\": \"system\",\n",
83+
" \"parts\": [\n",
84+
" {\"type\": \"text\", \"content\": system_prompt}\n",
85+
" ],\n",
86+
" },\n",
87+
" {\n",
88+
" \"role\": \"user\",\n",
89+
" \"parts\": [\n",
90+
" {\"type\": \"text\", \"content\": customer_prompt}\n",
91+
" ],\n",
92+
" },\n",
93+
" {\n",
94+
" \"role\": \"assistant\",\n",
95+
" \"parts\": [\n",
96+
" {\n",
97+
" \"type\": \"tool_call\",\n",
98+
" \"id\": tool_call_id,\n",
99+
" \"name\": \"product_search\",\n",
100+
" \"arguments\": tool_arguments\n",
101+
" }\n",
102+
" ],\n",
103+
" },\n",
104+
" {\n",
105+
" \"role\": \"tool\",\n",
106+
" \"parts\": [\n",
107+
" {\n",
108+
" \"type\": \"tool_call_response\",\n",
109+
" \"id\": tool_call_id,\n",
110+
" \"result\": tool_result\n",
111+
" }\n",
112+
" ],\n",
113+
" },\n",
114+
"]\n",
115+
"output_messages = [\n",
116+
" {\n",
117+
" \"role\": \"assistant\",\n",
118+
" \"parts\": [\n",
119+
" {\"type\": \"text\", \"content\": agent_reply}\n",
120+
" ],\n",
121+
" \"finish_reason\": \"stop\"\n",
122+
" }\n",
123+
"]\n",
73124
"\n",
74125
"with tracer.start_as_current_span(\"create_agent cora-retail-agent\", kind=SpanKind.CLIENT) as span:\n",
75126
" span.set_attribute(\"gen_ai.provider.name\", \"azure.ai.inference\")\n",
@@ -101,30 +152,18 @@
101152
" span.set_attribute(\"gen_ai.usage.output_tokens\", 38)\n",
102153
" span.set_attribute(\"gen_ai.conversation.id\", conversation_id)\n",
103154
" span.set_attribute(\"gen_ai.system_instructions\", system_prompt)\n",
104-
" span.set_attribute(\"gen_ai.input.messages\", json.dumps([\n",
105-
" {\"role\": \"system\", \"content\": system_prompt},\n",
106-
" {\"role\": \"user\", \"content\": customer_prompt}\n",
107-
" ], ensure_ascii=False))\n",
108-
" span.set_attribute(\"gen_ai.output.messages\", json.dumps([\n",
109-
" {\"role\": \"assistant\", \"content\": agent_reply}\n",
110-
" ], ensure_ascii=False))\n",
155+
" span.set_attribute(\"gen_ai.input.messages\", json.dumps(input_messages, ensure_ascii=False))\n",
156+
" span.set_attribute(\"gen_ai.output.messages\", json.dumps(output_messages, ensure_ascii=False))\n",
111157
" span.set_attribute(\"server.address\", \"cora-agents.eastus2.inference.ai.azure.com\")\n",
112158
" span.set_attribute(\"server.port\", 443)\n",
113159
"\n",
114160
" with tracer.start_as_current_span(\"execute_tool product_search\", kind=SpanKind.INTERNAL) as tool_span:\n",
115161
" tool_span.set_attribute(\"gen_ai.operation.name\", \"execute_tool\")\n",
116162
" tool_span.set_attribute(\"gen_ai.tool.name\", \"product_search\")\n",
117163
" tool_span.set_attribute(\"gen_ai.tool.type\", \"function\")\n",
118-
" tool_span.set_attribute(\"gen_ai.tool.call.id\", \"call-42\")\n",
119-
" tool_span.set_attribute(\"gen_ai.tool.call.arguments\", json.dumps({\n",
120-
" \"sku\": \"PRIMER-4821\",\n",
121-
" \"query\": customer_prompt\n",
122-
" }))\n",
123-
" tool_span.set_attribute(\"gen_ai.tool.call.result\", json.dumps({\n",
124-
" \"name\": \"Zava GripLock Primer\",\n",
125-
" \"price\": 24.0,\n",
126-
" \"available_stock\": 67\n",
127-
" }))\n",
164+
" tool_span.set_attribute(\"gen_ai.tool.call.id\", tool_call_id)\n",
165+
" tool_span.set_attribute(\"gen_ai.tool.call.arguments\", json.dumps(tool_arguments))\n",
166+
" tool_span.set_attribute(\"gen_ai.tool.call.result\", json.dumps(tool_result))\n",
128167
"\n",
129168
"print(\"Done — inspect the console output to see each span and its attributes.\")"
130169
]

lab/5-Observability/02-collect-span-snapshots.ipynb

Lines changed: 56 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,57 @@
6464
" \"Want rollers too?\"\n",
6565
" )\n",
6666
" conversation_id = \"retail-session-002\"\n",
67+
" tool_call_id = \"call-17\"\n",
68+
" tool_arguments = {\"product_type\": \"paint\", \"finish\": \"satin\"}\n",
69+
" tool_result = {\n",
70+
" \"sku\": \"PAINT-FAST-221\",\n",
71+
" \"name\": \"Zava SwiftCoat Satin\",\n",
72+
" \"inventory\": 142\n",
73+
" }\n",
74+
" input_messages = [\n",
75+
" {\n",
76+
" \"role\": \"system\",\n",
77+
" \"parts\": [\n",
78+
" {\"type\": \"text\", \"content\": system_prompt}\n",
79+
" ],\n",
80+
" },\n",
81+
" {\n",
82+
" \"role\": \"user\",\n",
83+
" \"parts\": [\n",
84+
" {\"type\": \"text\", \"content\": customer_prompt}\n",
85+
" ],\n",
86+
" },\n",
87+
" {\n",
88+
" \"role\": \"assistant\",\n",
89+
" \"parts\": [\n",
90+
" {\n",
91+
" \"type\": \"tool_call\",\n",
92+
" \"id\": tool_call_id,\n",
93+
" \"name\": \"inventory_lookup\",\n",
94+
" \"arguments\": tool_arguments\n",
95+
" }\n",
96+
" ],\n",
97+
" },\n",
98+
" {\n",
99+
" \"role\": \"tool\",\n",
100+
" \"parts\": [\n",
101+
" {\n",
102+
" \"type\": \"tool_call_response\",\n",
103+
" \"id\": tool_call_id,\n",
104+
" \"result\": tool_result\n",
105+
" }\n",
106+
" ],\n",
107+
" },\n",
108+
" ]\n",
109+
" output_messages = [\n",
110+
" {\n",
111+
" \"role\": \"assistant\",\n",
112+
" \"parts\": [\n",
113+
" {\"type\": \"text\", \"content\": agent_reply}\n",
114+
" ],\n",
115+
" \"finish_reason\": \"stop\"\n",
116+
" }\n",
117+
" ]\n",
67118
"\n",
68119
" with tracer.start_as_current_span(\"invoke_agent cora-retail-agent\", kind=SpanKind.CLIENT) as span:\n",
69120
" span.set_attribute(\"gen_ai.provider.name\", \"azure.ai.inference\")\n",
@@ -82,30 +133,18 @@
82133
" span.set_attribute(\"gen_ai.usage.output_tokens\", 41)\n",
83134
" span.set_attribute(\"gen_ai.conversation.id\", conversation_id)\n",
84135
" span.set_attribute(\"gen_ai.system_instructions\", system_prompt)\n",
85-
" span.set_attribute(\"gen_ai.input.messages\", json.dumps([\n",
86-
" {\"role\": \"system\", \"content\": system_prompt},\n",
87-
" {\"role\": \"user\", \"content\": customer_prompt}\n",
88-
" ], ensure_ascii=False))\n",
89-
" span.set_attribute(\"gen_ai.output.messages\", json.dumps([\n",
90-
" {\"role\": \"assistant\", \"content\": agent_reply}\n",
91-
" ], ensure_ascii=False))\n",
136+
" span.set_attribute(\"gen_ai.input.messages\", json.dumps(input_messages, ensure_ascii=False))\n",
137+
" span.set_attribute(\"gen_ai.output.messages\", json.dumps(output_messages, ensure_ascii=False))\n",
92138
" span.set_attribute(\"server.address\", \"cora-agents.eastus2.inference.ai.azure.com\")\n",
93139
" span.set_attribute(\"server.port\", 443)\n",
94140
"\n",
95141
" with tracer.start_as_current_span(\"execute_tool inventory_lookup\", kind=SpanKind.INTERNAL) as tool_span:\n",
96142
" tool_span.set_attribute(\"gen_ai.operation.name\", \"execute_tool\")\n",
97143
" tool_span.set_attribute(\"gen_ai.tool.name\", \"inventory_lookup\")\n",
98144
" tool_span.set_attribute(\"gen_ai.tool.type\", \"function\")\n",
99-
" tool_span.set_attribute(\"gen_ai.tool.call.id\", \"call-17\")\n",
100-
" tool_span.set_attribute(\"gen_ai.tool.call.arguments\", json.dumps({\n",
101-
" \"product_type\": \"paint\",\n",
102-
" \"finish\": \"satin\"\n",
103-
" }))\n",
104-
" tool_span.set_attribute(\"gen_ai.tool.call.result\", json.dumps({\n",
105-
" \"sku\": \"PAINT-FAST-221\",\n",
106-
" \"name\": \"Zava SwiftCoat Satin\",\n",
107-
" \"inventory\": 142\n",
108-
" }))\n",
145+
" tool_span.set_attribute(\"gen_ai.tool.call.id\", tool_call_id)\n",
146+
" tool_span.set_attribute(\"gen_ai.tool.call.arguments\", json.dumps(tool_arguments))\n",
147+
" tool_span.set_attribute(\"gen_ai.tool.call.result\", json.dumps(tool_result))\n",
109148
"\n",
110149
"record_agent_interaction()\n",
111150
"print(\"Interaction recorded.\")"

0 commit comments

Comments
 (0)