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