diff --git a/libs/core/langchain_core/pydantic_v1/__init__.py b/libs/core/langchain_core/pydantic_v1/__init__.py index d17a0ac3a9e..6dfc11dc755 100644 --- a/libs/core/langchain_core/pydantic_v1/__init__.py +++ b/libs/core/langchain_core/pydantic_v1/__init__.py @@ -1,5 +1,7 @@ from importlib import metadata +from langchain_core._api.deprecation import warn_deprecated + ## Create namespaces for pydantic v1 and v2. # This code must stay at the top of the file before other modules may # attempt to import pydantic since it adds pydantic_v1 and pydantic_v2 to sys.modules. @@ -21,3 +23,21 @@ try: _PYDANTIC_MAJOR_VERSION: int = int(metadata.version("pydantic").split(".")[0]) except metadata.PackageNotFoundError: _PYDANTIC_MAJOR_VERSION = 0 + +warn_deprecated( + "0.3.0", + removal="1.0.0", + alternative="pydantic.v1 or pydantic", + message=( + "As of langchain-core 0.3.0, LangChain uses pydantic v2 internally. " + "The langchain_core.pydantic_v1 module was a " + "compatibility shim for pydantic v1, and should no longer be used. " + "Please update the code to import from Pydantic directly.\n\n" + "For example, replace imports like: " + "`from langchain_core.pydantic_v1 import BaseModel`\n" + "with: `from pydantic import BaseModel`\n" + "or the v1 compatibility namespace if you are working in a code base " + "that has not been fully upgraded to pydantic 2 yet. " + "\tfrom pydantic.v1 import BaseModel\n" + ), +) diff --git a/libs/core/langchain_core/pydantic_v1/dataclasses.py b/libs/core/langchain_core/pydantic_v1/dataclasses.py index 2dfa3dab0aa..824da7d6b34 100644 --- a/libs/core/langchain_core/pydantic_v1/dataclasses.py +++ b/libs/core/langchain_core/pydantic_v1/dataclasses.py @@ -1,4 +1,24 @@ +from langchain_core._api import warn_deprecated + try: from pydantic.v1.dataclasses import * # noqa: F403 except ImportError: from pydantic.dataclasses import * # type: ignore # noqa: F403 + +warn_deprecated( + "0.3.0", + removal="1.0.0", + alternative="pydantic.v1 or pydantic", + message=( + "As of langchain-core 0.3.0, LangChain uses pydantic v2 internally. " + "The langchain_core.pydantic_v1 module was a " + "compatibility shim for pydantic v1, and should no longer be used. " + "Please update the code to import from Pydantic directly.\n\n" + "For example, replace imports like: " + "`from langchain_core.pydantic_v1 import BaseModel`\n" + "with: `from pydantic import BaseModel`\n" + "or the v1 compatibility namespace if you are working in a code base " + "that has not been fully upgraded to pydantic 2 yet. " + "\tfrom pydantic.v1 import BaseModel\n" + ), +) diff --git a/libs/core/langchain_core/pydantic_v1/main.py b/libs/core/langchain_core/pydantic_v1/main.py index fa8916f8350..3449832620e 100644 --- a/libs/core/langchain_core/pydantic_v1/main.py +++ b/libs/core/langchain_core/pydantic_v1/main.py @@ -1,4 +1,24 @@ +from langchain_core._api import warn_deprecated + try: from pydantic.v1.main import * # noqa: F403 except ImportError: from pydantic.main import * # type: ignore # noqa: F403 + +warn_deprecated( + "0.3.0", + removal="1.0.0", + alternative="pydantic.v1 or pydantic", + message=( + "As of langchain-core 0.3.0, LangChain uses pydantic v2 internally. " + "The langchain_core.pydantic_v1 module was a " + "compatibility shim for pydantic v1, and should no longer be used. " + "Please update the code to import from Pydantic directly.\n\n" + "For example, replace imports like: " + "`from langchain_core.pydantic_v1 import BaseModel`\n" + "with: `from pydantic import BaseModel`\n" + "or the v1 compatibility namespace if you are working in a code base " + "that has not been fully upgraded to pydantic 2 yet. " + "\tfrom pydantic.v1 import BaseModel\n" + ), +) diff --git a/libs/langchain/langchain/pydantic_v1/__init__.py b/libs/langchain/langchain/pydantic_v1/__init__.py index d17a0ac3a9e..c329193ffd3 100644 --- a/libs/langchain/langchain/pydantic_v1/__init__.py +++ b/libs/langchain/langchain/pydantic_v1/__init__.py @@ -1,5 +1,7 @@ from importlib import metadata +from langchain_core._api import warn_deprecated + ## Create namespaces for pydantic v1 and v2. # This code must stay at the top of the file before other modules may # attempt to import pydantic since it adds pydantic_v1 and pydantic_v2 to sys.modules. @@ -21,3 +23,21 @@ try: _PYDANTIC_MAJOR_VERSION: int = int(metadata.version("pydantic").split(".")[0]) except metadata.PackageNotFoundError: _PYDANTIC_MAJOR_VERSION = 0 + +warn_deprecated( + "0.3.0", + removal="1.0.0", + alternative="pydantic.v1 or pydantic", + message=( + "As of langchain-core 0.3.0, LangChain uses pydantic v2 internally. " + "The langchain.pydantic_v1 module was a " + "compatibility shim for pydantic v1, and should no longer be used. " + "Please update the code to import from Pydantic directly.\n\n" + "For example, replace imports like: " + "`from langchain.pydantic_v1 import BaseModel`\n" + "with: `from pydantic import BaseModel`\n" + "or the v1 compatibility namespace if you are working in a code base " + "that has not been fully upgraded to pydantic 2 yet. " + "\tfrom pydantic.v1 import BaseModel\n" + ), +) diff --git a/libs/langchain/langchain/pydantic_v1/dataclasses.py b/libs/langchain/langchain/pydantic_v1/dataclasses.py index 2dfa3dab0aa..b057c5bb6cc 100644 --- a/libs/langchain/langchain/pydantic_v1/dataclasses.py +++ b/libs/langchain/langchain/pydantic_v1/dataclasses.py @@ -1,4 +1,24 @@ +from langchain_core._api import warn_deprecated + try: from pydantic.v1.dataclasses import * # noqa: F403 except ImportError: from pydantic.dataclasses import * # type: ignore # noqa: F403 + +warn_deprecated( + "0.3.0", + removal="1.0.0", + alternative="pydantic.v1 or pydantic", + message=( + "As of langchain-core 0.3.0, LangChain uses pydantic v2 internally. " + "The langchain.pydantic_v1 module was a " + "compatibility shim for pydantic v1, and should no longer be used. " + "Please update the code to import from Pydantic directly.\n\n" + "For example, replace imports like: " + "`from langchain.pydantic_v1 import BaseModel`\n" + "with: `from pydantic import BaseModel`\n" + "or the v1 compatibility namespace if you are working in a code base " + "that has not been fully upgraded to pydantic 2 yet. " + "\tfrom pydantic.v1 import BaseModel\n" + ), +) diff --git a/libs/langchain/langchain/pydantic_v1/main.py b/libs/langchain/langchain/pydantic_v1/main.py index fa8916f8350..d366b5a7ea4 100644 --- a/libs/langchain/langchain/pydantic_v1/main.py +++ b/libs/langchain/langchain/pydantic_v1/main.py @@ -1,4 +1,24 @@ +from langchain_core._api import warn_deprecated + try: from pydantic.v1.main import * # noqa: F403 except ImportError: from pydantic.main import * # type: ignore # noqa: F403 + +warn_deprecated( + "0.3.0", + removal="1.0.0", + alternative="pydantic.v1 or pydantic", + message=( + "As of langchain-core 0.3.0, LangChain uses pydantic v2 internally. " + "The langchain.pydantic_v1 module was a " + "compatibility shim for pydantic v1, and should no longer be used. " + "Please update the code to import from Pydantic directly.\n\n" + "For example, replace imports like: " + "`from langchain.pydantic_v1 import BaseModel`\n" + "with: `from pydantic import BaseModel`\n" + "or the v1 compatibility namespace if you are working in a code base " + "that has not been fully upgraded to pydantic 2 yet. " + "\tfrom pydantic.v1 import BaseModel\n" + ), +)