from typing import Any
from langchain_core.tools import ToolException
from .logger import logger
[docs]
class LangChainPrologException(Exception):
"""Base exception class for langchain-prolog with automatic logging."""
[docs]
def __init__(self, message: str, *args: Any, **kwargs: Any) -> None:
"""Initialize exception and log it.
Args:
message (str): Error message
*args: Additional positional arguments for Exception
**kwargs: Additional keyword arguments. Special keys:
- log_level: Logging level (default: error)
- exc_info: Exception info to include in log
"""
super().__init__(message, *args)
# Extract logging parameters
log_level = kwargs.pop("log_level", "error")
exc_info = kwargs.pop("exc_info", None)
# Log the exception
log_func = getattr(logger, log_level)
log_func(message, exc_info=exc_info)
[docs]
class PrologRuntimeError(LangChainPrologException):
"""Raised when a Prolog execution error occurs."""
pass
[docs]
class PrologInitializationError(LangChainPrologException):
"""Raised when Prolog initialization fails."""
pass
[docs]
class PrologValueError(LangChainPrologException):
"""Raised when a value error occurs."""
pass
[docs]
class PrologFileNotFoundError(LangChainPrologException):
"""Raised when a file is not found."""
pass