diff --git a/sentry_sdk/integrations/langchain.py b/sentry_sdk/integrations/langchain.py index d0c5d7c4b4..21447a6655 100644 --- a/sentry_sdk/integrations/langchain.py +++ b/sentry_sdk/integrations/langchain.py @@ -641,6 +641,13 @@ def on_tool_start( SPANDATA.GEN_AI_AGENT_NAME, agent_metadata["lc_agent_name"] ) + run_name = kwargs.get("name") + if run_name: + span.set_data( + SPANDATA.GEN_AI_PIPELINE_NAME, + run_name, + ) + if should_send_default_pii() and self.include_prompts: set_data_normalized( span, diff --git a/tests/integrations/langchain/test_langchain.py b/tests/integrations/langchain/test_langchain.py index e514b30958..a711ef0c7b 100644 --- a/tests/integrations/langchain/test_langchain.py +++ b/tests/integrations/langchain/test_langchain.py @@ -223,6 +223,33 @@ def test_langchain_chat( assert chat_spans[0]["data"]["gen_ai.pipeline.name"] == "my-snazzy-pipeline" +def test_langchain_tool_call_with_run_name( + sentry_init, + capture_events, +): + sentry_init( + integrations=[ + LangchainIntegration( + include_prompts=True, + ) + ], + traces_sample_rate=1.0, + send_default_pii=True, + ) + events = capture_events() + + with start_transaction(): + get_word_length.invoke( + {"word": "eudca"}, + config={"run_name": "my-snazzy-pipeline"}, + ) + + tx = events[0] + tool_spans = list(x for x in tx["spans"] if x["op"] == "gen_ai.execute_tool") + assert len(tool_spans) == 1 + assert tool_spans[0]["data"]["gen_ai.pipeline.name"] == "my-snazzy-pipeline" + + @pytest.mark.skipif( LANGCHAIN_VERSION < (1,), reason="LangChain 1.0+ required (ONE AGENT refactor)",