diff --git a/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/patch.py b/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/patch.py index 6f6ce72ea8..f836105546 100644 --- a/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/patch.py +++ b/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/patch.py @@ -468,7 +468,7 @@ def wrapper(wrapped, _instance, args, kwargs): span.set_attribute(GenAIAttributes.GEN_AI_AGENT_NAME, agent_name) # Extract system instructions from prompt/system_prompt parameter - # LangGraph uses "prompt", LangChain uses "system_prompt" + # LangGraph uses "prompt", LangChain uses "system_prompt." system_instructions = kwargs.get("prompt") or kwargs.get("system_prompt") if system_instructions: if isinstance(system_instructions, str): @@ -486,7 +486,14 @@ def wrapper(wrapped, _instance, args, kwargs): tools = args[1] if tools: tool_definitions = [] - for tool in tools: + if hasattr(tools, "tools_by_name"): + iterable_tools = tools.tools_by_name.values() + elif isinstance(tools, (list, tuple, set)): + iterable_tools = tools + else: + iterable_tools = [tools] + + for tool in iterable_tools: tool_def = _extract_tool_definition(tool) if tool_def: tool_definitions.append(tool_def)