Compare commits

...

3 Commits

Author SHA1 Message Date
Eugene Yurtsev
00863ce4a5 x 2023-08-16 13:02:45 -04:00
Eugene Yurtsev
7b17eaf4ad x 2023-08-16 11:55:12 -04:00
Predrag Gruevski
d7ec7a9462 Output of running bump-pydantic on libs/langchain. 2023-08-16 14:35:24 +00:00
374 changed files with 1356 additions and 2214 deletions

View File

@@ -1,38 +1,7 @@
# ruff: noqa: E402
"""Main entrypoint into package."""
import importlib
import sys
from importlib import metadata
from typing import Optional
## 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:
pydantic_v1 = importlib.import_module("pydantic.v1")
except ImportError:
pydantic_v1 = importlib.import_module("pydantic")
if "pydantic_v1" not in sys.modules:
# Use a conditional because langchain experimental
# will use the same strategy to add pydantic_v1 to sys.modules
# and may run prior to langchain core package.
sys.modules["pydantic_v1"] = pydantic_v1
try:
_PYDANTIC_MAJOR_VERSION: int = int(metadata.version("pydantic").split(".")[0])
except metadata.PackageNotFoundError:
_PYDANTIC_MAJOR_VERSION = 0
from langchain.agents import MRKLChain, ReActChain, SelfAskWithSearchChain
from langchain.cache import BaseCache
from langchain.chains import (

View File

@@ -10,7 +10,7 @@ from pathlib import Path
from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union
import yaml
from pydantic_v1 import BaseModel, root_validator
from pydantic import model_validator, BaseModel
from langchain.agents.agent_iterator import AgentExecutorIterator
from langchain.agents.agent_types import AgentType
@@ -495,7 +495,8 @@ class Agent(BaseSingleActionAgent):
"""
return list(set(self.llm_chain.input_keys) - {"agent_scratchpad"})
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_prompt(cls, values: Dict) -> Dict:
"""Validate that prompt matches format."""
prompt = values["llm_chain"].prompt
@@ -694,7 +695,8 @@ s
agent=agent, tools=tools, callback_manager=callback_manager, **kwargs
)
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_tools(cls, values: Dict) -> Dict:
"""Validate that tools are compatible with agent."""
agent = values["agent"]
@@ -708,7 +710,8 @@ s
)
return values
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_return_direct_tool(cls, values: Dict) -> Dict:
"""Validate that tools are compatible with agent."""
agent = values["agent"]

View File

@@ -2,7 +2,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING, List
from pydantic_v1 import Field
from pydantic import ConfigDict, Field
from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.tools import BaseTool
@@ -18,11 +18,7 @@ class AmadeusToolkit(BaseToolkit):
"""Toolkit for interacting with Office365."""
client: Client = Field(default_factory=authenticate)
class Config:
"""Pydantic config."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
def get_tools(self) -> List[BaseTool]:
"""Get the tools in the toolkit."""

View File

@@ -2,7 +2,7 @@
from abc import ABC, abstractmethod
from typing import List
from pydantic_v1 import BaseModel
from pydantic import BaseModel
from langchain.tools import BaseTool

View File

@@ -2,7 +2,7 @@ from __future__ import annotations
from typing import List, Optional
from pydantic_v1 import root_validator
from pydantic import root_validator
from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.tools import BaseTool

View File

@@ -2,7 +2,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING, List
from pydantic_v1 import Field
from pydantic import ConfigDict, Field
from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.tools import BaseTool
@@ -31,11 +31,7 @@ class GmailToolkit(BaseToolkit):
"""Toolkit for interacting with Gmail."""
api_resource: Resource = Field(default_factory=build_resource_service)
class Config:
"""Pydantic config."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
def get_tools(self) -> List[BaseTool]:
"""Get the tools in the toolkit."""

View File

@@ -7,15 +7,12 @@ from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.tools import BaseTool
from langchain.tools.multion.create_session import MultionCreateSession
from langchain.tools.multion.update_session import MultionUpdateSession
from pydantic import ConfigDict
class MultionToolkit(BaseToolkit):
"""Toolkit for interacting with the Browser Agent"""
class Config:
"""Pydantic config."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
def get_tools(self) -> List[BaseTool]:
"""Get the tools in the toolkit."""

View File

@@ -2,7 +2,7 @@ from __future__ import annotations
from typing import Any, List, Optional, Sequence
from pydantic_v1 import Field
from pydantic import Field
from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.agents.agent_toolkits.nla.tool import NLATool

View File

@@ -2,7 +2,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING, List
from pydantic_v1 import Field
from pydantic import ConfigDict, Field
from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.tools import BaseTool
@@ -21,11 +21,7 @@ class O365Toolkit(BaseToolkit):
"""Toolkit for interacting with Office 365."""
account: Account = Field(default_factory=authenticate)
class Config:
"""Pydantic config."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
def get_tools(self) -> List[BaseTool]:
"""Get the tools in the toolkit."""

View File

@@ -5,7 +5,7 @@ from functools import partial
from typing import Any, Callable, Dict, List, Optional
import yaml
from pydantic_v1 import Field
from pydantic import Field
from langchain.agents.agent import AgentExecutor
from langchain.agents.agent_toolkits.openapi.planner_prompt import (

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING, List, Optional, Type, cast
from pydantic_v1 import Extra, root_validator
from pydantic import ConfigDict, root_validator
from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.tools.base import BaseTool
@@ -36,12 +36,7 @@ class PlayWrightBrowserToolkit(BaseToolkit):
sync_browser: Optional["SyncBrowser"] = None
async_browser: Optional["AsyncBrowser"] = None
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@root_validator
def validate_imports_and_browser_provided(cls, values: dict) -> dict:

View File

@@ -1,7 +1,7 @@
"""Toolkit for interacting with a Power BI dataset."""
from typing import List, Optional, Union
from pydantic_v1 import Field
from pydantic import ConfigDict, Field
from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.callbacks.base import BaseCallbackManager
@@ -38,11 +38,7 @@ class PowerBIToolkit(BaseToolkit):
callback_manager: Optional[BaseCallbackManager] = None
output_token_limit: Optional[int] = None
tiktoken_model_name: Optional[str] = None
class Config:
"""Configuration for this pydantic object."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
def get_tools(self) -> List[BaseTool]:
"""Get the tools in the toolkit."""

View File

@@ -1,7 +1,7 @@
"""Toolkit for interacting with Spark SQL."""
from typing import List
from pydantic_v1 import Field
from pydantic import ConfigDict, Field
from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.schema.language_model import BaseLanguageModel
@@ -20,11 +20,7 @@ class SparkSQLToolkit(BaseToolkit):
db: SparkSQL = Field(exclude=True)
llm: BaseLanguageModel = Field(exclude=True)
class Config:
"""Configuration for this pydantic object."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
def get_tools(self) -> List[BaseTool]:
"""Get the tools in the toolkit."""

View File

@@ -1,7 +1,7 @@
"""Toolkit for interacting with an SQL database."""
from typing import List
from pydantic_v1 import Field
from pydantic import ConfigDict, Field
from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.schema.language_model import BaseLanguageModel
@@ -25,11 +25,7 @@ class SQLDatabaseToolkit(BaseToolkit):
def dialect(self) -> str:
"""Return string representation of SQL dialect to use."""
return self.db.dialect
class Config:
"""Configuration for this pydantic object."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
def get_tools(self) -> List[BaseTool]:
"""Get the tools in the toolkit."""

View File

@@ -1,7 +1,7 @@
"""Toolkit for interacting with a vector store."""
from typing import List
from pydantic_v1 import BaseModel, Field
from pydantic import ConfigDict, BaseModel, Field
from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.llms.openai import OpenAI
@@ -20,11 +20,7 @@ class VectorStoreInfo(BaseModel):
vectorstore: VectorStore = Field(exclude=True)
name: str
description: str
class Config:
"""Configuration for this pydantic object."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
class VectorStoreToolkit(BaseToolkit):
@@ -32,11 +28,7 @@ class VectorStoreToolkit(BaseToolkit):
vectorstore_info: VectorStoreInfo = Field(exclude=True)
llm: BaseLanguageModel = Field(default_factory=lambda: OpenAI(temperature=0))
class Config:
"""Configuration for this pydantic object."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
def get_tools(self) -> List[BaseTool]:
"""Get the tools in the toolkit."""
@@ -66,11 +58,7 @@ class VectorStoreRouterToolkit(BaseToolkit):
vectorstores: List[VectorStoreInfo] = Field(exclude=True)
llm: BaseLanguageModel = Field(default_factory=lambda: OpenAI(temperature=0))
class Config:
"""Configuration for this pydantic object."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
def get_tools(self) -> List[BaseTool]:
"""Get the tools in the toolkit."""

View File

@@ -1,6 +1,6 @@
from typing import Any, List, Optional, Sequence, Tuple
from pydantic_v1 import Field
from pydantic import Field
from langchain.agents.agent import Agent, AgentOutputParser
from langchain.agents.chat.output_parser import ChatOutputParser

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
from typing import Any, List, Optional, Sequence
from pydantic_v1 import Field
from pydantic import Field
from langchain.agents.agent import Agent, AgentOutputParser
from langchain.agents.agent_types import AgentType

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
from typing import Any, List, Optional, Sequence, Tuple
from pydantic_v1 import Field
from pydantic import Field
from langchain.agents.agent import Agent, AgentOutputParser
from langchain.agents.conversational_chat.output_parser import ConvoOutputParser

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
from typing import Any, Callable, List, NamedTuple, Optional, Sequence
from pydantic_v1 import Field
from pydantic import Field
from langchain.agents.agent import Agent, AgentExecutor, AgentOutputParser
from langchain.agents.agent_types import AgentType

View File

@@ -4,7 +4,7 @@ from dataclasses import dataclass
from json import JSONDecodeError
from typing import Any, List, Optional, Sequence, Tuple, Union
from pydantic_v1 import root_validator
from pydantic import root_validator
from langchain.agents import BaseSingleActionAgent
from langchain.callbacks.base import BaseCallbackManager

View File

@@ -4,7 +4,7 @@ from dataclasses import dataclass
from json import JSONDecodeError
from typing import Any, List, Optional, Sequence, Tuple, Union
from pydantic_v1 import root_validator
from pydantic import root_validator
from langchain.agents import BaseMultiActionAgent
from langchain.callbacks.base import BaseCallbackManager

View File

@@ -1,7 +1,7 @@
"""Chain that implements the ReAct paper from https://arxiv.org/pdf/2210.03629.pdf."""
from typing import Any, List, Optional, Sequence
from pydantic_v1 import Field
from pydantic import Field
from langchain.agents.agent import Agent, AgentExecutor, AgentOutputParser
from langchain.agents.agent_types import AgentType

View File

@@ -1,7 +1,7 @@
"""Chain that does self-ask with search."""
from typing import Any, Sequence, Union
from pydantic_v1 import Field
from pydantic import Field
from langchain.agents.agent import Agent, AgentExecutor, AgentOutputParser
from langchain.agents.agent_types import AgentType

View File

@@ -1,7 +1,7 @@
import re
from typing import Any, List, Optional, Sequence, Tuple
from pydantic_v1 import Field
from pydantic import Field
from langchain.agents.agent import Agent, AgentOutputParser
from langchain.agents.structured_chat.output_parser import (

View File

@@ -5,7 +5,7 @@ import logging
import re
from typing import Optional, Union
from pydantic_v1 import Field
from pydantic import Field
from langchain.agents.agent import AgentOutputParser
from langchain.agents.structured_chat.prompt import FORMAT_INSTRUCTIONS

View File

@@ -5,14 +5,26 @@ import datetime
import warnings
from typing import Any, Dict, List, Optional
from uuid import UUID
from enum import Enum
from langsmith.schemas import RunBase as BaseRunV2
from langsmith.schemas import RunTypeEnum as RunTypeEnumDep
from pydantic_v1 import BaseModel, Field, root_validator
from pydantic import model_validator, BaseModel, Field
# from langsmith.schemas import RunBase as BaseRunV2
from langchain.schema import LLMResult
class RunTypeEnumDep(str, Enum):
"""(Deprecated) Enum for run types. Use string directly."""
tool = "tool"
chain = "chain"
llm = "llm"
retriever = "retriever"
embedding = "embedding"
prompt = "prompt"
parser = "parser"
def RunTypeEnum() -> RunTypeEnumDep:
"""RunTypeEnum."""
warnings.warn(
@@ -96,7 +108,46 @@ class ToolRun(BaseRun):
child_tool_runs: List[ToolRun] = Field(default_factory=list)
# Begin V2 API Schemas
# class RunBase(BaseModel):
# """Base Run schema."""
#
# id: UUID
# name: str
# start_time: datetime
# run_type: str
# """The type of run, such as tool, chain, llm, retriever,
# embedding, prompt, parser."""
# end_time: Optional[datetime] = None
# extra: Optional[dict] = None
# error: Optional[str] = None
# serialized: Optional[dict]
# events: Optional[List[Dict]] = None
# inputs: dict
# outputs: Optional[dict] = None
# reference_example_id: Optional[UUID] = None
# parent_run_id: Optional[UUID] = None
# tags: Optional[List[str]] = None
class BaseRunV2(BaseModel):
"""Base Run schema."""
id: UUID
name: str
start_time: datetime.datetime
run_type: str
"""The type of run, such as tool, chain, llm, retriever,
embedding, prompt, parser."""
end_time: Optional[datetime.datetime] = None
extra: Optional[dict] = None
error: Optional[str] = None
serialized: Optional[dict]
events: Optional[List[Dict]] = None
inputs: dict
outputs: Optional[dict] = None
reference_example_id: Optional[UUID] = None
parent_run_id: Optional[UUID] = None
tags: Optional[List[str]] = None
class Run(BaseRunV2):
@@ -107,7 +158,8 @@ class Run(BaseRunV2):
child_runs: List[Run] = Field(default_factory=list)
tags: Optional[List[str]] = Field(default_factory=list)
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def assign_name(cls, values: dict) -> dict:
"""Assign name to the run."""
if values.get("name") is None:
@@ -126,7 +178,7 @@ __all__ = [
"ChainRun",
"LLMRun",
"Run",
"RunTypeEnum",
"RunTypeEnumDep",
"ToolRun",
"TracerSession",
"TracerSessionBase",

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Optional
from pydantic_v1 import Field, root_validator
from pydantic import model_validator, Field
from langchain.callbacks.manager import (
AsyncCallbackManagerForChainRun,
@@ -43,7 +43,8 @@ class APIChain(Chain):
"""
return [self.output_key]
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def validate_api_request_prompt(cls, values: Dict) -> Dict:
"""Check that api request prompt expects the right variables."""
input_vars = values["api_request_chain"].prompt.input_variables
@@ -54,7 +55,8 @@ class APIChain(Chain):
)
return values
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def validate_api_answer_prompt(cls, values: Dict) -> Dict:
"""Check that api answer prompt expects the right variables."""
input_vars = values["api_answer_chain"].prompt.input_variables

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
import json
from typing import Any, Dict, List, NamedTuple, Optional, cast
from pydantic_v1 import BaseModel, Field
from pydantic import BaseModel, Field
from requests import Response
from langchain.callbacks.manager import CallbackManagerForChainRun, Callbacks
@@ -29,7 +29,7 @@ class OpenAPIEndpointChain(Chain, BaseModel):
"""Chain interacts with an OpenAPI endpoint using natural language."""
api_request_chain: LLMChain
api_response_chain: Optional[LLMChain]
api_response_chain: Optional[LLMChain] = None
api_operation: APIOperation
requests: Requests = Field(exclude=True, default_factory=Requests)
param_mapping: _ParamMapping = Field(alias="param_mapping")

View File

@@ -10,7 +10,7 @@ from pathlib import Path
from typing import Any, Dict, List, Optional, Union
import yaml
from pydantic_v1 import Field, root_validator, validator
from pydantic import model_validator, ConfigDict, Field, validator
import langchain
from langchain.callbacks.base import BaseCallbackManager
@@ -122,17 +122,14 @@ class Chain(Serializable, Runnable[Dict[str, Any], Dict[str, Any]], ABC):
and passed as arguments to the handlers defined in `callbacks`.
You can use these to eg identify a specific instance of a chain with its use case.
"""
class Config:
"""Configuration for this pydantic object."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
@property
def _chain_type(self) -> str:
raise NotImplementedError("Saving not supported for this chain type.")
@root_validator()
@model_validator(mode='before')
@classmethod
def raise_callback_manager_deprecation(cls, values: Dict) -> Dict:
"""Raise deprecation warning if callback_manager is used."""
if values.get("callback_manager") is not None:
@@ -143,6 +140,8 @@ class Chain(Serializable, Runnable[Dict[str, Any], Dict[str, Any]], ABC):
values["callbacks"] = values.pop("callback_manager", None)
return values
# TODO[pydantic]: We couldn't refactor the `validator`, please replace it by `field_validator` manually.
# Check https://docs.pydantic.dev/dev-v2/migration/#changes-to-validators for more information.
@validator("verbose", pre=True, always=True)
def set_verbose(cls, verbose: Optional[bool]) -> bool:
"""Set the chain verbosity.

View File

@@ -3,7 +3,7 @@
from abc import ABC, abstractmethod
from typing import Any, Dict, List, Optional, Tuple
from pydantic_v1 import Field
from pydantic import Field
from langchain.callbacks.manager import (
AsyncCallbackManagerForChainRun,

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Optional, Tuple
from pydantic_v1 import Extra, root_validator
from pydantic import model_validator, ConfigDict
from langchain.callbacks.manager import Callbacks
from langchain.chains.combine_documents.base import BaseCombineDocumentsChain
@@ -109,14 +109,10 @@ class MapReduceDocumentsChain(BaseCombineDocumentsChain):
if self.return_intermediate_steps:
_output_keys = _output_keys + ["intermediate_steps"]
return _output_keys
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def get_reduce_chain(cls, values: Dict) -> Dict:
"""For backwards compatibility."""
if "combine_document_chain" in values:
@@ -139,7 +135,8 @@ class MapReduceDocumentsChain(BaseCombineDocumentsChain):
return values
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def get_return_intermediate_steps(cls, values: Dict) -> Dict:
"""For backwards compatibility."""
if "return_map_steps" in values:
@@ -147,7 +144,8 @@ class MapReduceDocumentsChain(BaseCombineDocumentsChain):
del values["return_map_steps"]
return values
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def get_default_document_variable_name(cls, values: Dict) -> Dict:
"""Get default document variable name, if not provided."""
if "document_variable_name" not in values:

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Optional, Sequence, Tuple, Union, cast
from pydantic_v1 import Extra, root_validator
from pydantic import model_validator, ConfigDict
from langchain.callbacks.manager import Callbacks
from langchain.chains.combine_documents.base import BaseCombineDocumentsChain
@@ -71,12 +71,7 @@ class MapRerankDocumentsChain(BaseCombineDocumentsChain):
return_intermediate_steps: bool = False
"""Return intermediate steps.
Intermediate steps include the results of calling llm_chain on each document."""
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@property
def output_keys(self) -> List[str]:
@@ -91,7 +86,8 @@ class MapRerankDocumentsChain(BaseCombineDocumentsChain):
_output_keys += self.metadata_keys
return _output_keys
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_llm_output(cls, values: Dict) -> Dict:
"""Validate that the combine chain outputs a dictionary."""
output_parser = values["llm_chain"].prompt.output_parser
@@ -113,7 +109,8 @@ class MapRerankDocumentsChain(BaseCombineDocumentsChain):
)
return values
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def get_default_document_variable_name(cls, values: Dict) -> Dict:
"""Get default document variable name, if not provided."""
if "document_variable_name" not in values:

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
from typing import Any, Callable, List, Optional, Protocol, Tuple
from pydantic_v1 import Extra
from pydantic import ConfigDict
from langchain.callbacks.manager import Callbacks
from langchain.chains.combine_documents.base import BaseCombineDocumentsChain
@@ -156,12 +156,7 @@ class ReduceDocumentsChain(BaseCombineDocumentsChain):
"""The maximum number of tokens to group documents into. For example, if
set to 3000 then documents will be grouped into chunks of no greater than
3000 tokens before trying to combine them into a smaller chunk."""
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@property
def _collapse_chain(self) -> BaseCombineDocumentsChain:

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Tuple
from pydantic_v1 import Extra, Field, root_validator
from pydantic import model_validator, ConfigDict, Field
from langchain.callbacks.manager import Callbacks
from langchain.chains.combine_documents.base import (
@@ -97,14 +97,10 @@ class RefineDocumentsChain(BaseCombineDocumentsChain):
if self.return_intermediate_steps:
_output_keys = _output_keys + ["intermediate_steps"]
return _output_keys
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def get_return_intermediate_steps(cls, values: Dict) -> Dict:
"""For backwards compatibility."""
if "return_refine_steps" in values:
@@ -112,7 +108,8 @@ class RefineDocumentsChain(BaseCombineDocumentsChain):
del values["return_refine_steps"]
return values
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def get_default_document_variable_name(cls, values: Dict) -> Dict:
"""Get default document variable name, if not provided."""
if "document_variable_name" not in values:

View File

@@ -2,7 +2,7 @@
from typing import Any, Dict, List, Optional, Tuple
from pydantic_v1 import Extra, Field, root_validator
from pydantic import model_validator, ConfigDict, Field
from langchain.callbacks.manager import Callbacks
from langchain.chains.combine_documents.base import (
@@ -68,14 +68,10 @@ class StuffDocumentsChain(BaseCombineDocumentsChain):
If only one variable in the llm_chain, this need not be provided."""
document_separator: str = "\n\n"
"""The string with which to join the formatted documents"""
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def get_default_document_variable_name(cls, values: Dict) -> Dict:
"""Get default document variable name, if not provided.

View File

@@ -1,5 +1,5 @@
"""Models for the Constitutional AI chain."""
from pydantic_v1 import BaseModel
from pydantic import BaseModel
class ConstitutionalPrinciple(BaseModel):

View File

@@ -1,7 +1,7 @@
"""Chain that carries on a conversation and calls an LLM."""
from typing import Dict, List
from pydantic_v1 import Extra, Field, root_validator
from pydantic import model_validator, ConfigDict, Field
from langchain.chains.conversation.prompt import PROMPT
from langchain.chains.llm import LLMChain
@@ -27,19 +27,15 @@ class ConversationChain(LLMChain):
input_key: str = "input" #: :meta private:
output_key: str = "response" #: :meta private:
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@property
def input_keys(self) -> List[str]:
"""Use this since so some prompt vars come from history."""
return [self.input_key]
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_prompt_input_variables(cls, values: Dict) -> Dict:
"""Validate that prompt input variables are consistent."""
memory_keys = values["memory"].memory_variables

View File

@@ -7,7 +7,7 @@ from abc import abstractmethod
from pathlib import Path
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
from pydantic_v1 import Extra, Field, root_validator
from pydantic import model_validator, ConfigDict, Field
from langchain.callbacks.manager import (
AsyncCallbackManagerForChainRun,
@@ -75,13 +75,7 @@ class BaseConversationalRetrievalChain(Chain):
get_chat_history: Optional[Callable[[List[CHAT_TURN_TYPE]], str]] = None
"""An optional function to get a string of the chat history.
If None is provided, will use a default."""
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
allow_population_by_field_name = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True, populate_by_name=True)
@property
def input_keys(self) -> List[str]:
@@ -374,7 +368,8 @@ class ChatVectorDBChain(BaseConversationalRetrievalChain):
def _chain_type(self) -> str:
return "chat-vector-db"
@root_validator()
@model_validator(mode='before')
@classmethod
def raise_deprecation(cls, values: Dict) -> Dict:
warnings.warn(
"`ChatVectorDBChain` is deprecated - "

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING, Any, Dict, List, Optional
from pydantic_v1 import Extra, root_validator
from pydantic import model_validator, ConfigDict
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.base import Chain
@@ -36,7 +36,7 @@ class ElasticsearchDatabaseChain(Chain):
"""Chain for creating the ES query."""
answer_chain: LLMChain
"""Chain for answering the user question."""
database: Any
database: Any = None
"""Elasticsearch database to connect to of type elasticsearch.Elasticsearch."""
top_k: int = 10
"""Number of results to return from the query"""
@@ -47,14 +47,10 @@ class ElasticsearchDatabaseChain(Chain):
sample_documents_in_index_info: int = 3
return_intermediate_steps: bool = False
"""Whether or not to return the intermediate steps along with the final answer."""
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_indices(cls, values: dict) -> dict:
if values["include_indices"] and values["ignore_indices"]:
raise ValueError(

View File

@@ -5,7 +5,7 @@ from abc import abstractmethod
from typing import Any, Dict, List, Optional, Sequence, Tuple
import numpy as np
from pydantic_v1 import Field
from pydantic import Field
from langchain.callbacks.manager import (
CallbackManagerForChainRun,

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
import re
from typing import Any, Dict, List, Optional
from pydantic_v1 import Field
from pydantic import Field
from langchain.base_language import BaseLanguageModel
from langchain.callbacks.manager import CallbackManagerForChainRun

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Optional
from pydantic_v1 import Field
from pydantic import Field
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.base import Chain

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
import re
from typing import Any, Dict, List, Optional
from pydantic_v1 import Field
from pydantic import Field
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.base import Chain

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Optional
from pydantic_v1 import Field
from pydantic import Field
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.base import Chain

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Optional
from pydantic_v1 import Field
from pydantic import Field
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.base import Chain

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Optional
from pydantic_v1 import Field
from pydantic import Field
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.base import Chain

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
import re
from typing import Any, Dict, List, Optional
from pydantic_v1 import Field
from pydantic import Field
from langchain.base_language import BaseLanguageModel
from langchain.callbacks.manager import CallbackManagerForChainRun

View File

@@ -5,7 +5,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Optional
from pydantic_v1 import Field
from pydantic import Field
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.base import Chain

View File

@@ -7,7 +7,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Optional
import numpy as np
from pydantic_v1 import Extra
from pydantic import ConfigDict
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.base import Chain
@@ -25,12 +25,7 @@ class HypotheticalDocumentEmbedder(Chain, Embeddings):
base_embeddings: Embeddings
llm_chain: LLMChain
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@property
def input_keys(self) -> List[str]:

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
import warnings
from typing import Any, Dict, List, Optional, Sequence, Tuple, Union
from pydantic_v1 import Extra, Field
from pydantic import ConfigDict, Field
from langchain.callbacks.manager import (
AsyncCallbackManager,
@@ -58,12 +58,7 @@ class LLMChain(Chain):
"""Whether to return only the final parsed result. Defaults to True.
If false, will return a bunch of extra information about the generation."""
llm_kwargs: dict = Field(default_factory=dict)
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@property
def input_keys(self) -> List[str]:

View File

@@ -5,7 +5,7 @@ import logging
import warnings
from typing import Any, Dict, List, Optional
from pydantic_v1 import Extra, Field, root_validator
from pydantic import model_validator, ConfigDict, Field, root_validator
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.base import Chain
@@ -36,14 +36,10 @@ class LLMBashChain(Chain):
prompt: BasePromptTemplate = PROMPT
"""[Deprecated]"""
bash_process: BashProcess = Field(default_factory=BashProcess) #: :meta private:
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def raise_deprecation(cls, values: Dict) -> Dict:
if "llm" in values:
warnings.warn(

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
import warnings
from typing import Any, Dict, List, Optional
from pydantic_v1 import Extra, root_validator
from pydantic import model_validator, ConfigDict
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.base import Chain
@@ -87,14 +87,10 @@ class LLMCheckerChain(Chain):
"""[Deprecated] Prompt to use when questioning the documents."""
input_key: str = "query" #: :meta private:
output_key: str = "result" #: :meta private:
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def raise_deprecation(cls, values: Dict) -> Dict:
if "llm" in values:
warnings.warn(

View File

@@ -7,7 +7,7 @@ import warnings
from typing import Any, Dict, List, Optional
import numexpr
from pydantic_v1 import Extra, root_validator
from pydantic import model_validator, ConfigDict
from langchain.callbacks.manager import (
AsyncCallbackManagerForChainRun,
@@ -37,14 +37,10 @@ class LLMMathChain(Chain):
"""[Deprecated] Prompt to use to translate to python if necessary."""
input_key: str = "question" #: :meta private:
output_key: str = "answer" #: :meta private:
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def raise_deprecation(cls, values: Dict) -> Dict:
if "llm" in values:
warnings.warn(

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Optional
from pydantic_v1 import Extra, Field, root_validator
from pydantic import model_validator, ConfigDict, Field
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains import LLMChain
@@ -27,12 +27,7 @@ class LLMRequestsChain(Chain):
requests_key: str = "requests_result" #: :meta private:
input_key: str = "url" #: :meta private:
output_key: str = "output" #: :meta private:
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@property
def input_keys(self) -> List[str]:
@@ -50,7 +45,8 @@ class LLMRequestsChain(Chain):
"""
return [self.output_key]
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
try:

View File

@@ -6,7 +6,7 @@ import warnings
from pathlib import Path
from typing import Any, Dict, List, Optional
from pydantic_v1 import Extra, root_validator
from pydantic import model_validator, ConfigDict
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.base import Chain
@@ -101,14 +101,10 @@ class LLMSummarizationCheckerChain(Chain):
output_key: str = "result" #: :meta private:
max_checks: int = 2
"""Maximum number of times to check the assertions. Default to double-checking."""
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def raise_deprecation(cls, values: Dict) -> Dict:
if "llm" in values:
warnings.warn(

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
import re
from typing import Any, Dict, List, Optional
from pydantic_v1 import Extra
from pydantic import ConfigDict
from langchain.base_language import BaseLanguageModel
from langchain.callbacks.manager import (
@@ -30,12 +30,7 @@ class LLMSymbolicMathChain(Chain):
llm_chain: LLMChain
input_key: str = "question" #: :meta private:
output_key: str = "answer" #: :meta private:
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@property
def input_keys(self) -> List[str]:

View File

@@ -7,7 +7,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Mapping, Optional
from pydantic_v1 import Extra
from pydantic import ConfigDict
from langchain.callbacks.manager import CallbackManagerForChainRun, Callbacks
from langchain.chains import ReduceDocumentsChain
@@ -65,12 +65,7 @@ class MapReduceChain(Chain):
callbacks=callbacks,
**kwargs,
)
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@property
def input_keys(self) -> List[str]:

View File

@@ -1,7 +1,7 @@
"""Pass input through a moderation endpoint."""
from typing import Any, Dict, List, Optional
from pydantic_v1 import root_validator
from pydantic import model_validator
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.base import Chain
@@ -34,7 +34,8 @@ class OpenAIModerationChain(Chain):
openai_api_key: Optional[str] = None
openai_organization: Optional[str] = None
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
openai_api_key = get_from_dict_or_env(

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
import warnings
from typing import Any, Dict, List, Optional
from pydantic_v1 import Extra, root_validator
from pydantic import model_validator, ConfigDict
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.base import Chain
@@ -33,14 +33,10 @@ class NatBotChain(Chain):
input_browser_content_key: str = "browser_content" #: :meta private:
previous_command: str = "" #: :meta private:
output_key: str = "command" #: :meta private:
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def raise_deprecation(cls, values: Dict) -> Dict:
if "llm" in values:
warnings.warn(

View File

@@ -12,7 +12,7 @@ from typing import (
Union,
)
from pydantic_v1 import BaseModel
from pydantic import BaseModel
from langchain.base_language import BaseLanguageModel
from langchain.chains import LLMChain

View File

@@ -1,6 +1,6 @@
from typing import Iterator, List
from pydantic_v1 import BaseModel, Field
from pydantic import BaseModel, Field
from langchain.chains.llm import LLMChain
from langchain.chains.openai_functions.utils import get_llm_kwargs

View File

@@ -1,6 +1,6 @@
from typing import Any, List
from pydantic_v1 import BaseModel
from pydantic import BaseModel
from langchain.chains.base import Chain
from langchain.chains.llm import LLMChain

View File

@@ -1,6 +1,6 @@
from typing import Any, List, Optional, Type, Union
from pydantic_v1 import BaseModel, Field
from pydantic import BaseModel, Field
from langchain.chains.llm import LLMChain
from langchain.chains.openai_functions.utils import get_llm_kwargs

View File

@@ -1,7 +1,7 @@
from abc import ABC, abstractmethod
from typing import Callable, List, Tuple
from pydantic_v1 import BaseModel, Field
from pydantic import BaseModel, Field
from langchain.chat_models.base import BaseChatModel
from langchain.llms.base import BaseLLM

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
import json
from typing import Any, Dict, List, Optional
from pydantic_v1 import Field
from pydantic import Field
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.base import Chain

View File

@@ -7,7 +7,7 @@ import re
from abc import ABC, abstractmethod
from typing import Any, Dict, List, Optional
from pydantic_v1 import Extra, root_validator
from pydantic import model_validator, ConfigDict
from langchain.callbacks.manager import (
AsyncCallbackManagerForChainRun,
@@ -86,12 +86,7 @@ class BaseQAWithSourcesChain(Chain, ABC):
llm, chain_type=chain_type, **_chain_kwargs
)
return cls(combine_documents_chain=combine_documents_chain, **kwargs)
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@property
def input_keys(self) -> List[str]:
@@ -112,7 +107,8 @@ class BaseQAWithSourcesChain(Chain, ABC):
_output_keys = _output_keys + ["source_documents"]
return _output_keys
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def validate_naming(cls, values: Dict) -> Dict:
"""Fix backwards compatibility in naming."""
if "combine_document_chain" in values:

View File

@@ -2,7 +2,7 @@
from typing import Any, Dict, List
from pydantic_v1 import Field
from pydantic import Field
from langchain.callbacks.manager import (
AsyncCallbackManagerForChainRun,

View File

@@ -3,7 +3,7 @@
import warnings
from typing import Any, Dict, List
from pydantic_v1 import Field, root_validator
from pydantic import model_validator, Field
from langchain.callbacks.manager import (
AsyncCallbackManagerForChainRun,
@@ -63,7 +63,8 @@ class VectorDBQAWithSourcesChain(BaseQAWithSourcesChain):
) -> List[Document]:
raise NotImplementedError("VectorDBQAWithSourcesChain does not support async")
@root_validator()
@model_validator(mode='before')
@classmethod
def raise_deprecation(cls, values: Dict) -> Dict:
warnings.warn(
"`VectorDBQAWithSourcesChain` is deprecated - "

View File

@@ -5,7 +5,7 @@ from abc import ABC, abstractmethod
from enum import Enum
from typing import Any, List, Optional, Sequence, Union
from pydantic_v1 import BaseModel
from pydantic import BaseModel
class Visitor(ABC):
@@ -98,7 +98,7 @@ class Comparison(FilterDirective):
comparator: Comparator
attribute: str
value: Any
value: Any = None
class Operation(FilterDirective):
@@ -113,7 +113,7 @@ class StructuredQuery(Expr):
query: str
"""Query string."""
filter: Optional[FilterDirective]
filter: Optional[FilterDirective] = None
"""Filtering expression."""
limit: Optional[int]
limit: Optional[int] = None
"""Limit on the number of results."""

View File

@@ -1,4 +1,4 @@
from pydantic_v1 import BaseModel
from pydantic import ConfigDict, BaseModel
class AttributeInfo(BaseModel):
@@ -7,9 +7,4 @@ class AttributeInfo(BaseModel):
name: str
description: str
type: str
class Config:
"""Configuration for this pydantic object."""
arbitrary_types_allowed = True
frozen = True
model_config = ConfigDict(arbitrary_types_allowed=True, frozen=True)

View File

@@ -6,7 +6,7 @@ import warnings
from abc import abstractmethod
from typing import Any, Dict, List, Optional
from pydantic_v1 import Extra, Field, root_validator
from pydantic import model_validator, ConfigDict, Field
from langchain.callbacks.manager import (
AsyncCallbackManagerForChainRun,
@@ -34,13 +34,7 @@ class BaseRetrievalQA(Chain):
output_key: str = "result" #: :meta private:
return_source_documents: bool = False
"""Return the source documents or not."""
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
allow_population_by_field_name = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True, populate_by_name=True)
@property
def input_keys(self) -> List[str]:
@@ -247,7 +241,8 @@ class VectorDBQA(BaseRetrievalQA):
search_kwargs: Dict[str, Any] = Field(default_factory=dict)
"""Extra search args."""
@root_validator()
@model_validator(mode='before')
@classmethod
def raise_deprecation(cls, values: Dict) -> Dict:
warnings.warn(
"`VectorDBQA` is deprecated - "
@@ -255,7 +250,8 @@ class VectorDBQA(BaseRetrievalQA):
)
return values
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_search_type(cls, values: Dict) -> Dict:
"""Validate search type."""
if "search_type" in values:

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
from abc import ABC
from typing import Any, Dict, List, Mapping, NamedTuple, Optional
from pydantic_v1 import Extra
from pydantic import ConfigDict
from langchain.callbacks.manager import (
AsyncCallbackManagerForChainRun,
@@ -59,12 +59,7 @@ class MultiRouteChain(Chain):
silent_errors: bool = False
"""If True, use default_chain when an invalid destination name is provided.
Defaults to False."""
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@property
def input_keys(self) -> List[str]:

View File

@@ -2,7 +2,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Optional, Sequence, Tuple, Type
from pydantic_v1 import Extra
from pydantic import ConfigDict
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains.router.base import RouterChain
@@ -16,12 +16,7 @@ class EmbeddingRouterChain(RouterChain):
vectorstore: VectorStore
routing_keys: List[str] = ["query"]
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@property
def input_keys(self) -> List[str]:

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Optional, Type, cast
from pydantic_v1 import root_validator
from pydantic import model_validator
from langchain.callbacks.manager import (
AsyncCallbackManagerForChainRun,
@@ -22,7 +22,8 @@ class LLMRouterChain(RouterChain):
llm_chain: LLMChain
"""LLM chain used to perform routing"""
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_prompt(cls, values: dict) -> dict:
prompt = values["llm_chain"].prompt
if prompt.output_parser is None:

View File

@@ -1,7 +1,7 @@
"""Chain pipeline where the outputs of one step feed directly into next."""
from typing import Any, Dict, List, Optional
from pydantic_v1 import Extra, root_validator
from pydantic import model_validator, ConfigDict
from langchain.callbacks.manager import (
AsyncCallbackManagerForChainRun,
@@ -18,12 +18,7 @@ class SequentialChain(Chain):
input_variables: List[str]
output_variables: List[str] #: :meta private:
return_all: bool = False
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@property
def input_keys(self) -> List[str]:
@@ -41,7 +36,8 @@ class SequentialChain(Chain):
"""
return self.output_variables
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def validate_chains(cls, values: Dict) -> Dict:
"""Validate that the correct inputs exist for all chains."""
chains = values["chains"]
@@ -129,12 +125,7 @@ class SimpleSequentialChain(Chain):
strip_outputs: bool = False
input_key: str = "input" #: :meta private:
output_key: str = "output" #: :meta private:
class Config:
"""Configuration for this pydantic object."""
extra = Extra.forbid
arbitrary_types_allowed = True
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@property
def input_keys(self) -> List[str]:
@@ -152,7 +143,8 @@ class SimpleSequentialChain(Chain):
"""
return [self.output_key]
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_chains(cls, values: Dict) -> Dict:
"""Validate that chains are all single input/output."""
for chain in values["chains"]:

View File

@@ -3,7 +3,7 @@ import functools
import logging
from typing import Any, Awaitable, Callable, Dict, List, Optional
from pydantic_v1 import Field
from pydantic import Field
from langchain.callbacks.manager import (
AsyncCallbackManagerForChainRun,

View File

@@ -7,7 +7,7 @@ import sys
from typing import TYPE_CHECKING, Optional, Set
import requests
from pydantic_v1 import Field, root_validator
from pydantic import model_validator, Field
from langchain.adapters.openai import convert_message_to_dict
from langchain.chat_models.openai import (
@@ -95,7 +95,8 @@ class ChatAnyscale(ChatOpenAI):
return {model["id"] for model in models_response.json()["data"]}
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def validate_environment_override(cls, values: dict) -> dict:
"""Validate that api key and python package exists in environment."""
values["openai_api_key"] = get_from_dict_or_env(

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
import logging
from typing import Any, Dict, Mapping
from pydantic_v1 import root_validator
from pydantic import model_validator
from langchain.chat_models.openai import ChatOpenAI
from langchain.schema import ChatResult
@@ -61,7 +61,8 @@ class AzureChatOpenAI(ChatOpenAI):
openai_organization: str = ""
openai_proxy: str = ""
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
values["openai_api_key"] = get_from_dict_or_env(

View File

@@ -1,7 +1,7 @@
import json
from typing import Any, Dict, List, Optional
from pydantic_v1 import validator
from pydantic import validator
from langchain.callbacks.manager import CallbackManagerForLLMRun
from langchain.chat_models.base import SimpleChatModel
@@ -96,6 +96,8 @@ class AzureMLChatOnlineEndpoint(SimpleChatModel):
model_kwargs: Optional[dict] = None
"""Key word arguments to pass to the model."""
# TODO[pydantic]: We couldn't refactor the `validator`, please replace it by `field_validator` manually.
# Check https://docs.pydantic.dev/dev-v2/migration/#changes-to-validators for more information.
@validator("http_client", always=True, allow_reuse=True)
@classmethod
def validate_client(cls, field_value: Any, values: Dict) -> AzureMLEndpointClient:

View File

@@ -14,7 +14,7 @@ from typing import (
cast,
)
from pydantic_v1 import Field, root_validator
from pydantic import model_validator, ConfigDict, Field
import langchain
from langchain.callbacks.base import BaseCallbackManager
@@ -66,7 +66,8 @@ class BaseChatModel(BaseLanguageModel[BaseMessageChunk], ABC):
metadata: Optional[Dict[str, Any]] = Field(default=None, exclude=True)
"""Metadata to add to the run trace."""
@root_validator()
@model_validator(mode='before')
@classmethod
def raise_deprecation(cls, values: Dict) -> Dict:
"""Raise deprecation warning if callback_manager is used."""
if values.get("callback_manager") is not None:
@@ -76,11 +77,7 @@ class BaseChatModel(BaseLanguageModel[BaseMessageChunk], ABC):
)
values["callbacks"] = values.pop("callback_manager", None)
return values
class Config:
"""Configuration for this pydantic object."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
# --- Runnable methods ---

View File

@@ -3,7 +3,7 @@ import threading
from typing import Any, Dict, List, Mapping, Optional
import requests
from pydantic_v1 import root_validator
from pydantic import model_validator
from langchain.callbacks.manager import CallbackManagerForLLMRun
from langchain.chat_models.base import BaseChatModel
@@ -69,7 +69,8 @@ class ErnieBotChat(BaseChatModel):
_lock = threading.Lock()
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
values["ernie_client_id"] = get_from_dict_or_env(
values,

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
import logging
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional
from pydantic_v1 import BaseModel, root_validator
from pydantic import model_validator, BaseModel
from tenacity import (
before_sleep_log,
retry,
@@ -231,7 +231,7 @@ class ChatGooglePalm(BaseChatModel, BaseModel):
"""
client: Any #: :meta private:
client: Any = None #: :meta private:
model_name: str = "models/chat-bison-001"
"""Model name to use."""
google_api_key: Optional[str] = None
@@ -248,7 +248,8 @@ class ChatGooglePalm(BaseChatModel, BaseModel):
"""Number of chat completions to generate for each prompt. Note that the API may
not return the full n completions if duplicates are generated."""
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate api key, python package exists, temperature, top_p, and top_k."""
google_api_key = get_from_dict_or_env(

View File

@@ -5,7 +5,7 @@ from io import StringIO
from typing import Any, Callable, Dict, List, Mapping, Optional
import yaml
from pydantic_v1 import Field
from pydantic import Field
from langchain.callbacks.manager import (
AsyncCallbackManagerForLLMRun,

View File

@@ -15,7 +15,7 @@ from typing import (
Union,
)
from pydantic_v1 import Field, root_validator
from pydantic import model_validator, ConfigDict, Field
from tenacity import (
before_sleep_log,
retry,
@@ -180,13 +180,10 @@ class JinaChat(BaseChatModel):
"""Whether to stream the results or not."""
max_tokens: Optional[int] = None
"""Maximum number of tokens to generate."""
model_config = ConfigDict(populate_by_name=True)
class Config:
"""Configuration for this pydantic object."""
allow_population_by_field_name = True
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def build_extra(cls, values: Dict[str, Any]) -> Dict[str, Any]:
"""Build extra kwargs from additional params that were passed in."""
all_required_field_names = get_pydantic_field_names(cls)
@@ -212,7 +209,8 @@ class JinaChat(BaseChatModel):
values["model_kwargs"] = extra
return values
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
values["jinachat_api_key"] = get_from_dict_or_env(

View File

@@ -15,7 +15,7 @@ from typing import (
Union,
)
from pydantic_v1 import Field, root_validator
from pydantic import model_validator, Field
from langchain.callbacks.manager import (
AsyncCallbackManagerForLLMRun,
@@ -272,7 +272,8 @@ class ChatLiteLLM(BaseChatModel):
return _completion_with_retry(**kwargs)
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate api key, python package exists, temperature, top_p, and top_k."""
try:

View File

@@ -3,7 +3,7 @@ import logging
from functools import partial
from typing import Any, Dict, List, Mapping, Optional
from pydantic_v1 import BaseModel, Extra
from pydantic import BaseModel, Extra
from langchain.callbacks.manager import (
AsyncCallbackManagerForLLMRun,

View File

@@ -17,7 +17,7 @@ from typing import (
Union,
)
from pydantic_v1 import Field, root_validator
from pydantic import model_validator, ConfigDict, Field
from langchain.adapters.openai import convert_dict_to_message, convert_message_to_dict
from langchain.callbacks.manager import (
@@ -175,13 +175,10 @@ class ChatOpenAI(BaseChatModel):
when using one of the many model providers that expose an OpenAI-like
API but with different models. In those cases, in order to avoid erroring
when tiktoken is called, you can specify a model name to use here."""
model_config = ConfigDict(populate_by_name=True)
class Config:
"""Configuration for this pydantic object."""
allow_population_by_field_name = True
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def build_extra(cls, values: Dict[str, Any]) -> Dict[str, Any]:
"""Build extra kwargs from additional params that were passed in."""
all_required_field_names = get_pydantic_field_names(cls)
@@ -207,7 +204,8 @@ class ChatOpenAI(BaseChatModel):
values["model_kwargs"] = extra
return values
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
values["openai_api_key"] = get_from_dict_or_env(

View File

@@ -2,7 +2,7 @@
from dataclasses import dataclass, field
from typing import TYPE_CHECKING, Any, Dict, List, Optional
from pydantic_v1 import root_validator
from pydantic import model_validator
from langchain.callbacks.manager import CallbackManagerForLLMRun
from langchain.chat_models.base import BaseChatModel
@@ -97,7 +97,8 @@ class ChatVertexAI(_VertexAICommon, BaseChatModel):
model_name: str = "chat-bison"
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that the python package exists in environment."""
cls._try_init_vertexai(values)

View File

@@ -1,6 +1,6 @@
from typing import Any, Callable, Dict, List
from pydantic_v1 import BaseModel, root_validator
from pydantic import model_validator, BaseModel
from langchain.docstore.document import Document
from langchain.document_loaders.base import BaseLoader
@@ -26,7 +26,7 @@ class ApifyDatasetLoader(BaseLoader, BaseModel):
documents = loader.load()
""" # noqa: E501
apify_client: Any
apify_client: Any = None
"""An instance of the ApifyClient class from the apify-client Python package."""
dataset_id: str
"""The ID of the dataset on the Apify platform."""
@@ -49,7 +49,8 @@ class ApifyDatasetLoader(BaseLoader, BaseModel):
dataset_id=dataset_id, dataset_mapping_function=dataset_mapping_function
)
@root_validator()
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate environment.

View File

@@ -13,7 +13,7 @@ from io import BufferedReader, BytesIO
from pathlib import PurePath
from typing import Any, Generator, Iterable, Mapping, Optional, Union
from pydantic_v1 import BaseModel, root_validator
from pydantic import model_validator, ConfigDict, BaseModel
PathLike = Union[str, PurePath]
@@ -28,7 +28,7 @@ class Blob(BaseModel):
Inspired by: https://developer.mozilla.org/en-US/docs/Web/API/Blob
"""
data: Union[bytes, str, None] # Raw data
data: Union[bytes, str, None] = None # Raw data
mimetype: Optional[str] = None # Not to be confused with a file extension
encoding: str = "utf-8" # Use utf-8 as default encoding, if decoding to string
# Location where the original content was found
@@ -36,17 +36,15 @@ class Blob(BaseModel):
# Useful for situations where downstream code assumes it must work with file paths
# rather than in-memory content.
path: Optional[PathLike] = None
class Config:
arbitrary_types_allowed = True
frozen = True
model_config = ConfigDict(arbitrary_types_allowed=True, frozen=True)
@property
def source(self) -> Optional[str]:
"""The source location of the blob as string if known otherwise none."""
return str(self.path) if self.path else None
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def check_blob_is_valid(cls, values: Mapping[str, Any]) -> Mapping[str, Any]:
"""Verify that either data or path is provided."""
if "data" not in values and "path" not in values:

View File

@@ -6,7 +6,7 @@ from pathlib import Path
from typing import Any, Dict, List, Mapping, Optional, Sequence, Union
import requests
from pydantic_v1 import BaseModel, root_validator
from pydantic import BaseModel, root_validator
from langchain.docstore.document import Document
from langchain.document_loaders.base import BaseLoader
@@ -37,11 +37,11 @@ class DocugamiLoader(BaseLoader, BaseModel):
access_token: Optional[str] = os.environ.get("DOCUGAMI_API_KEY")
"""The Docugami API access token to use."""
docset_id: Optional[str]
docset_id: Optional[str] = None
"""The Docugami API docset ID to use."""
document_ids: Optional[Sequence[str]]
document_ids: Optional[Sequence[str]] = None
"""The Docugami API document IDs to use."""
file_paths: Optional[Sequence[Union[Path, str]]]
file_paths: Optional[Sequence[Union[Path, str]]] = None
"""The local file paths to use."""
min_chunk_size: int = 32 # appended to the next chunk to avoid over-chunking
"""The minimum chunk size to use when parsing DGML. Defaults to 32."""

View File

@@ -11,7 +11,7 @@ import tempfile
from pathlib import Path
from typing import Any, Dict, List, Optional
from pydantic_v1 import BaseModel, root_validator
from pydantic import BaseModel, root_validator
from langchain.docstore.document import Document
from langchain.document_loaders.base import BaseLoader

View File

@@ -3,7 +3,7 @@ import warnings
from typing import Any, Dict, Iterator, List, Optional
import requests
from pydantic_v1 import BaseModel, root_validator, validator
from pydantic import model_validator, BaseModel, validator
from typing_extensions import NotRequired, TypedDict
from langchain.docstore.document import Document
@@ -61,7 +61,8 @@ class BaseEmbaasLoader(BaseModel):
params: EmbaasDocumentExtractionParameters = EmbaasDocumentExtractionParameters()
"""Additional parameters to pass to the Embaas document extraction API."""
@root_validator(pre=True)
@model_validator(mode="before")
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
embaas_api_key = get_from_dict_or_env(
@@ -208,9 +209,11 @@ class EmbaasLoader(BaseEmbaasLoader, BaseLoader):
file_path: str
"""The path to the file to load."""
blob_loader: Optional[EmbaasBlobLoader]
blob_loader: Optional[EmbaasBlobLoader] = None
"""The blob loader to use. If not provided, a default one will be created."""
# TODO[pydantic]: We couldn't refactor the `validator`, please replace it by `field_validator` manually.
# Check https://docs.pydantic.dev/dev-v2/migration/#changes-to-validators for more information.
@validator("blob_loader", always=True)
def validate_blob_loader(
cls, v: EmbaasBlobLoader, values: Dict

View File

@@ -3,7 +3,7 @@ from datetime import datetime
from typing import Dict, Iterator, List, Literal, Optional, Union
import requests
from pydantic_v1 import BaseModel, root_validator, validator
from pydantic import BaseModel, root_validator, validator
from langchain.docstore.document import Document
from langchain.document_loaders.base import BaseLoader

View File

@@ -11,7 +11,7 @@ import os
from pathlib import Path
from typing import Any, Dict, List, Optional, Sequence, Union
from pydantic_v1 import BaseModel, root_validator, validator
from pydantic import field_validator, BaseModel, root_validator
from langchain.docstore.document import Document
from langchain.document_loaders.base import BaseLoader
@@ -94,7 +94,8 @@ class GoogleDriveLoader(BaseLoader, BaseModel):
values["file_types"] = [full_form(file_type) for file_type in file_types]
return values
@validator("credentials_path")
@field_validator("credentials_path")
@classmethod
def validate_credentials_path(cls, v: Any, **kwargs: Any) -> Any:
"""Validate that credentials_path exists."""
if not v.exists():

View File

@@ -8,11 +8,12 @@ from enum import Enum
from pathlib import Path
from typing import TYPE_CHECKING, Dict, List, Optional, Type, Union
from pydantic_v1 import BaseModel, BaseSettings, Field, FilePath, SecretStr
from pydantic import BaseModel, Field, FilePath, SecretStr
from langchain.docstore.document import Document
from langchain.document_loaders.base import BaseLoader
from langchain.document_loaders.onedrive_file import OneDriveFileLoader
from pydantic_settings import BaseSettings, SettingsConfigDict
if TYPE_CHECKING:
from O365 import Account
@@ -23,13 +24,9 @@ logger = logging.getLogger(__name__)
class _OneDriveSettings(BaseSettings):
client_id: str = Field(..., env="O365_CLIENT_ID")
client_secret: SecretStr = Field(..., env="O365_CLIENT_SECRET")
class Config:
env_prefix = ""
case_sentive = False
env_file = ".env"
client_id: str = Field(..., validation_alias="O365_CLIENT_ID")
client_secret: SecretStr = Field(..., validation_alias="O365_CLIENT_SECRET")
model_config = SettingsConfigDict(env_prefix="", case_sentive=False, env_file=".env")
class _OneDriveTokenStorage(BaseSettings):

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
import tempfile
from typing import TYPE_CHECKING, List
from pydantic_v1 import BaseModel, Field
from pydantic import ConfigDict, BaseModel, Field
from langchain.docstore.document import Document
from langchain.document_loaders.base import BaseLoader
@@ -20,11 +20,7 @@ class OneDriveFileLoader(BaseLoader, BaseModel):
file: File = Field(...)
"""The file to load."""
class Config:
arbitrary_types_allowed = True
"""Allow arbitrary types. This is needed for the File type. Default is True.
See https://pydantic-docs.helpmanual.io/usage/types/#arbitrary-types-allowed"""
model_config = ConfigDict(arbitrary_types_allowed=True)
def load(self) -> List[Document]:
"""Load Documents"""

View File

@@ -6,8 +6,8 @@ from pathlib import Path
from typing import Any, Dict, List, Optional, Sequence, Union
from urllib.parse import parse_qs, urlparse
from pydantic_v1 import root_validator
from pydantic_v1.dataclasses import dataclass
from pydantic import root_validator
from pydantic.dataclasses import dataclass
from langchain.docstore.document import Document
from langchain.document_loaders.base import BaseLoader

View File

@@ -2,7 +2,7 @@
from typing import Any, Callable, List, Sequence
import numpy as np
from pydantic_v1 import BaseModel, Field
from pydantic import ConfigDict, BaseModel, Field
from langchain.embeddings.base import Embeddings
from langchain.schema import BaseDocumentTransformer, Document
@@ -133,11 +133,7 @@ class EmbeddingsRedundantFilter(BaseDocumentTransformer, BaseModel):
similarity_threshold: float = 0.95
"""Threshold for determining when two documents are similar enough
to be considered redundant."""
class Config:
"""Configuration for this pydantic object."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
def transform_documents(
self, documents: Sequence[Document], **kwargs: Any
@@ -188,11 +184,7 @@ class EmbeddingsClusteringFilter(BaseDocumentTransformer, BaseModel):
This could dramatically reduce results when there is a lot of overlap between
clusters.
"""
class Config:
"""Configuration for this pydantic object."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
def transform_documents(
self, documents: Sequence[Document], **kwargs: Any

View File

@@ -1,7 +1,7 @@
"""Reorder documents"""
from typing import Any, List, Sequence
from pydantic_v1 import BaseModel
from pydantic import ConfigDict, BaseModel
from langchain.schema import BaseDocumentTransformer, Document
@@ -26,11 +26,7 @@ class LongContextReorder(BaseDocumentTransformer, BaseModel):
Performance degrades when models must access relevant information
in the middle of long contexts.
See: https://arxiv.org/abs//2307.03172"""
class Config:
"""Configuration for this pydantic object."""
arbitrary_types_allowed = True
model_config = ConfigDict(arbitrary_types_allowed=True)
def transform_documents(
self, documents: Sequence[Document], **kwargs: Any

Some files were not shown because too many files have changed in this diff Show More