From 326335e649d3f39e5b7c42d5ee3af33a11225c4b Mon Sep 17 00:00:00 2001 From: Tanushree Sharma Date: Thu, 12 Mar 2026 17:12:55 -0700 Subject: [PATCH] add metadata --- libs/core/langchain_core/language_models/base.py | 12 ++++++++++++ .../langchain_core/language_models/chat_models.py | 8 ++++---- libs/core/langchain_core/language_models/llms.py | 12 ++++++------ libs/langchain_v1/langchain/agents/factory.py | 3 ++- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/libs/core/langchain_core/language_models/base.py b/libs/core/langchain_core/language_models/base.py index 55ca3a5d24e..659f22ee442 100644 --- a/libs/core/langchain_core/language_models/base.py +++ b/libs/core/langchain_core/language_models/base.py @@ -69,6 +69,8 @@ class LangSmithParams(TypedDict, total=False): ls_stop: list[str] | None """Stop words for generation.""" + ls_integration: str + """Integration that created the trace.""" @cache # Cache the tokenizer @@ -299,6 +301,16 @@ class BaseLanguageModel( # generate responses that match a given schema. raise NotImplementedError + def _get_ls_params_with_defaults( + self, + stop: list[str] | None = None, + **kwargs: Any, + ) -> LangSmithParams: + """Wrap _get_ls_params to always include ls_integration.""" + ls_params = self._get_ls_params(stop=stop, **kwargs) + ls_params["ls_integration"] = "langchain" + return ls_params + @property def _identifying_params(self) -> Mapping[str, Any]: """Get the identifying parameters.""" diff --git a/libs/core/langchain_core/language_models/chat_models.py b/libs/core/langchain_core/language_models/chat_models.py index 32f198532e6..92b79e20759 100644 --- a/libs/core/langchain_core/language_models/chat_models.py +++ b/libs/core/langchain_core/language_models/chat_models.py @@ -505,7 +505,7 @@ class BaseChatModel(BaseLanguageModel[AIMessage], ABC): options = {"stop": stop, **kwargs, **ls_structured_output_format_dict} inheritable_metadata = { **(config.get("metadata") or {}), - **self._get_ls_params(stop=stop, **kwargs), + **self._get_ls_params_with_defaults(stop=stop, **kwargs), } callback_manager = CallbackManager.configure( config.get("callbacks"), @@ -633,7 +633,7 @@ class BaseChatModel(BaseLanguageModel[AIMessage], ABC): options = {"stop": stop, **kwargs, **ls_structured_output_format_dict} inheritable_metadata = { **(config.get("metadata") or {}), - **self._get_ls_params(stop=stop, **kwargs), + **self._get_ls_params_with_defaults(stop=stop, **kwargs), } callback_manager = AsyncCallbackManager.configure( config.get("callbacks"), @@ -899,7 +899,7 @@ class BaseChatModel(BaseLanguageModel[AIMessage], ABC): options = {"stop": stop, **ls_structured_output_format_dict} inheritable_metadata = { **(metadata or {}), - **self._get_ls_params(stop=stop, **kwargs), + **self._get_ls_params_with_defaults(stop=stop, **kwargs), } callback_manager = CallbackManager.configure( @@ -1022,7 +1022,7 @@ class BaseChatModel(BaseLanguageModel[AIMessage], ABC): options = {"stop": stop, **ls_structured_output_format_dict} inheritable_metadata = { **(metadata or {}), - **self._get_ls_params(stop=stop, **kwargs), + **self._get_ls_params_with_defaults(stop=stop, **kwargs), } callback_manager = AsyncCallbackManager.configure( diff --git a/libs/core/langchain_core/language_models/llms.py b/libs/core/langchain_core/language_models/llms.py index fa034675d89..e5400d16d4d 100644 --- a/libs/core/langchain_core/language_models/llms.py +++ b/libs/core/langchain_core/language_models/llms.py @@ -527,7 +527,7 @@ class BaseLLM(BaseLanguageModel[str], ABC): options = {"stop": stop} inheritable_metadata = { **(config.get("metadata") or {}), - **self._get_ls_params(stop=stop, **kwargs), + **self._get_ls_params_with_defaults(stop=stop, **kwargs), } callback_manager = CallbackManager.configure( config.get("callbacks"), @@ -597,7 +597,7 @@ class BaseLLM(BaseLanguageModel[str], ABC): options = {"stop": stop} inheritable_metadata = { **(config.get("metadata") or {}), - **self._get_ls_params(stop=stop, **kwargs), + **self._get_ls_params_with_defaults(stop=stop, **kwargs), } callback_manager = AsyncCallbackManager.configure( config.get("callbacks"), @@ -906,14 +906,14 @@ class BaseLLM(BaseLanguageModel[str], ABC): metadata = [ { **(meta or {}), - **self._get_ls_params(stop=stop, **kwargs), + **self._get_ls_params_with_defaults(stop=stop, **kwargs), } for meta in metadata ] elif isinstance(metadata, dict): metadata = { **(metadata or {}), - **self._get_ls_params(stop=stop, **kwargs), + **self._get_ls_params_with_defaults(stop=stop, **kwargs), } if ( isinstance(callbacks, list) @@ -1173,14 +1173,14 @@ class BaseLLM(BaseLanguageModel[str], ABC): metadata = [ { **(meta or {}), - **self._get_ls_params(stop=stop, **kwargs), + **self._get_ls_params_with_defaults(stop=stop, **kwargs), } for meta in metadata ] elif isinstance(metadata, dict): metadata = { **(metadata or {}), - **self._get_ls_params(stop=stop, **kwargs), + **self._get_ls_params_with_defaults(stop=stop, **kwargs), } # Create callback managers if isinstance(callbacks, list) and ( diff --git a/libs/langchain_v1/langchain/agents/factory.py b/libs/langchain_v1/langchain/agents/factory.py index e57075cb860..b5ba7aea212 100644 --- a/libs/langchain_v1/langchain/agents/factory.py +++ b/libs/langchain_v1/langchain/agents/factory.py @@ -1630,8 +1630,9 @@ def create_agent( ) config: RunnableConfig = {"recursion_limit": 10_000} + config["metadata"] = {"ls_integration": "langchain"} if name: - config["metadata"] = {"lc_agent_name": name} + config["metadata"]["lc_agent_name"] = name return graph.compile( checkpointer=checkpointer,