mirror of
https://github.com/hwchase17/langchain.git
synced 2026-02-04 08:10:25 +00:00
Compare commits
3 Commits
langchain=
...
pydantic/b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
00863ce4a5 | ||
|
|
7b17eaf4ad | ||
|
|
d7ec7a9462 |
@@ -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 (
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
"""Models for the Constitutional AI chain."""
|
||||
from pydantic_v1 import BaseModel
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class ConstitutionalPrinciple(BaseModel):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 - "
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]:
|
||||
|
||||
@@ -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]:
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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]:
|
||||
|
||||
@@ -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]:
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 - "
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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]:
|
||||
|
||||
@@ -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]:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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"]:
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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 ---
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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"""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user