Spaces:
Sleeping
Sleeping
File size: 3,671 Bytes
7644eac |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
"""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
|