error_handle_wraps.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import logging
  2. from functools import wraps
  3. import openai
  4. from core.llm.error import LLMAPIConnectionError, LLMAPIUnavailableError, LLMRateLimitError, LLMAuthorizationError, \
  5. LLMBadRequestError
  6. def handle_llm_exceptions(func):
  7. @wraps(func)
  8. def wrapper(*args, **kwargs):
  9. try:
  10. return func(*args, **kwargs)
  11. except openai.error.InvalidRequestError as e:
  12. logging.exception("Invalid request to OpenAI API.")
  13. raise LLMBadRequestError(str(e))
  14. except openai.error.APIConnectionError as e:
  15. logging.exception("Failed to connect to OpenAI API.")
  16. raise LLMAPIConnectionError(e.__class__.__name__ + ":" + str(e))
  17. except (openai.error.APIError, openai.error.ServiceUnavailableError, openai.error.Timeout) as e:
  18. logging.exception("OpenAI service unavailable.")
  19. raise LLMAPIUnavailableError(e.__class__.__name__ + ":" + str(e))
  20. except openai.error.RateLimitError as e:
  21. raise LLMRateLimitError(str(e))
  22. except openai.error.AuthenticationError as e:
  23. raise LLMAuthorizationError(str(e))
  24. except openai.error.OpenAIError as e:
  25. raise LLMBadRequestError(e.__class__.__name__ + ":" + str(e))
  26. return wrapper
  27. def handle_llm_exceptions_async(func):
  28. @wraps(func)
  29. async def wrapper(*args, **kwargs):
  30. try:
  31. return await func(*args, **kwargs)
  32. except openai.error.InvalidRequestError as e:
  33. logging.exception("Invalid request to OpenAI API.")
  34. raise LLMBadRequestError(str(e))
  35. except openai.error.APIConnectionError as e:
  36. logging.exception("Failed to connect to OpenAI API.")
  37. raise LLMAPIConnectionError(e.__class__.__name__ + ":" + str(e))
  38. except (openai.error.APIError, openai.error.ServiceUnavailableError, openai.error.Timeout) as e:
  39. logging.exception("OpenAI service unavailable.")
  40. raise LLMAPIUnavailableError(e.__class__.__name__ + ":" + str(e))
  41. except openai.error.RateLimitError as e:
  42. raise LLMRateLimitError(str(e))
  43. except openai.error.AuthenticationError as e:
  44. raise LLMAuthorizationError(str(e))
  45. except openai.error.OpenAIError as e:
  46. raise LLMBadRequestError(e.__class__.__name__ + ":" + str(e))
  47. return wrapper