1212# See the License for the specific language governing permissions and
1313# limitations under the License.
1414
15+ import json
1516import logging
1617import sys
1718import time
@@ -161,9 +162,11 @@ def invoke(self, *args, **kwargs):
161162 agent_id = str (uuid .uuid4 ())
162163 agent_event_dict = _construct_base_agent_event_dict (agent_name , agent_id , transaction )
163164 function_trace_name = f"invoke/{ agent_name } "
165+ agentic_subcomponent_data = {"type" : "APM-AI_AGENT" , "name" : agent_name }
164166
165167 ft = FunctionTrace (name = function_trace_name , group = "Llm/agent/LangChain" )
166168 ft .__enter__ ()
169+ ft ._add_agent_attribute ("subcomponent" , json .dumps (agentic_subcomponent_data ))
167170 try :
168171 return_val = self .__wrapped__ .invoke (* args , ** kwargs )
169172 except Exception :
@@ -189,9 +192,11 @@ async def ainvoke(self, *args, **kwargs):
189192 agent_id = str (uuid .uuid4 ())
190193 agent_event_dict = _construct_base_agent_event_dict (agent_name , agent_id , transaction )
191194 function_trace_name = f"ainvoke/{ agent_name } "
195+ agentic_subcomponent_data = {"type" : "APM-AI_AGENT" , "name" : agent_name }
192196
193197 ft = FunctionTrace (name = function_trace_name , group = "Llm/agent/LangChain" )
194198 ft .__enter__ ()
199+ ft ._add_agent_attribute ("subcomponent" , json .dumps (agentic_subcomponent_data ))
195200 try :
196201 return_val = await self .__wrapped__ .ainvoke (* args , ** kwargs )
197202 except Exception :
@@ -217,9 +222,11 @@ def stream(self, *args, **kwargs):
217222 agent_id = str (uuid .uuid4 ())
218223 agent_event_dict = _construct_base_agent_event_dict (agent_name , agent_id , transaction )
219224 function_trace_name = f"stream/{ agent_name } "
225+ agentic_subcomponent_data = {"type" : "APM-AI_AGENT" , "name" : agent_name }
220226
221227 ft = FunctionTrace (name = function_trace_name , group = "Llm/agent/LangChain" )
222228 ft .__enter__ ()
229+ ft ._add_agent_attribute ("subcomponent" , json .dumps (agentic_subcomponent_data ))
223230 try :
224231 return_val = self .__wrapped__ .stream (* args , ** kwargs )
225232 return_val = GeneratorProxy (
@@ -242,9 +249,11 @@ def astream(self, *args, **kwargs):
242249 agent_id = str (uuid .uuid4 ())
243250 agent_event_dict = _construct_base_agent_event_dict (agent_name , agent_id , transaction )
244251 function_trace_name = f"astream/{ agent_name } "
252+ agentic_subcomponent_data = {"type" : "APM-AI_AGENT" , "name" : agent_name }
245253
246254 ft = FunctionTrace (name = function_trace_name , group = "Llm/agent/LangChain" )
247255 ft .__enter__ ()
256+ ft ._add_agent_attribute ("subcomponent" , json .dumps (agentic_subcomponent_data ))
248257 try :
249258 return_val = self .__wrapped__ .astream (* args , ** kwargs )
250259 return_val = AsyncGeneratorProxy (
@@ -267,9 +276,11 @@ def transform(self, *args, **kwargs):
267276 agent_id = str (uuid .uuid4 ())
268277 agent_event_dict = _construct_base_agent_event_dict (agent_name , agent_id , transaction )
269278 function_trace_name = f"stream/{ agent_name } "
279+ agentic_subcomponent_data = {"type" : "APM-AI_AGENT" , "name" : agent_name }
270280
271281 ft = FunctionTrace (name = function_trace_name , group = "Llm/agent/LangChain" )
272282 ft .__enter__ ()
283+ ft ._add_agent_attribute ("subcomponent" , json .dumps (agentic_subcomponent_data ))
273284 try :
274285 return_val = self .__wrapped__ .transform (* args , ** kwargs )
275286 return_val = GeneratorProxy (
@@ -292,9 +303,11 @@ def atransform(self, *args, **kwargs):
292303 agent_id = str (uuid .uuid4 ())
293304 agent_event_dict = _construct_base_agent_event_dict (agent_name , agent_id , transaction )
294305 function_trace_name = f"astream/{ agent_name } "
306+ agentic_subcomponent_data = {"type" : "APM-AI_AGENT" , "name" : agent_name }
295307
296308 ft = FunctionTrace (name = function_trace_name , group = "Llm/agent/LangChain" )
297309 ft .__enter__ ()
310+ ft ._add_agent_attribute ("subcomponent" , json .dumps (agentic_subcomponent_data ))
298311 try :
299312 return_val = self .__wrapped__ .atransform (* args , ** kwargs )
300313 return_val = AsyncGeneratorProxy (
@@ -512,8 +525,11 @@ def wrap_tool_sync_run(wrapped, instance, args, kwargs):
512525 except Exception :
513526 filtered_tool_input = tool_input
514527
528+ agentic_subcomponent_data = {"type" : "APM-AI_TOOL" , "name" : tool_name }
529+
515530 ft = FunctionTrace (name = f"{ wrapped .__name__ } /{ tool_name } " , group = "Llm/tool/LangChain" )
516531 ft .__enter__ ()
532+ ft ._add_agent_attribute ("subcomponent" , json .dumps (agentic_subcomponent_data ))
517533 linking_metadata = get_trace_linking_metadata ()
518534 try :
519535 return_val = wrapped (** run_args )
@@ -573,8 +589,11 @@ async def wrap_tool_async_run(wrapped, instance, args, kwargs):
573589 except Exception :
574590 filtered_tool_input = tool_input
575591
592+ agentic_subcomponent_data = {"type" : "APM-AI_TOOL" , "name" : tool_name }
593+
576594 ft = FunctionTrace (name = f"{ wrapped .__name__ } /{ tool_name } " , group = "Llm/tool/LangChain" )
577595 ft .__enter__ ()
596+ ft ._add_agent_attribute ("subcomponent" , json .dumps (agentic_subcomponent_data ))
578597 linking_metadata = get_trace_linking_metadata ()
579598 try :
580599 return_val = await wrapped (** run_args )
0 commit comments