From aec13a6123743a02145033770e0dc58582e6a672 Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Tue, 30 Apr 2024 16:19:13 -0400 Subject: [PATCH] langchain[patch]: Migrate callbacks module to use optional imports for community (#21086) --- .../langchain/langchain/callbacks/__init__.py | 92 +++++++++++++++---- .../langchain/callbacks/aim_callback.py | 38 ++++++-- .../langchain/callbacks/argilla_callback.py | 26 +++++- .../langchain/callbacks/arize_callback.py | 26 +++++- .../langchain/callbacks/arthur_callback.py | 24 ++++- .../langchain/callbacks/clearml_callback.py | 28 +++++- .../langchain/callbacks/comet_ml_callback.py | 24 ++++- .../langchain/callbacks/confident_callback.py | 26 +++++- .../langchain/callbacks/context_callback.py | 28 +++++- .../langchain/callbacks/flyte_callback.py | 28 +++++- libs/langchain/langchain/callbacks/human.py | 32 ++++++- .../langchain/callbacks/infino_callback.py | 24 ++++- .../callbacks/labelstudio_callback.py | 38 ++++++-- .../langchain/callbacks/llmonitor_callback.py | 26 +++++- libs/langchain/langchain/callbacks/manager.py | 70 +++++++++----- .../langchain/callbacks/mlflow_callback.py | 37 ++++++-- .../langchain/callbacks/openai_info.py | 26 +++++- .../callbacks/promptlayer_callback.py | 30 +++++- .../langchain/callbacks/sagemaker_callback.py | 30 +++++- .../callbacks/streamlit/mutable_expander.py | 38 ++++++-- .../streamlit/streamlit_callback_handler.py | 56 ++++++++--- .../langchain/callbacks/tracers/__init__.py | 19 ++++ .../langchain/callbacks/tracers/comet.py | 34 ++++++- .../langchain/callbacks/tracers/wandb.py | 34 +++++-- .../langchain/callbacks/trubrics_callback.py | 28 +++++- libs/langchain/langchain/callbacks/utils.py | 47 ++++++++-- .../langchain/callbacks/wandb_callback.py | 24 ++++- .../langchain/callbacks/whylabs_callback.py | 28 +++++- 28 files changed, 802 insertions(+), 159 deletions(-) diff --git a/libs/langchain/langchain/callbacks/__init__.py b/libs/langchain/langchain/callbacks/__init__.py index e6068d08488..f4c3101544c 100644 --- a/libs/langchain/langchain/callbacks/__init__.py +++ b/libs/langchain/langchain/callbacks/__init__.py @@ -6,10 +6,8 @@ BaseCallbackHandler --> CallbackHandler # Example: AimCallbackHandler """ -import warnings -from typing import Any +from typing import TYPE_CHECKING, Any -from langchain_core._api import LangChainDeprecationWarning from langchain_core.callbacks import ( FileCallbackHandler, StdOutCallbackHandler, @@ -22,28 +20,86 @@ from langchain_core.tracers.context import ( ) from langchain_core.tracers.langchain import LangChainTracer +from langchain._api import create_importer from langchain.callbacks.streaming_aiter import AsyncIteratorCallbackHandler from langchain.callbacks.streaming_stdout_final_only import ( FinalStreamingStdOutCallbackHandler, ) -from langchain.utils.interactive_env import is_interactive_env + +if TYPE_CHECKING: + from langchain_community.callbacks.aim_callback import AimCallbackHandler + from langchain_community.callbacks.argilla_callback import ArgillaCallbackHandler + from langchain_community.callbacks.arize_callback import ArizeCallbackHandler + from langchain_community.callbacks.arthur_callback import ArthurCallbackHandler + from langchain_community.callbacks.clearml_callback import ClearMLCallbackHandler + from langchain_community.callbacks.comet_ml_callback import CometCallbackHandler + from langchain_community.callbacks.context_callback import ContextCallbackHandler + from langchain_community.callbacks.flyte_callback import FlyteCallbackHandler + from langchain_community.callbacks.human import HumanApprovalCallbackHandler + from langchain_community.callbacks.infino_callback import InfinoCallbackHandler + from langchain_community.callbacks.labelstudio_callback import ( + LabelStudioCallbackHandler, + ) + from langchain_community.callbacks.llmonitor_callback import ( + LLMonitorCallbackHandler, + ) + from langchain_community.callbacks.manager import ( + get_openai_callback, + wandb_tracing_enabled, + ) + from langchain_community.callbacks.mlflow_callback import MlflowCallbackHandler + from langchain_community.callbacks.openai_info import OpenAICallbackHandler + from langchain_community.callbacks.promptlayer_callback import ( + PromptLayerCallbackHandler, + ) + from langchain_community.callbacks.sagemaker_callback import ( + SageMakerCallbackHandler, + ) + from langchain_community.callbacks.streamlit import StreamlitCallbackHandler + from langchain_community.callbacks.streamlit.streamlit_callback_handler import ( + LLMThoughtLabeler, + ) + from langchain_community.callbacks.trubrics_callback import TrubricsCallbackHandler + from langchain_community.callbacks.wandb_callback import WandbCallbackHandler + from langchain_community.callbacks.whylabs_callback import WhyLabsCallbackHandler + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "AimCallbackHandler": "langchain_community.callbacks.aim_callback", + "ArgillaCallbackHandler": "langchain_community.callbacks.argilla_callback", + "ArizeCallbackHandler": "langchain_community.callbacks.arize_callback", + "PromptLayerCallbackHandler": "langchain_community.callbacks.promptlayer_callback", + "ArthurCallbackHandler": "langchain_community.callbacks.arthur_callback", + "ClearMLCallbackHandler": "langchain_community.callbacks.clearml_callback", + "CometCallbackHandler": "langchain_community.callbacks.comet_ml_callback", + "ContextCallbackHandler": "langchain_community.callbacks.context_callback", + "HumanApprovalCallbackHandler": "langchain_community.callbacks.human", + "InfinoCallbackHandler": "langchain_community.callbacks.infino_callback", + "MlflowCallbackHandler": "langchain_community.callbacks.mlflow_callback", + "LLMonitorCallbackHandler": "langchain_community.callbacks.llmonitor_callback", + "OpenAICallbackHandler": "langchain_community.callbacks.openai_info", + "LLMThoughtLabeler": ( + "langchain_community.callbacks.streamlit.streamlit_callback_handler" + ), + "StreamlitCallbackHandler": "langchain_community.callbacks.streamlit", + "WandbCallbackHandler": "langchain_community.callbacks.wandb_callback", + "WhyLabsCallbackHandler": "langchain_community.callbacks.whylabs_callback", + "get_openai_callback": "langchain_community.callbacks.manager", + "wandb_tracing_enabled": "langchain_community.callbacks.manager", + "FlyteCallbackHandler": "langchain_community.callbacks.flyte_callback", + "SageMakerCallbackHandler": "langchain_community.callbacks.sagemaker_callback", + "LabelStudioCallbackHandler": "langchain_community.callbacks.labelstudio_callback", + "TrubricsCallbackHandler": "langchain_community.callbacks.trubrics_callback", +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) def __getattr__(name: str) -> Any: - from langchain_community import callbacks - - # If not in interactive env, raise warning. - if not is_interactive_env(): - warnings.warn( - "Importing this callback from langchain is deprecated. Importing it from " - "langchain will no longer be supported as of langchain==0.2.0. " - "Please import from langchain-community instead:\n\n" - f"`from langchain_community.callbacks import {name}`.\n\n" - "To install langchain-community run `pip install -U langchain-community`.", - category=LangChainDeprecationWarning, - ) - - return getattr(callbacks, name) + """Look up attributes dynamically.""" + return _import_attribute(name) __all__ = [ diff --git a/libs/langchain/langchain/callbacks/aim_callback.py b/libs/langchain/langchain/callbacks/aim_callback.py index 563cba49061..aa57017a1f4 100644 --- a/libs/langchain/langchain/callbacks/aim_callback.py +++ b/libs/langchain/langchain/callbacks/aim_callback.py @@ -1,7 +1,33 @@ -from langchain_community.callbacks.aim_callback import ( - AimCallbackHandler, - BaseMetadataCallbackHandler, - import_aim, -) +from typing import TYPE_CHECKING, Any -__all__ = ["import_aim", "BaseMetadataCallbackHandler", "AimCallbackHandler"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.aim_callback import ( + AimCallbackHandler, + BaseMetadataCallbackHandler, + import_aim, + ) + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "import_aim": "langchain_community.callbacks.aim_callback", + "BaseMetadataCallbackHandler": "langchain_community.callbacks.aim_callback", + "AimCallbackHandler": "langchain_community.callbacks.aim_callback", +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "import_aim", + "BaseMetadataCallbackHandler", + "AimCallbackHandler", +] diff --git a/libs/langchain/langchain/callbacks/argilla_callback.py b/libs/langchain/langchain/callbacks/argilla_callback.py index b3d085faf71..7dd44574ea5 100644 --- a/libs/langchain/langchain/callbacks/argilla_callback.py +++ b/libs/langchain/langchain/callbacks/argilla_callback.py @@ -1,3 +1,25 @@ -from langchain_community.callbacks.argilla_callback import ArgillaCallbackHandler +from typing import TYPE_CHECKING, Any -__all__ = ["ArgillaCallbackHandler"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.argilla_callback import ArgillaCallbackHandler + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "ArgillaCallbackHandler": "langchain_community.callbacks.argilla_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "ArgillaCallbackHandler", +] diff --git a/libs/langchain/langchain/callbacks/arize_callback.py b/libs/langchain/langchain/callbacks/arize_callback.py index c120de398f6..0f29b49892b 100644 --- a/libs/langchain/langchain/callbacks/arize_callback.py +++ b/libs/langchain/langchain/callbacks/arize_callback.py @@ -1,3 +1,25 @@ -from langchain_community.callbacks.arize_callback import ArizeCallbackHandler +from typing import TYPE_CHECKING, Any -__all__ = ["ArizeCallbackHandler"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.arize_callback import ArizeCallbackHandler + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "ArizeCallbackHandler": "langchain_community.callbacks.arize_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "ArizeCallbackHandler", +] diff --git a/libs/langchain/langchain/callbacks/arthur_callback.py b/libs/langchain/langchain/callbacks/arthur_callback.py index 3bf52efa433..c056067dce8 100644 --- a/libs/langchain/langchain/callbacks/arthur_callback.py +++ b/libs/langchain/langchain/callbacks/arthur_callback.py @@ -1,6 +1,24 @@ -from langchain_community.callbacks.arthur_callback import ( - ArthurCallbackHandler, -) +from typing import TYPE_CHECKING, Any + +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.arthur_callback import ArthurCallbackHandler + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "ArthurCallbackHandler": "langchain_community.callbacks.arthur_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + __all__ = [ "ArthurCallbackHandler", diff --git a/libs/langchain/langchain/callbacks/clearml_callback.py b/libs/langchain/langchain/callbacks/clearml_callback.py index 8cc83d956e2..38a7d4779cc 100644 --- a/libs/langchain/langchain/callbacks/clearml_callback.py +++ b/libs/langchain/langchain/callbacks/clearml_callback.py @@ -1,5 +1,25 @@ -from langchain_community.callbacks.clearml_callback import ( - ClearMLCallbackHandler, -) +from typing import TYPE_CHECKING, Any -__all__ = ["ClearMLCallbackHandler"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.clearml_callback import ClearMLCallbackHandler + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "ClearMLCallbackHandler": "langchain_community.callbacks.clearml_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "ClearMLCallbackHandler", +] diff --git a/libs/langchain/langchain/callbacks/comet_ml_callback.py b/libs/langchain/langchain/callbacks/comet_ml_callback.py index ed2813d32d6..f0cb2a08a2e 100644 --- a/libs/langchain/langchain/callbacks/comet_ml_callback.py +++ b/libs/langchain/langchain/callbacks/comet_ml_callback.py @@ -1,6 +1,24 @@ -from langchain_community.callbacks.comet_ml_callback import ( - CometCallbackHandler, -) +from typing import TYPE_CHECKING, Any + +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.comet_ml_callback import CometCallbackHandler + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "CometCallbackHandler": "langchain_community.callbacks.comet_ml_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + __all__ = [ "CometCallbackHandler", diff --git a/libs/langchain/langchain/callbacks/confident_callback.py b/libs/langchain/langchain/callbacks/confident_callback.py index 48236ed500e..90e7d8dee1a 100644 --- a/libs/langchain/langchain/callbacks/confident_callback.py +++ b/libs/langchain/langchain/callbacks/confident_callback.py @@ -1,3 +1,25 @@ -from langchain_community.callbacks.confident_callback import DeepEvalCallbackHandler +from typing import TYPE_CHECKING, Any -__all__ = ["DeepEvalCallbackHandler"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.confident_callback import DeepEvalCallbackHandler + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "DeepEvalCallbackHandler": "langchain_community.callbacks.confident_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "DeepEvalCallbackHandler", +] diff --git a/libs/langchain/langchain/callbacks/context_callback.py b/libs/langchain/langchain/callbacks/context_callback.py index 441ddb3f6b9..4dc53081a5b 100644 --- a/libs/langchain/langchain/callbacks/context_callback.py +++ b/libs/langchain/langchain/callbacks/context_callback.py @@ -1,5 +1,25 @@ -from langchain_community.callbacks.context_callback import ( - ContextCallbackHandler, -) +from typing import TYPE_CHECKING, Any -__all__ = ["ContextCallbackHandler"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.context_callback import ContextCallbackHandler + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "ContextCallbackHandler": "langchain_community.callbacks.context_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "ContextCallbackHandler", +] diff --git a/libs/langchain/langchain/callbacks/flyte_callback.py b/libs/langchain/langchain/callbacks/flyte_callback.py index ae9b96615e4..55c79231303 100644 --- a/libs/langchain/langchain/callbacks/flyte_callback.py +++ b/libs/langchain/langchain/callbacks/flyte_callback.py @@ -1,5 +1,25 @@ -from langchain_community.callbacks.flyte_callback import ( - FlyteCallbackHandler, -) +from typing import TYPE_CHECKING, Any -__all__ = ["FlyteCallbackHandler"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.flyte_callback import FlyteCallbackHandler + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "FlyteCallbackHandler": "langchain_community.callbacks.flyte_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "FlyteCallbackHandler", +] diff --git a/libs/langchain/langchain/callbacks/human.py b/libs/langchain/langchain/callbacks/human.py index f4fbc6f3359..534dad96044 100644 --- a/libs/langchain/langchain/callbacks/human.py +++ b/libs/langchain/langchain/callbacks/human.py @@ -1,8 +1,30 @@ -from langchain_community.callbacks.human import ( - AsyncHumanApprovalCallbackHandler, - HumanApprovalCallbackHandler, - HumanRejectedException, -) +from typing import TYPE_CHECKING, Any + +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.human import ( + AsyncHumanApprovalCallbackHandler, + HumanApprovalCallbackHandler, + HumanRejectedException, + ) + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "HumanRejectedException": "langchain_community.callbacks.human", + "HumanApprovalCallbackHandler": "langchain_community.callbacks.human", + "AsyncHumanApprovalCallbackHandler": "langchain_community.callbacks.human", +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + __all__ = [ "HumanRejectedException", diff --git a/libs/langchain/langchain/callbacks/infino_callback.py b/libs/langchain/langchain/callbacks/infino_callback.py index 1b7045bd473..77942c79c75 100644 --- a/libs/langchain/langchain/callbacks/infino_callback.py +++ b/libs/langchain/langchain/callbacks/infino_callback.py @@ -1,6 +1,24 @@ -from langchain_community.callbacks.infino_callback import ( - InfinoCallbackHandler, -) +from typing import TYPE_CHECKING, Any + +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.infino_callback import InfinoCallbackHandler + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "InfinoCallbackHandler": "langchain_community.callbacks.infino_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + __all__ = [ "InfinoCallbackHandler", diff --git a/libs/langchain/langchain/callbacks/labelstudio_callback.py b/libs/langchain/langchain/callbacks/labelstudio_callback.py index 5790dff396d..e12b49a1b80 100644 --- a/libs/langchain/langchain/callbacks/labelstudio_callback.py +++ b/libs/langchain/langchain/callbacks/labelstudio_callback.py @@ -1,7 +1,33 @@ -from langchain_community.callbacks.labelstudio_callback import ( - LabelStudioCallbackHandler, - LabelStudioMode, - get_default_label_configs, -) +from typing import TYPE_CHECKING, Any -__all__ = ["LabelStudioMode", "get_default_label_configs", "LabelStudioCallbackHandler"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.labelstudio_callback import ( + LabelStudioCallbackHandler, + LabelStudioMode, + get_default_label_configs, + ) + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "LabelStudioMode": "langchain_community.callbacks.labelstudio_callback", + "get_default_label_configs": "langchain_community.callbacks.labelstudio_callback", + "LabelStudioCallbackHandler": "langchain_community.callbacks.labelstudio_callback", +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "LabelStudioMode", + "get_default_label_configs", + "LabelStudioCallbackHandler", +] diff --git a/libs/langchain/langchain/callbacks/llmonitor_callback.py b/libs/langchain/langchain/callbacks/llmonitor_callback.py index 82c7bd499bc..590e42499df 100644 --- a/libs/langchain/langchain/callbacks/llmonitor_callback.py +++ b/libs/langchain/langchain/callbacks/llmonitor_callback.py @@ -1,6 +1,26 @@ -from langchain_community.callbacks.llmonitor_callback import ( - LLMonitorCallbackHandler, -) +from typing import TYPE_CHECKING, Any + +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.llmonitor_callback import ( + LLMonitorCallbackHandler, + ) + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "LLMonitorCallbackHandler": "langchain_community.callbacks.llmonitor_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + __all__ = [ "LLMonitorCallbackHandler", diff --git a/libs/langchain/langchain/callbacks/manager.py b/libs/langchain/langchain/callbacks/manager.py index 8343c29977e..bb8b3598599 100644 --- a/libs/langchain/langchain/callbacks/manager.py +++ b/libs/langchain/langchain/callbacks/manager.py @@ -1,9 +1,7 @@ from __future__ import annotations -from langchain_community.callbacks.manager import ( - get_openai_callback, - wandb_tracing_enabled, -) +from typing import TYPE_CHECKING, Any + from langchain_core.callbacks.manager import ( AsyncCallbackManager, AsyncCallbackManagerForChainGroup, @@ -35,33 +33,57 @@ from langchain_core.tracers.context import ( ) from langchain_core.utils.env import env_var_is_set +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.manager import ( + get_openai_callback, + wandb_tracing_enabled, + ) + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "get_openai_callback": "langchain_community.callbacks.manager", + "wandb_tracing_enabled": "langchain_community.callbacks.manager", +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + __all__ = [ - "BaseRunManager", - "RunManager", - "ParentRunManager", - "AsyncRunManager", - "AsyncParentRunManager", - "CallbackManagerForLLMRun", - "AsyncCallbackManagerForLLMRun", - "CallbackManagerForChainRun", + "ahandle_event", + "AsyncCallbackManagerForChainGroup", "AsyncCallbackManagerForChainRun", - "CallbackManagerForToolRun", - "AsyncCallbackManagerForToolRun", - "CallbackManagerForRetrieverRun", + "AsyncCallbackManagerForLLMRun", "AsyncCallbackManagerForRetrieverRun", + "AsyncCallbackManagerForToolRun", + "AsyncParentRunManager", + "AsyncRunManager", + "atrace_as_chain_group", + "BaseRunManager", "CallbackManager", "CallbackManagerForChainGroup", - "AsyncCallbackManager", - "AsyncCallbackManagerForChainGroup", - "tracing_enabled", - "tracing_v2_enabled", - "collect_runs", - "atrace_as_chain_group", - "trace_as_chain_group", - "handle_event", - "ahandle_event", + "CallbackManagerForChainRun", + "CallbackManagerForLLMRun", + "CallbackManagerForRetrieverRun", + "CallbackManagerForToolRun", "Callbacks", + "AsyncCallbackManager", + "collect_runs", "env_var_is_set", "get_openai_callback", + "handle_event", + "ParentRunManager", + "RunManager", + "trace_as_chain_group", + "tracing_enabled", + "tracing_v2_enabled", "wandb_tracing_enabled", ] diff --git a/libs/langchain/langchain/callbacks/mlflow_callback.py b/libs/langchain/langchain/callbacks/mlflow_callback.py index 1119008fabf..738c3a52333 100644 --- a/libs/langchain/langchain/callbacks/mlflow_callback.py +++ b/libs/langchain/langchain/callbacks/mlflow_callback.py @@ -1,9 +1,34 @@ -from langchain_community.callbacks.mlflow_callback import ( - MlflowCallbackHandler, - MlflowLogger, - analyze_text, - construct_html_from_prompt_and_generation, -) +from typing import TYPE_CHECKING, Any + +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.mlflow_callback import ( + MlflowCallbackHandler, + MlflowLogger, + analyze_text, + construct_html_from_prompt_and_generation, + ) + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "analyze_text": "langchain_community.callbacks.mlflow_callback", + "construct_html_from_prompt_and_generation": ( + "langchain_community.callbacks.mlflow_callback" + ), + "MlflowLogger": "langchain_community.callbacks.mlflow_callback", + "MlflowCallbackHandler": "langchain_community.callbacks.mlflow_callback", +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + __all__ = [ "analyze_text", diff --git a/libs/langchain/langchain/callbacks/openai_info.py b/libs/langchain/langchain/callbacks/openai_info.py index cf2115000c4..59ea8ccfe1c 100644 --- a/libs/langchain/langchain/callbacks/openai_info.py +++ b/libs/langchain/langchain/callbacks/openai_info.py @@ -1,3 +1,25 @@ -from langchain_community.callbacks.openai_info import OpenAICallbackHandler +from typing import TYPE_CHECKING, Any -__all__ = ["OpenAICallbackHandler"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.openai_info import OpenAICallbackHandler + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "OpenAICallbackHandler": "langchain_community.callbacks.openai_info" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "OpenAICallbackHandler", +] diff --git a/libs/langchain/langchain/callbacks/promptlayer_callback.py b/libs/langchain/langchain/callbacks/promptlayer_callback.py index f2dacce1468..4970f2c16e0 100644 --- a/libs/langchain/langchain/callbacks/promptlayer_callback.py +++ b/libs/langchain/langchain/callbacks/promptlayer_callback.py @@ -1,5 +1,27 @@ -from langchain_community.callbacks.promptlayer_callback import ( - PromptLayerCallbackHandler, -) +from typing import TYPE_CHECKING, Any -__all__ = ["PromptLayerCallbackHandler"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.promptlayer_callback import ( + PromptLayerCallbackHandler, + ) + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "PromptLayerCallbackHandler": "langchain_community.callbacks.promptlayer_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "PromptLayerCallbackHandler", +] diff --git a/libs/langchain/langchain/callbacks/sagemaker_callback.py b/libs/langchain/langchain/callbacks/sagemaker_callback.py index 4af832a1e61..7a0c6b6c855 100644 --- a/libs/langchain/langchain/callbacks/sagemaker_callback.py +++ b/libs/langchain/langchain/callbacks/sagemaker_callback.py @@ -1,5 +1,27 @@ -from langchain_community.callbacks.sagemaker_callback import ( - SageMakerCallbackHandler, -) +from typing import TYPE_CHECKING, Any -__all__ = ["SageMakerCallbackHandler"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.sagemaker_callback import ( + SageMakerCallbackHandler, + ) + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "SageMakerCallbackHandler": "langchain_community.callbacks.sagemaker_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "SageMakerCallbackHandler", +] diff --git a/libs/langchain/langchain/callbacks/streamlit/mutable_expander.py b/libs/langchain/langchain/callbacks/streamlit/mutable_expander.py index c36feb12b68..756593ba0b0 100644 --- a/libs/langchain/langchain/callbacks/streamlit/mutable_expander.py +++ b/libs/langchain/langchain/callbacks/streamlit/mutable_expander.py @@ -1,7 +1,33 @@ -from langchain_community.callbacks.streamlit.mutable_expander import ( - ChildRecord, - ChildType, - MutableExpander, -) +from typing import TYPE_CHECKING, Any -__all__ = ["ChildType", "ChildRecord", "MutableExpander"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.streamlit.mutable_expander import ( + ChildRecord, + ChildType, + MutableExpander, + ) + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "ChildType": "langchain_community.callbacks.streamlit.mutable_expander", + "ChildRecord": "langchain_community.callbacks.streamlit.mutable_expander", + "MutableExpander": "langchain_community.callbacks.streamlit.mutable_expander", +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "ChildType", + "ChildRecord", + "MutableExpander", +] diff --git a/libs/langchain/langchain/callbacks/streamlit/streamlit_callback_handler.py b/libs/langchain/langchain/callbacks/streamlit/streamlit_callback_handler.py index 7cae533375f..911561856d0 100644 --- a/libs/langchain/langchain/callbacks/streamlit/streamlit_callback_handler.py +++ b/libs/langchain/langchain/callbacks/streamlit/streamlit_callback_handler.py @@ -1,20 +1,46 @@ -from langchain_community.callbacks.streamlit.streamlit_callback_handler import ( - CHECKMARK_EMOJI, - EXCEPTION_EMOJI, - HISTORY_EMOJI, - THINKING_EMOJI, - LLMThought, - LLMThoughtLabeler, - LLMThoughtState, - StreamlitCallbackHandler, - ToolRecord, -) +from typing import TYPE_CHECKING, Any + +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.streamlit.streamlit_callback_handler import ( + LLMThought, + LLMThoughtLabeler, + LLMThoughtState, + StreamlitCallbackHandler, + ToolRecord, + ) + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "LLMThoughtState": ( + "langchain_community.callbacks.streamlit.streamlit_callback_handler" + ), + "ToolRecord": ( + "langchain_community.callbacks.streamlit.streamlit_callback_handler" + ), + "LLMThoughtLabeler": ( + "langchain_community.callbacks.streamlit.streamlit_callback_handler" + ), + "LLMThought": ( + "langchain_community.callbacks.streamlit.streamlit_callback_handler" + ), + "StreamlitCallbackHandler": ( + "langchain_community.callbacks.streamlit.streamlit_callback_handler" + ), +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + __all__ = [ - "CHECKMARK_EMOJI", - "THINKING_EMOJI", - "HISTORY_EMOJI", - "EXCEPTION_EMOJI", "LLMThoughtState", "ToolRecord", "LLMThoughtLabeler", diff --git a/libs/langchain/langchain/callbacks/tracers/__init__.py b/libs/langchain/langchain/callbacks/tracers/__init__.py index 1f470e6bb84..20b8816f07a 100644 --- a/libs/langchain/langchain/callbacks/tracers/__init__.py +++ b/libs/langchain/langchain/callbacks/tracers/__init__.py @@ -1,5 +1,7 @@ """Tracers that record execution of LangChain runs.""" +from typing import TYPE_CHECKING, Any + from langchain_core.tracers.langchain import LangChainTracer from langchain_core.tracers.langchain_v1 import LangChainTracerV1 from langchain_core.tracers.stdout import ( @@ -7,9 +9,26 @@ from langchain_core.tracers.stdout import ( FunctionCallbackHandler, ) +from langchain._api import create_importer from langchain.callbacks.tracers.logging import LoggingCallbackHandler from langchain.callbacks.tracers.wandb import WandbTracer +if TYPE_CHECKING: + from langchain_community.callbacks.tracers.wandb import WandbTracer + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = {"WandbTracer": "langchain_community.callbacks.tracers.wandb"} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + __all__ = [ "ConsoleCallbackHandler", "FunctionCallbackHandler", diff --git a/libs/langchain/langchain/callbacks/tracers/comet.py b/libs/langchain/langchain/callbacks/tracers/comet.py index a369d5b2b55..e5433d95a29 100644 --- a/libs/langchain/langchain/callbacks/tracers/comet.py +++ b/libs/langchain/langchain/callbacks/tracers/comet.py @@ -1,6 +1,30 @@ -from langchain_community.callbacks.tracers.comet import ( - CometTracer, - import_comet_llm_api, -) +from typing import TYPE_CHECKING, Any -__all__ = ["import_comet_llm_api", "CometTracer"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.tracers.comet import ( + CometTracer, + import_comet_llm_api, + ) + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "import_comet_llm_api": "langchain_community.callbacks.tracers.comet", + "CometTracer": "langchain_community.callbacks.tracers.comet", +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "import_comet_llm_api", + "CometTracer", +] diff --git a/libs/langchain/langchain/callbacks/tracers/wandb.py b/libs/langchain/langchain/callbacks/tracers/wandb.py index a9a84e5d4a9..e9f7fc41ad4 100644 --- a/libs/langchain/langchain/callbacks/tracers/wandb.py +++ b/libs/langchain/langchain/callbacks/tracers/wandb.py @@ -1,12 +1,32 @@ -from langchain_community.callbacks.tracers.wandb import ( - PRINT_WARNINGS, - RunProcessor, - WandbRunArgs, - WandbTracer, -) +from typing import TYPE_CHECKING, Any + +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.tracers.wandb import ( + RunProcessor, + WandbRunArgs, + WandbTracer, + ) + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "RunProcessor": "langchain_community.callbacks.tracers.wandb", + "WandbRunArgs": "langchain_community.callbacks.tracers.wandb", + "WandbTracer": "langchain_community.callbacks.tracers.wandb", +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + __all__ = [ - "PRINT_WARNINGS", "RunProcessor", "WandbRunArgs", "WandbTracer", diff --git a/libs/langchain/langchain/callbacks/trubrics_callback.py b/libs/langchain/langchain/callbacks/trubrics_callback.py index e4b71a970e4..783bb8961ef 100644 --- a/libs/langchain/langchain/callbacks/trubrics_callback.py +++ b/libs/langchain/langchain/callbacks/trubrics_callback.py @@ -1,5 +1,25 @@ -from langchain_community.callbacks.trubrics_callback import ( - TrubricsCallbackHandler, -) +from typing import TYPE_CHECKING, Any -__all__ = ["TrubricsCallbackHandler"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.trubrics_callback import TrubricsCallbackHandler + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "TrubricsCallbackHandler": "langchain_community.callbacks.trubrics_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "TrubricsCallbackHandler", +] diff --git a/libs/langchain/langchain/callbacks/utils.py b/libs/langchain/langchain/callbacks/utils.py index 507944482f8..b20381a8043 100644 --- a/libs/langchain/langchain/callbacks/utils.py +++ b/libs/langchain/langchain/callbacks/utils.py @@ -1,13 +1,40 @@ -from langchain_community.callbacks.utils import ( - BaseMetadataCallbackHandler, - _flatten_dict, - flatten_dict, - hash_string, - import_pandas, - import_spacy, - import_textstat, - load_json, -) +from typing import TYPE_CHECKING, Any + +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.utils import ( + BaseMetadataCallbackHandler, + _flatten_dict, + flatten_dict, + hash_string, + import_pandas, + import_spacy, + import_textstat, + load_json, + ) + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "import_spacy": "langchain_community.callbacks.utils", + "import_pandas": "langchain_community.callbacks.utils", + "import_textstat": "langchain_community.callbacks.utils", + "_flatten_dict": "langchain_community.callbacks.utils", + "flatten_dict": "langchain_community.callbacks.utils", + "hash_string": "langchain_community.callbacks.utils", + "load_json": "langchain_community.callbacks.utils", + "BaseMetadataCallbackHandler": "langchain_community.callbacks.utils", +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + __all__ = [ "import_spacy", diff --git a/libs/langchain/langchain/callbacks/wandb_callback.py b/libs/langchain/langchain/callbacks/wandb_callback.py index 1cf9e796eee..81d06e16407 100644 --- a/libs/langchain/langchain/callbacks/wandb_callback.py +++ b/libs/langchain/langchain/callbacks/wandb_callback.py @@ -1,6 +1,24 @@ -from langchain_community.callbacks.wandb_callback import ( - WandbCallbackHandler, -) +from typing import TYPE_CHECKING, Any + +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.wandb_callback import WandbCallbackHandler + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "WandbCallbackHandler": "langchain_community.callbacks.wandb_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + __all__ = [ "WandbCallbackHandler", diff --git a/libs/langchain/langchain/callbacks/whylabs_callback.py b/libs/langchain/langchain/callbacks/whylabs_callback.py index d4c3530beab..9839fa39782 100644 --- a/libs/langchain/langchain/callbacks/whylabs_callback.py +++ b/libs/langchain/langchain/callbacks/whylabs_callback.py @@ -1,5 +1,25 @@ -from langchain_community.callbacks.whylabs_callback import ( - WhyLabsCallbackHandler, -) +from typing import TYPE_CHECKING, Any -__all__ = ["WhyLabsCallbackHandler"] +from langchain._api import create_importer + +if TYPE_CHECKING: + from langchain_community.callbacks.whylabs_callback import WhyLabsCallbackHandler + +# Create a way to dynamically look up deprecated imports. +# Used to consolidate logic for raising deprecation warnings and +# handling optional imports. +DEPRECATED_LOOKUP = { + "WhyLabsCallbackHandler": "langchain_community.callbacks.whylabs_callback" +} + +_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP) + + +def __getattr__(name: str) -> Any: + """Look up attributes dynamically.""" + return _import_attribute(name) + + +__all__ = [ + "WhyLabsCallbackHandler", +]