2023-08-22 18:09:35 +00:00
|
|
|
import typing
|
Use a submodule for pydantic v1 compat (#9371)
<!-- Thank you for contributing to LangChain!
Replace this entire comment with:
- Description: a description of the change,
- Issue: the issue # it fixes (if applicable),
- Dependencies: any dependencies required for this change,
- Tag maintainer: for a quicker response, tag the relevant maintainer
(see below),
- Twitter handle: we announce bigger features on Twitter. If your PR
gets announced and you'd like a mention, we'll gladly shout you out!
Please make sure your PR is passing linting and testing before
submitting. Run `make format`, `make lint` and `make test` to check this
locally.
See contribution guidelines for more information on how to write/run
tests, lint, etc:
https://github.com/hwchase17/langchain/blob/master/.github/CONTRIBUTING.md
If you're adding a new integration, please include:
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. These live is docs/extras
directory.
If no one reviews your PR within a few days, please @-mention one of
@baskaryan, @eyurtsev, @hwchase17, @rlancemartin.
-->
2023-08-17 15:35:49 +00:00
|
|
|
from importlib import metadata
|
|
|
|
|
|
|
|
## 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.
|
|
|
|
|
2023-08-22 18:09:35 +00:00
|
|
|
# It's currently impossible to support mypy for both pydantic v1 and v2 at once:
|
|
|
|
# https://github.com/pydantic/pydantic/issues/6022
|
|
|
|
#
|
|
|
|
# In the lint environment, pydantic is currently v1.
|
|
|
|
# When we upgrade it to pydantic v2, we'll need
|
|
|
|
# to replace this with `from pydantic.v1 import *`.
|
|
|
|
if typing.TYPE_CHECKING:
|
Use a submodule for pydantic v1 compat (#9371)
<!-- Thank you for contributing to LangChain!
Replace this entire comment with:
- Description: a description of the change,
- Issue: the issue # it fixes (if applicable),
- Dependencies: any dependencies required for this change,
- Tag maintainer: for a quicker response, tag the relevant maintainer
(see below),
- Twitter handle: we announce bigger features on Twitter. If your PR
gets announced and you'd like a mention, we'll gladly shout you out!
Please make sure your PR is passing linting and testing before
submitting. Run `make format`, `make lint` and `make test` to check this
locally.
See contribution guidelines for more information on how to write/run
tests, lint, etc:
https://github.com/hwchase17/langchain/blob/master/.github/CONTRIBUTING.md
If you're adding a new integration, please include:
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. These live is docs/extras
directory.
If no one reviews your PR within a few days, please @-mention one of
@baskaryan, @eyurtsev, @hwchase17, @rlancemartin.
-->
2023-08-17 15:35:49 +00:00
|
|
|
from pydantic import * # noqa: F403
|
2023-08-22 18:09:35 +00:00
|
|
|
else:
|
|
|
|
try:
|
|
|
|
from pydantic.v1 import * # noqa: F403
|
|
|
|
except ImportError:
|
|
|
|
from pydantic import * # noqa: F403
|
Use a submodule for pydantic v1 compat (#9371)
<!-- Thank you for contributing to LangChain!
Replace this entire comment with:
- Description: a description of the change,
- Issue: the issue # it fixes (if applicable),
- Dependencies: any dependencies required for this change,
- Tag maintainer: for a quicker response, tag the relevant maintainer
(see below),
- Twitter handle: we announce bigger features on Twitter. If your PR
gets announced and you'd like a mention, we'll gladly shout you out!
Please make sure your PR is passing linting and testing before
submitting. Run `make format`, `make lint` and `make test` to check this
locally.
See contribution guidelines for more information on how to write/run
tests, lint, etc:
https://github.com/hwchase17/langchain/blob/master/.github/CONTRIBUTING.md
If you're adding a new integration, please include:
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. These live is docs/extras
directory.
If no one reviews your PR within a few days, please @-mention one of
@baskaryan, @eyurtsev, @hwchase17, @rlancemartin.
-->
2023-08-17 15:35:49 +00:00
|
|
|
|
|
|
|
try:
|
|
|
|
_PYDANTIC_MAJOR_VERSION: int = int(metadata.version("pydantic").split(".")[0])
|
|
|
|
except metadata.PackageNotFoundError:
|
|
|
|
_PYDANTIC_MAJOR_VERSION = 0
|