parent
							
								
									51dea6ba75
								
							
						
					
					
						commit
						8665c249d0
					
				
											
												
													File diff suppressed because one or more lines are too long
												
											
										
									
								| @ -0,0 +1,198 @@ | |||||||
|  | """ | ||||||
|  | A module that contains all the types used in this project | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | import os | ||||||
|  | import platform | ||||||
|  | from enum import Enum | ||||||
|  | from typing import Union | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | python_version = list(platform.python_version_tuple()) | ||||||
|  | SUPPORT_ADD_NOTES = int(python_version[0]) >= 3 and int(python_version[1]) >= 11 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class ChatbotError(Exception): | ||||||
|  |     """ | ||||||
|  |     Base class for all Chatbot errors in this Project | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     def __init__(self, *args: object) -> None: | ||||||
|  |         if SUPPORT_ADD_NOTES: | ||||||
|  |             super().add_note( | ||||||
|  |                 "Please check that the input is correct, or you can resolve this issue by filing an issue", | ||||||
|  |             ) | ||||||
|  |             super().add_note("Project URL: https://github.com/acheong08/ChatGPT") | ||||||
|  |         super().__init__(*args) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class ActionError(ChatbotError): | ||||||
|  |     """ | ||||||
|  |     Subclass of ChatbotError | ||||||
|  | 
 | ||||||
|  |     An object that throws an error because the execution of an operation is blocked | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     def __init__(self, *args: object) -> None: | ||||||
|  |         if SUPPORT_ADD_NOTES: | ||||||
|  |             super().add_note( | ||||||
|  |                 "The current operation is not allowed, which may be intentional", | ||||||
|  |             ) | ||||||
|  |         super().__init__(*args) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class ActionNotAllowedError(ActionError): | ||||||
|  |     """ | ||||||
|  |     Subclass of ActionError | ||||||
|  | 
 | ||||||
|  |     An object that throws an error because the execution of an unalloyed operation is blocked | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class ActionRefuseError(ActionError): | ||||||
|  |     """ | ||||||
|  |     Subclass of ActionError | ||||||
|  | 
 | ||||||
|  |     An object that throws an error because the execution of a refused operation is blocked. | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class CLIError(ChatbotError): | ||||||
|  |     """ | ||||||
|  |     Subclass of ChatbotError | ||||||
|  | 
 | ||||||
|  |     The error caused by a CLI program error | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class ErrorType(Enum): | ||||||
|  |     """ | ||||||
|  |     Enumeration class for different types of errors. | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     USER_ERROR = -1 | ||||||
|  |     UNKNOWN_ERROR = 0 | ||||||
|  |     SERVER_ERROR = 1 | ||||||
|  |     RATE_LIMIT_ERROR = 2 | ||||||
|  |     INVALID_REQUEST_ERROR = 3 | ||||||
|  |     EXPIRED_ACCESS_TOKEN_ERROR = 4 | ||||||
|  |     INVALID_ACCESS_TOKEN_ERROR = 5 | ||||||
|  |     PROHIBITED_CONCURRENT_QUERY_ERROR = 6 | ||||||
|  |     AUTHENTICATION_ERROR = 7 | ||||||
|  |     CLOUDFLARE_ERROR = 8 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Error(ChatbotError): | ||||||
|  |     """ | ||||||
|  |     Base class for exceptions in V1 module. | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     def __init__( | ||||||
|  |         self, | ||||||
|  |         source: str, | ||||||
|  |         message: str, | ||||||
|  |         *args: object, | ||||||
|  |         code: Union[ErrorType, int] = ErrorType.UNKNOWN_ERROR, | ||||||
|  |     ) -> None: | ||||||
|  |         self.source: str = source | ||||||
|  |         self.message: str = message | ||||||
|  |         self.code: ErrorType | int = code | ||||||
|  |         super().__init__(*args) | ||||||
|  | 
 | ||||||
|  |     def __str__(self) -> str: | ||||||
|  |         return f"{self.source}: {self.message} (code: {self.code})" | ||||||
|  | 
 | ||||||
|  |     def __repr__(self) -> str: | ||||||
|  |         return f"{self.source}: {self.message} (code: {self.code})" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class AuthenticationError(ChatbotError): | ||||||
|  |     """ | ||||||
|  |     Subclass of ChatbotError | ||||||
|  | 
 | ||||||
|  |     The object of the error thrown by a validation failure or exception | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     def __init__(self, *args: object) -> None: | ||||||
|  |         if SUPPORT_ADD_NOTES: | ||||||
|  |             super().add_note( | ||||||
|  |                 "Please check if your key is correct, maybe it may not be valid", | ||||||
|  |             ) | ||||||
|  |         super().__init__(*args) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class APIConnectionError(ChatbotError): | ||||||
|  |     """ | ||||||
|  |     Subclass of ChatbotError | ||||||
|  | 
 | ||||||
|  |     An exception object thrown when an API connection fails or fails to connect due to network or | ||||||
|  |     other miscellaneous reasons | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     def __init__(self, *args: object) -> None: | ||||||
|  |         if SUPPORT_ADD_NOTES: | ||||||
|  |             super().add_note( | ||||||
|  |                 "Please check if there is a problem with your network connection", | ||||||
|  |             ) | ||||||
|  |         super().__init__(*args) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class NotAllowRunning(ActionNotAllowedError): | ||||||
|  |     """ | ||||||
|  |     Subclass of ActionNotAllowedError | ||||||
|  | 
 | ||||||
|  |     Direct startup is not allowed for some reason | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class ResponseError(APIConnectionError): | ||||||
|  |     """ | ||||||
|  |     Subclass of APIConnectionError | ||||||
|  | 
 | ||||||
|  |     Error objects caused by API request errors due to network or other miscellaneous reasons | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class OpenAIError(APIConnectionError): | ||||||
|  |     """ | ||||||
|  |     Subclass of APIConnectionError | ||||||
|  | 
 | ||||||
|  |     Error objects caused by OpenAI's own server errors | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class RequestError(APIConnectionError): | ||||||
|  |     """ | ||||||
|  |     Subclass of APIConnectionError | ||||||
|  | 
 | ||||||
|  |     There is a problem with the API response due to network or other miscellaneous reasons, or there | ||||||
|  |     is no reply to the object that caused the error at all | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Colors: | ||||||
|  |     """ | ||||||
|  |     Colors for printing | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     HEADER = "\033[95m" | ||||||
|  |     OKBLUE = "\033[94m" | ||||||
|  |     OKCYAN = "\033[96m" | ||||||
|  |     OKGREEN = "\033[92m" | ||||||
|  |     WARNING = "\033[93m" | ||||||
|  |     FAIL = "\033[91m" | ||||||
|  |     ENDC = "\033[0m" | ||||||
|  |     BOLD = "\033[1m" | ||||||
|  |     UNDERLINE = "\033[4m" | ||||||
|  | 
 | ||||||
|  |     def __init__(self) -> None: | ||||||
|  |         if os.getenv("NO_COLOR"): | ||||||
|  |             Colors.HEADER = "" | ||||||
|  |             Colors.OKBLUE = "" | ||||||
|  |             Colors.OKCYAN = "" | ||||||
|  |             Colors.OKGREEN = "" | ||||||
|  |             Colors.WARNING = "" | ||||||
|  |             Colors.FAIL = "" | ||||||
|  |             Colors.ENDC = "" | ||||||
|  |             Colors.BOLD = "" | ||||||
|  |             Colors.UNDERLINE = "" | ||||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								
					Loading…
					
					
				
		Reference in new issue