langchain/libs/experimental/langchain_experimental/__init__.py
Eugene Yurtsev 2673b3a314
Create pydantic v1 namespace in langchain (#9254)
Create pydantic v1 namespace in langchain experimental
2023-08-16 21:19:31 -07:00

25 lines
1016 B
Python

import importlib
import sys
## 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.
#
# This hack is done for the following reasons:
# * Langchain will attempt to remain compatible with both pydantic v1 and v2 since
# both dependencies and dependents may be stuck on either version of v1 or v2.
# * Creating namespaces for pydantic v1 and v2 should allow us to write code that
# unambiguously uses either v1 or v2 API.
# * This change is easier to roll out and roll back.
try:
pydantic_v1 = importlib.import_module("pydantic.v1")
except ImportError:
pydantic_v1 = importlib.import_module("pydantic")
if "pydantic_v1" not in sys.modules:
# Use a conditional because langchain experimental
# will use the same strategy to add pydantic_v1 to sys.modules
# and may run prior to langchain core package.
sys.modules["pydantic_v1"] = pydantic_v1