mirror of
https://github.com/hwchase17/langchain.git
synced 2025-08-14 07:07:34 +00:00
Add ruff rules [FBT001](https://docs.astral.sh/ruff/rules/boolean-type-hint-positional-argument/) and [FBT002](https://docs.astral.sh/ruff/rules/boolean-default-value-positional-argument/). Mostly `noqa`s to not introduce breaking changes and possible non-breaking fixes have already been done in a [previous PR](https://github.com/langchain-ai/langchain/pull/29424). These rules will prevent new violations to happen.
86 lines
3.0 KiB
Python
86 lines
3.0 KiB
Python
"""Custom **exceptions** for LangChain."""
|
|
|
|
from enum import Enum
|
|
from typing import Any, Optional
|
|
|
|
|
|
class LangChainException(Exception): # noqa: N818
|
|
"""General LangChain exception."""
|
|
|
|
|
|
class TracerException(LangChainException):
|
|
"""Base class for exceptions in tracers module."""
|
|
|
|
|
|
class OutputParserException(ValueError, LangChainException): # noqa: N818
|
|
"""Exception that output parsers should raise to signify a parsing error.
|
|
|
|
This exists to differentiate parsing errors from other code or execution errors
|
|
that also may arise inside the output parser. OutputParserExceptions will be
|
|
available to catch and handle in ways to fix the parsing error, while other
|
|
errors will be raised.
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
error: Any,
|
|
observation: Optional[str] = None,
|
|
llm_output: Optional[str] = None,
|
|
send_to_llm: bool = False, # noqa: FBT001,FBT002
|
|
):
|
|
"""Create an OutputParserException.
|
|
|
|
Args:
|
|
error: The error that's being re-raised or an error message.
|
|
observation: String explanation of error which can be passed to a
|
|
model to try and remediate the issue. Defaults to None.
|
|
llm_output: String model output which is error-ing.
|
|
Defaults to None.
|
|
send_to_llm: Whether to send the observation and llm_output back to an Agent
|
|
after an OutputParserException has been raised.
|
|
This gives the underlying model driving the agent the context that the
|
|
previous output was improperly structured, in the hopes that it will
|
|
update the output to the correct format.
|
|
Defaults to False.
|
|
"""
|
|
if isinstance(error, str):
|
|
error = create_message(
|
|
message=error, error_code=ErrorCode.OUTPUT_PARSING_FAILURE
|
|
)
|
|
super().__init__(error)
|
|
if send_to_llm and (observation is None or llm_output is None):
|
|
msg = (
|
|
"Arguments 'observation' & 'llm_output'"
|
|
" are required if 'send_to_llm' is True"
|
|
)
|
|
raise ValueError(msg)
|
|
self.observation = observation
|
|
self.llm_output = llm_output
|
|
self.send_to_llm = send_to_llm
|
|
|
|
|
|
class ErrorCode(Enum):
|
|
"""Error codes."""
|
|
|
|
INVALID_PROMPT_INPUT = "INVALID_PROMPT_INPUT"
|
|
INVALID_TOOL_RESULTS = "INVALID_TOOL_RESULTS"
|
|
MESSAGE_COERCION_FAILURE = "MESSAGE_COERCION_FAILURE"
|
|
MODEL_AUTHENTICATION = "MODEL_AUTHENTICATION"
|
|
MODEL_NOT_FOUND = "MODEL_NOT_FOUND"
|
|
MODEL_RATE_LIMIT = "MODEL_RATE_LIMIT"
|
|
OUTPUT_PARSING_FAILURE = "OUTPUT_PARSING_FAILURE"
|
|
|
|
|
|
def create_message(*, message: str, error_code: ErrorCode) -> str:
|
|
"""Create a message with a link to the LangChain troubleshooting guide.
|
|
|
|
Args:
|
|
message: The message to display.
|
|
error_code: The error code to display.
|
|
"""
|
|
return (
|
|
f"{message}\n"
|
|
"For troubleshooting, visit: https://python.langchain.com/docs/"
|
|
f"troubleshooting/errors/{error_code.value} "
|
|
)
|