langchain-learning-kit/app/utils/exceptions.py

130 lines
2.7 KiB
Python

"""
应用程序的自定义异常类。
"""
from typing import Optional, Dict, Any
class AppException(Exception):
"""
所有应用程序异常的基础异常类。
"""
code: str = "INTERNAL_ERROR"
message: str = "An internal error occurred"
status_code: int = 500
def __init__(
self,
message: Optional[str] = None,
details: Optional[Dict[str, Any]] = None,
status_code: Optional[int] = None,
):
self.message = message or self.message
self.details = details or {}
if status_code:
self.status_code = status_code
super().__init__(self.message)
def to_dict(self) -> Dict[str, Any]:
"""
将异常转换为字典用于 JSON 响应。
Returns:
Dict[str, Any]: 异常数据
"""
return {
"code": self.code,
"message": self.message,
"details": self.details,
}
class ResourceNotFoundError(AppException):
"""
当请求的资源未找到时引发的异常。
"""
code = "RESOURCE_NOT_FOUND"
message = "Resource not found"
status_code = 404
class InvalidConfigError(AppException):
"""
当模型配置无效时引发的异常。
"""
code = "INVALID_CONFIG"
message = "Invalid configuration"
status_code = 400
class ExternalAPIError(AppException):
"""
当外部 API 调用失败时引发的异常。
"""
code = "EXTERNAL_API_ERROR"
message = "External API error"
status_code = 502
class DatabaseError(AppException):
"""
当数据库操作失败时引发的异常。
"""
code = "DATABASE_ERROR"
message = "Database operation failed"
status_code = 500
class ValidationError(AppException):
"""
当输入验证失败时引发的异常。
"""
code = "VALIDATION_ERROR"
message = "Input validation failed"
status_code = 400
class DuplicateResourceError(AppException):
"""
当尝试创建重复资源时引发的异常。
"""
code = "DUPLICATE_RESOURCE"
message = "Resource already exists"
status_code = 409
class VectorStoreError(AppException):
"""
当向量存储操作失败时引发的异常。
"""
code = "VECTOR_STORE_ERROR"
message = "Vector store operation failed"
status_code = 500
class EmbeddingError(AppException):
"""
当嵌入向量生成失败时引发的异常。
"""
code = "EMBEDDING_ERROR"
message = "Embedding generation failed"
status_code = 500
class AgentExecutionError(AppException):
"""
当代理执行失败时引发的异常。
"""
code = "AGENT_EXECUTION_ERROR"
message = "Agent execution failed"
status_code = 500