From d7ad4ab5e265158435a4156c61284580b516a61f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Halber?= Date: Thu, 19 Mar 2026 17:01:11 -0700 Subject: [PATCH 1/2] fix: langchain python pkg got updated, some submodules are now accessible with langchain_classic module fix: update imports to handle new langchain_core Also supports langchain_classic and langchain<1 Remove unused AgentAction import --- py/src/braintrust/wrappers/langchain.py | 35 +++++++++++++++++-------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/py/src/braintrust/wrappers/langchain.py b/py/src/braintrust/wrappers/langchain.py index 6beeb578..3ff11d86 100644 --- a/py/src/braintrust/wrappers/langchain.py +++ b/py/src/braintrust/wrappers/langchain.py @@ -9,18 +9,31 @@ _logger = logging.getLogger("braintrust.wrappers.langchain") try: - from langchain.callbacks.base import BaseCallbackHandler - from langchain.schema import Document - from langchain.schema.agent import AgentAction - from langchain.schema.messages import BaseMessage - from langchain.schema.output import LLMResult + # Modern langchain + from langchain_core.callbacks.base import BaseCallbackHandler + from langchain_core.documents.base import Document + from langchain_core.messages.base import BaseMessage + from langchain_core.outputs.llm_result import LLMResult except ImportError: - _logger.warning("Failed to import langchain, using stubs") - BaseCallbackHandler = object - Document = object - AgentAction = object - BaseMessage = object - LLMResult = object + try: + # after the release of langchain v1, these submodules were also migrated to langchain_classic + from langchain_classic.callbacks.base import BaseCallbackHandler + from langchain_classic.schema import Document + from langchain_classic.schema.messages import BaseMessage + from langchain_classic.schema.output import LLMResult + except ImportError: + try: + # Old langchain from before the v1 version and the creation of langchain_classic + from langchain.callbacks.base import BaseCallbackHandler + from langchain.schema import Document + from langchain.schema.messages import BaseMessage + from langchain.schema.output import LLMResult + except ImportError: + raise ImportError( + "Could not import langchain callbacks and schema submodules. " + "Install one of: langchain_classic, langchain-core, or langchain<1." + ) + langchain_parent = contextvars.ContextVar("langchain_current_span", default=None) From 98ac9b1500ed19d3e009cc9dede2280528d37def Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Halber?= Date: Tue, 24 Mar 2026 00:26:16 +0000 Subject: [PATCH 2/2] chore: log_conn was renamed to api_conn in commit 20cb94f, but some references of log_conn subsisted --- py/src/braintrust/cli/install/redshift.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/py/src/braintrust/cli/install/redshift.py b/py/src/braintrust/cli/install/redshift.py index 6571acbb..d8b41b4b 100644 --- a/py/src/braintrust/cli/install/redshift.py +++ b/py/src/braintrust/cli/install/redshift.py @@ -4,7 +4,7 @@ from hashlib import md5 # pylint: disable=no-name-in-module -from ... import log_conn, login +from ... import api_conn, login # pylint: disable=no-name-in-module from ...aws import iam, redshift_serverless @@ -186,7 +186,7 @@ def main(args): login_kwargs = {"org_name": args.org_name} if args.org_name else {} login(**login_kwargs) - resp = log_conn().get( + resp = api_conn().get( "/dw-test", params={"iam_role": role["Role"]["Arn"], "msk_cluster_arn": msk_cluster_arn}, )