mirror of
https://github.com/hwchase17/langchain.git
synced 2026-02-03 15:55:44 +00:00
x
This commit is contained in:
29
libs/core/langchain_core/pydantic/__init__.py
Normal file
29
libs/core/langchain_core/pydantic/__init__.py
Normal 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
|
||||
15
libs/core/langchain_core/pydantic/config.py
Normal file
15
libs/core/langchain_core/pydantic/config.py
Normal 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()
|
||||
9
libs/core/langchain_core/pydantic/dataclasses.py
Normal file
9
libs/core/langchain_core/pydantic/dataclasses.py
Normal 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
|
||||
9
libs/core/langchain_core/pydantic/main.py
Normal file
9
libs/core/langchain_core/pydantic/main.py
Normal 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
|
||||
Reference in New Issue
Block a user