From df99b832a74288aa29cc1a71d0a0c92b487f391a Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Wed, 7 Aug 2024 13:57:55 -0700 Subject: [PATCH] core[patch]: support Field deprecation (#25004) ![Screenshot 2024-08-02 at 4 23 17 PM](https://github.com/user-attachments/assets/c757e093-877e-4af6-9dcd-984195454158) --- libs/core/langchain_core/_api/deprecation.py | 20 +++++++++++++++++++ .../language_models/chat_models.py | 13 +++++++++--- libs/core/langchain_core/tools.py | 12 +++++++++-- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/libs/core/langchain_core/_api/deprecation.py b/libs/core/langchain_core/_api/deprecation.py index fa025b08e44..5a003a80a18 100644 --- a/libs/core/langchain_core/_api/deprecation.py +++ b/libs/core/langchain_core/_api/deprecation.py @@ -133,6 +133,7 @@ def deprecated( _package: str = package, ) -> T: """Implementation of the decorator returned by `deprecated`.""" + from pydantic.v1.fields import FieldInfo # pydantic: ignore def emit_warning() -> None: """Emit the warning.""" @@ -207,6 +208,25 @@ def deprecated( ) return cast(T, obj) + elif isinstance(obj, FieldInfo): + from langchain_core.pydantic_v1 import Field + + wrapped = None + if not _obj_type: + _obj_type = "attribute" + if not _name: + raise ValueError() + old_doc = obj.description + + def finalize(wrapper: Callable[..., Any], new_doc: str) -> T: + return Field( + default=obj.default, + default_factory=obj.default_factory, + description=new_doc, + alias=obj.alias, + exclude=obj.exclude, + ) + elif isinstance(obj, property): if not _obj_type: _obj_type = "attribute" diff --git a/libs/core/langchain_core/language_models/chat_models.py b/libs/core/langchain_core/language_models/chat_models.py index e584565a9a9..c62feac069f 100644 --- a/libs/core/langchain_core/language_models/chat_models.py +++ b/libs/core/langchain_core/language_models/chat_models.py @@ -208,11 +208,18 @@ class BaseChatModel(BaseLanguageModel[BaseMessage], ABC): """ # noqa: E501 - callback_manager: Optional[BaseCallbackManager] = Field(default=None, exclude=True) - """[DEPRECATED] Callback manager to add to the run trace.""" + callback_manager: Optional[BaseCallbackManager] = deprecated( + name="callback_manager", since="0.1.7", removal="0.3.0", alternative="callbacks" + )( + Field( + default=None, + exclude=True, + description="Callback manager to add to the run trace.", + ) + ) rate_limiter: Optional[BaseRateLimiter] = Field(default=None, exclude=True) - """An optional rate limiter to use for limiting the number of requests.""" + "An optional rate limiter to use for limiting the number of requests." disable_streaming: Union[bool, Literal["tool_calling"]] = False """Whether to disable streaming for this model. diff --git a/libs/core/langchain_core/tools.py b/libs/core/langchain_core/tools.py index 7693a4fa68e..0dfe3f877e9 100644 --- a/libs/core/langchain_core/tools.py +++ b/libs/core/langchain_core/tools.py @@ -330,8 +330,16 @@ class ChildTool(BaseTool): callbacks: Callbacks = Field(default=None, exclude=True) """Callbacks to be called during tool execution.""" - callback_manager: Optional[BaseCallbackManager] = Field(default=None, exclude=True) - """Deprecated. Please use callbacks instead.""" + + callback_manager: Optional[BaseCallbackManager] = deprecated( + name="callback_manager", since="0.1.7", removal="0.3.0", alternative="callbacks" + )( + Field( + default=None, + exclude=True, + description="Callback manager to add to the run trace.", + ) + ) tags: Optional[List[str]] = None """Optional list of tags associated with the tool. Defaults to None. These tags will be associated with each call to this tool,