This commit is contained in:
Eugene Yurtsev
2024-03-14 17:28:57 -04:00
parent 69a8ef2693
commit 54e40830f9
4 changed files with 62 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
from importlib import metadata
from .config import USE_PYDANTIC_V2
## 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:
if USE_PYDANTIC_V2:
from pydantic import *
else:
from pydantic.v1 import * # noqa: F403 # type: ignore
except ImportError:
from pydantic import * # noqa: F403 # type: ignore
try:
_PYDANTIC_MAJOR_VERSION: int = int(metadata.version("pydantic").split(".")[0])
except metadata.PackageNotFoundError:
_PYDANTIC_MAJOR_VERSION = 0

View File

@@ -0,0 +1,15 @@
import os
def _get_use_pydantic_v2() -> bool:
"""Get the value of the LC_PYDANTIC_V2_UNSAFE environment variable."""
value = os.environ.get("LC_PYDANTIC_V2_UNSAFE", "false").lower()
if value == "true":
return True
elif value == "false":
return False
else:
raise ValueError(f"Invalid value for LANGCHAIN_PYDANTIC_V2_UNSAFE: {value}")
USE_PYDANTIC_V2 = _get_use_pydantic_v2()

View File

@@ -0,0 +1,9 @@
from .config import USE_PYDANTIC_V2
try:
if USE_PYDANTIC_V2:
from pydantic import * # noqa: F403
else:
from pydantic.v1.dataclasses import * # noqa: F403
except ImportError:
from pydantic.dataclasses import * # noqa: F403

View File

@@ -0,0 +1,9 @@
from .config import USE_PYDANTIC_V2
try:
if USE_PYDANTIC_V2:
from pydantic.main import *
else:
from pydantic.v1.main import * # noqa: F403
except ImportError:
from pydantic.main import * # noqa: F403