From 9e788f09c620f23c074dd4945b9e7d56b588ca7a Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Tue, 30 Apr 2024 16:24:29 -0400 Subject: [PATCH] langchain[patch]: Migrate output parsers to support optional community imports (#21103) Migrate output parsers --- .../langchain/output_parsers/__init__.py | 21 +++++++++ .../output_parsers/ernie_functions.py | 44 ++++++++++++++++--- .../langchain/output_parsers/rail_parser.py | 28 ++++++++++-- 3 files changed, 82 insertions(+), 11 deletions(-) diff --git a/libs/langchain/langchain/output_parsers/__init__.py b/libs/langchain/langchain/output_parsers/__init__.py index 04a3e26e8f5..b6e9de2df65 100644 --- a/libs/langchain/langchain/output_parsers/__init__.py +++ b/libs/langchain/langchain/output_parsers/__init__.py @@ -12,6 +12,8 @@ Serializable, Generation, PromptValue """ # noqa: E501 +from typing import TYPE_CHECKING, Any + from langchain_core.output_parsers import ( CommaSeparatedListOutputParser, ListOutputParser, @@ -26,6 +28,7 @@ from langchain_core.output_parsers.openai_tools import ( PydanticToolsParser, ) +from langchain._api import create_importer from langchain.output_parsers.boolean import BooleanOutputParser from langchain.output_parsers.combining import CombiningOutputParser from langchain.output_parsers.datetime import DatetimeOutputParser @@ -39,6 +42,24 @@ from langchain.output_parsers.retry import RetryOutputParser, RetryWithErrorOutp from langchain.output_parsers.structured import ResponseSchema, StructuredOutputParser from langchain.output_parsers.yaml import YamlOutputParser +if TYPE_CHECKING: + from langchain_community.output_parsers.rail_parser import GuardrailsOutputParser + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "GuardrailsOutputParser": "langchain_community.output_parsers.rail_parser" +} + +_import_attribute = create_importer(__package__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + __all__ = [ "BooleanOutputParser", "CombiningOutputParser", diff --git a/libs/langchain/langchain/output_parsers/ernie_functions.py b/libs/langchain/langchain/output_parsers/ernie_functions.py index c258f854ef5..bfe0b590bc0 100644 --- a/libs/langchain/langchain/output_parsers/ernie_functions.py +++ b/libs/langchain/langchain/output_parsers/ernie_functions.py @@ -1,10 +1,40 @@ -from langchain_community.output_parsers.ernie_functions import ( - JsonKeyOutputFunctionsParser, - JsonOutputFunctionsParser, - OutputFunctionsParser, - PydanticAttrOutputFunctionsParser, - PydanticOutputFunctionsParser, -) +from typing import TYPE_CHECKING, Any + +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.output_parsers.ernie_functions import ( + JsonKeyOutputFunctionsParser, + JsonOutputFunctionsParser, + OutputFunctionsParser, + PydanticAttrOutputFunctionsParser, + PydanticOutputFunctionsParser, + ) + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "JsonKeyOutputFunctionsParser": ( + "langchain_community.output_parsers.ernie_functions" + ), + "JsonOutputFunctionsParser": "langchain_community.output_parsers.ernie_functions", + "OutputFunctionsParser": "langchain_community.output_parsers.ernie_functions", + "PydanticAttrOutputFunctionsParser": ( + "langchain_community.output_parsers.ernie_functions" + ), + "PydanticOutputFunctionsParser": ( + "langchain_community.output_parsers.ernie_functions" + ), +} + +_import_attribute = create_importer(__package__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + __all__ = [ "JsonKeyOutputFunctionsParser", diff --git a/libs/langchain/langchain/output_parsers/rail_parser.py b/libs/langchain/langchain/output_parsers/rail_parser.py index 3f796938be1..79637931982 100644 --- a/libs/langchain/langchain/output_parsers/rail_parser.py +++ b/libs/langchain/langchain/output_parsers/rail_parser.py @@ -1,5 +1,25 @@ -from langchain_community.output_parsers.rail_parser import ( - GuardrailsOutputParser, -) +from typing import TYPE_CHECKING, Any -__all__ = ["GuardrailsOutputParser"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.output_parsers.rail_parser import GuardrailsOutputParser + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "GuardrailsOutputParser": "langchain_community.output_parsers.rail_parser" +} + +_import_attribute = create_importer(__package__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "GuardrailsOutputParser", +]