Spaces:
Sleeping
Sleeping
| """Compatibility layer for OpenAI API to handle different library versions. | |
| This module provides compatibility between different versions of the OpenAI Python library, | |
| particularly between v0.x.x and v1.x.x which had significant API changes. | |
| """ | |
| import inspect | |
| import sys | |
| import importlib | |
| # Import OpenAI | |
| import openai | |
| # Determine OpenAI version | |
| OPENAI_V1 = hasattr(openai, "__version__") and openai.__version__.startswith("1.") | |
| # Define error classes for v1 compatibility | |
| class OpenAIError(Exception): | |
| """Base exception class for OpenAI errors""" | |
| pass | |
| class APIError(OpenAIError): | |
| """Exception raised when the API responds with an error""" | |
| pass | |
| class RateLimitError(OpenAIError): | |
| """Exception raised when rate limit is exceeded""" | |
| pass | |
| class APIConnectionError(OpenAIError): | |
| """Exception raised when connection to OpenAI API fails""" | |
| pass | |
| class InvalidRequestError(OpenAIError): | |
| """Exception raised when request is invalid""" | |
| pass | |
| class AuthenticationError(OpenAIError): | |
| """Exception raised when authentication fails""" | |
| pass | |
| class Timeout(OpenAIError): | |
| """Exception raised when request times out""" | |
| pass | |
| class ServiceUnavailableError(OpenAIError): | |
| """Exception raised when service is unavailable""" | |
| pass | |
| class TryAgain(OpenAIError): | |
| """Exception raised when a request should be retried""" | |
| pass | |
| class PermissionError(OpenAIError): | |
| """Exception raised when user doesn't have permission""" | |
| pass | |
| class InvalidAPIType(OpenAIError): | |
| """Exception raised when the wrong type of API is used""" | |
| pass | |
| # Create compatibility error module | |
| class ErrorModule: | |
| def __init__(self): | |
| self.APIError = APIError | |
| self.RateLimitError = RateLimitError | |
| self.APIConnectionError = APIConnectionError | |
| self.InvalidRequestError = InvalidRequestError | |
| self.AuthenticationError = AuthenticationError | |
| self.Timeout = Timeout | |
| self.ServiceUnavailableError = ServiceUnavailableError | |
| self.TryAgain = TryAgain | |
| self.PermissionError = PermissionError | |
| self.InvalidAPIType = InvalidAPIType | |
| self.OpenAIError = OpenAIError | |
| # Attach error module to OpenAI if it doesn't exist | |
| if not hasattr(openai, "error"): | |
| openai.error = ErrorModule() | |
| # Function to map OpenAI v1 errors to v0 style errors | |
| def map_openai_error(error): | |
| """Map OpenAI v1 errors to v0 style errors for compatibility""" | |
| if OPENAI_V1: | |
| error_type = type(error).__name__ | |
| if error_type == "APIError": | |
| return openai.error.APIError(str(error)) | |
| elif error_type == "RateLimitError": | |
| return openai.error.RateLimitError(str(error)) | |
| elif error_type == "APIConnectionError": | |
| return openai.error.APIConnectionError(str(error)) | |
| elif error_type == "InvalidRequestError": | |
| return openai.error.InvalidRequestError(str(error)) | |
| elif error_type == "AuthenticationError": | |
| return openai.error.AuthenticationError(str(error)) | |
| elif error_type == "Timeout" or "TimeoutError" in error_type: | |
| return openai.error.Timeout(str(error)) | |
| elif error_type == "ServiceUnavailableError": | |
| return openai.error.ServiceUnavailableError(str(error)) | |
| elif error_type == "TryAgain": | |
| return openai.error.TryAgain(str(error)) | |
| elif error_type == "PermissionError": | |
| return openai.error.PermissionError(str(error)) | |
| elif error_type == "InvalidAPIType": | |
| return openai.error.InvalidAPIType(str(error)) | |
| else: | |
| return openai.error.OpenAIError(str(error)) | |
| return error | |