Skip to content

Commit f720abc

Browse files
update tracer and utility
1 parent 062f203 commit f720abc

File tree

3 files changed

+262
-49
lines changed

3 files changed

+262
-49
lines changed

libraries/microsoft-agents-a365-observability-extensions-langchain/microsoft_agents_a365/observability/extensions/langchain/tracer.py

Lines changed: 61 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515

1616
from langchain_core.tracers import BaseTracer, LangChainTracer
1717
from langchain_core.tracers.schemas import Run
18+
from microsoft_agents_a365.observability.core.constants import (
19+
GEN_AI_AGENT_NAME_KEY,
20+
INVOKE_AGENT_OPERATION_NAME,
21+
)
1822
from microsoft_agents_a365.observability.core.inference_operation_type import InferenceOperationType
1923
from microsoft_agents_a365.observability.core.utils import (
2024
DictWithLock,
@@ -37,11 +41,14 @@
3741
function_calls,
3842
input_messages,
3943
invocation_parameters,
44+
invoke_agent_input_message,
45+
invoke_agent_output_message,
4046
llm_provider,
4147
metadata,
4248
model_name,
4349
output_messages,
4450
prompts,
51+
set_execution_type,
4552
token_counts,
4653
tools,
4754
)
@@ -111,8 +118,17 @@ def _start_trace(self, run: Run) -> None:
111118
# We can't use real time because the handler may be
112119
# called in a background thread.
113120
start_time_utc_nano = as_utc_nano(run.start_time)
121+
122+
# Determine span name based on run type
123+
if run.run_type == "chain" and run.name == "LangGraph":
124+
span_name = f"invoke_agent {run.name}"
125+
elif run.run_type.lower() == "tool":
126+
span_name = f"execute_tool {run.name}"
127+
else:
128+
span_name = run.name
129+
114130
span = self._tracer.start_span(
115-
name=run.name,
131+
name=span_name,
116132
context=parent_context,
117133
start_time=start_time_utc_nano,
118134
)
@@ -197,27 +213,52 @@ def _update_span(span: Span, run: Run) -> None:
197213
else:
198214
span.set_status(trace_api.Status(trace_api.StatusCode.ERROR, run.error))
199215

216+
span.set_attributes(dict(get_attributes_from_context()))
217+
200218
if run.run_type == "llm" and run.outputs.get("llm_output").get("id").startswith("chat"):
201219
span.update_name(f"{InferenceOperationType.CHAT.value.lower()} {span.name}")
202-
elif run.run_type.lower() == "tool":
203-
span.update_name(f"execute_tool {span.name}")
204-
span.set_attributes(dict(get_attributes_from_context()))
205-
span.set_attributes(
206-
dict(
207-
flatten(
208-
chain(
209-
add_operation_type(run),
210-
prompts(run.inputs),
211-
input_messages(run.inputs),
212-
output_messages(run.outputs),
213-
invocation_parameters(run),
214-
llm_provider(run.extra),
215-
model_name(run.outputs, run.extra),
216-
token_counts(run.outputs),
217-
function_calls(run.outputs),
218-
tools(run),
219-
metadata(run),
220+
is_invoke_agent = span.name.startswith(INVOKE_AGENT_OPERATION_NAME)
221+
222+
# If this is an invoke_agent span, update span name with agent name
223+
if is_invoke_agent:
224+
agent_name = None
225+
if hasattr(span, "_attributes") and span._attributes:
226+
agent_name = span._attributes.get(GEN_AI_AGENT_NAME_KEY)
227+
if agent_name:
228+
span.update_name(f"{INVOKE_AGENT_OPERATION_NAME} {agent_name}")
229+
230+
# For invoke_agent spans, add input/output messages
231+
if is_invoke_agent:
232+
span.set_attributes(
233+
dict(
234+
flatten(
235+
chain(
236+
set_execution_type(),
237+
add_operation_type(run),
238+
invoke_agent_input_message(run.inputs),
239+
invoke_agent_output_message(run.outputs),
240+
metadata(run),
241+
)
242+
)
243+
)
244+
)
245+
else:
246+
span.set_attributes(
247+
dict(
248+
flatten(
249+
chain(
250+
add_operation_type(run),
251+
prompts(run.inputs),
252+
input_messages(run.inputs),
253+
output_messages(run.outputs),
254+
invocation_parameters(run),
255+
llm_provider(run.extra),
256+
model_name(run.outputs, run.extra),
257+
token_counts(run.outputs),
258+
function_calls(run.outputs),
259+
tools(run),
260+
metadata(run),
261+
)
220262
)
221263
)
222264
)
223-
)

libraries/microsoft-agents-a365-observability-extensions-langchain/microsoft_agents_a365/observability/extensions/langchain/tracer_instrumentor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
from microsoft_agents_a365.observability.extensions.langchain.tracer import CustomLangChainTracer
2323

24-
_INSTRUMENTS: str = "langchain_core >= 0.1.0"
24+
_INSTRUMENTS: str = "langchain_core >= 1.2.0"
2525

2626

2727
class CustomLangChainInstrumentor(BaseInstrumentor):

0 commit comments

Comments
 (0)