diff --git a/libs/community/langchain_community/agents/openai_assistant/base.py b/libs/community/langchain_community/agents/openai_assistant/base.py index 136917eacec..d2b1b7c02ac 100644 --- a/libs/community/langchain_community/agents/openai_assistant/base.py +++ b/libs/community/langchain_community/agents/openai_assistant/base.py @@ -301,7 +301,7 @@ class OpenAIAssistantV2Runnable(OpenAIAssistantRunnable): inheritable_metadata=config.get("metadata"), ) run_manager = callback_manager.on_chain_start( - dumpd(self), input, name=config.get("run_name") + dumpd(self), input, name=config.get("run_name") or self.get_name() ) files = _convert_file_ids_into_attachments(kwargs.get("file_ids", [])) @@ -437,7 +437,7 @@ class OpenAIAssistantV2Runnable(OpenAIAssistantRunnable): inheritable_metadata=config.get("metadata"), ) run_manager = callback_manager.on_chain_start( - dumpd(self), input, name=config.get("run_name") + dumpd(self), input, name=config.get("run_name") or self.get_name() ) files = _convert_file_ids_into_attachments(kwargs.get("file_ids", [])) diff --git a/libs/community/tests/unit_tests/callbacks/test_callback_manager.py b/libs/community/tests/unit_tests/callbacks/test_callback_manager.py index dbc414f053b..9f7f53554a7 100644 --- a/libs/community/tests/unit_tests/callbacks/test_callback_manager.py +++ b/libs/community/tests/unit_tests/callbacks/test_callback_manager.py @@ -121,4 +121,4 @@ def test_callback_manager_configure_context_vars( assert cb.completion_tokens == 1 assert cb.total_cost > 0 wait_for_all_tracers() - assert LangChainTracer._persist_run_single.call_count == 1 # type: ignore + assert LangChainTracer._persist_run_single.call_count == 4 # type: ignore diff --git a/libs/core/langchain_core/tracers/schemas.py b/libs/core/langchain_core/tracers/schemas.py index 5f6c8ed8c6b..8e3692d7ac1 100644 --- a/libs/core/langchain_core/tracers/schemas.py +++ b/libs/core/langchain_core/tracers/schemas.py @@ -135,11 +135,13 @@ class Run(BaseRunV2): @root_validator(pre=True) def assign_name(cls, values: dict) -> dict: """Assign name to the run.""" - if values.get("name") is None: + if values.get("name") is None and values["serialized"] is not None: if "name" in values["serialized"]: values["name"] = values["serialized"]["name"] elif "id" in values["serialized"]: values["name"] = values["serialized"]["id"][-1] + if values.get("name") is None: + values["name"] = "Unnamed" if values.get("events") is None: values["events"] = [] return values diff --git a/libs/langchain/langchain/agents/openai_assistant/base.py b/libs/langchain/langchain/agents/openai_assistant/base.py index e7d4d2bfa9c..0fbbbe85e8b 100644 --- a/libs/langchain/langchain/agents/openai_assistant/base.py +++ b/libs/langchain/langchain/agents/openai_assistant/base.py @@ -310,7 +310,7 @@ class OpenAIAssistantRunnable(RunnableSerializable[Dict, OutputType]): inheritable_metadata=config.get("metadata"), ) run_manager = callback_manager.on_chain_start( - dumpd(self), input, name=config.get("run_name") + dumpd(self), input, name=config.get("run_name") or self.get_name() ) try: # Being run within AgentExecutor and there are tool outputs to submit. @@ -429,7 +429,7 @@ class OpenAIAssistantRunnable(RunnableSerializable[Dict, OutputType]): inheritable_metadata=config.get("metadata"), ) run_manager = callback_manager.on_chain_start( - dumpd(self), input, name=config.get("run_name") + dumpd(self), input, name=config.get("run_name") or self.get_name() ) try: # Being run within AgentExecutor and there are tool outputs to submit. diff --git a/libs/langchain/langchain/chains/llm.py b/libs/langchain/langchain/chains/llm.py index 29ba6b17723..123cacc58e5 100644 --- a/libs/langchain/langchain/chains/llm.py +++ b/libs/langchain/langchain/chains/llm.py @@ -242,6 +242,7 @@ class LLMChain(Chain): run_manager = callback_manager.on_chain_start( None, {"input_list": input_list}, + name=self.get_name(), ) try: response = self.generate(input_list, run_manager=run_manager) @@ -262,6 +263,7 @@ class LLMChain(Chain): run_manager = await callback_manager.on_chain_start( None, {"input_list": input_list}, + name=self.get_name(), ) try: response = await self.agenerate(input_list, run_manager=run_manager)